diff options
author | Tor Norbye <tnorbye@google.com> | 2014-09-18 13:38:58 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-09-18 13:38:58 -0700 |
commit | b5fb31ef6a38f19404859755dbd2e345215b97bf (patch) | |
tree | e8787c45e494dfcc558faf0f75956f8785c39b94 /plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AnnotationExprent.java | |
parent | e222a9e1e66670a56e926a6b0f3e10231eeeb1fb (diff) | |
parent | e782c57d74000722f9db4c9426317410520670c6 (diff) | |
download | idea-b5fb31ef6a38f19404859755dbd2e345215b97bf.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into merge
Conflicts:
.idea/libraries/asm_tools.xml
.idea/libraries/bouncy_castle.xml
.idea/libraries/builder_model.xml
.idea/libraries/commons_compress.xml
.idea/libraries/easymock_tools.xml
.idea/libraries/freemarker_2_3_20.xml
.idea/libraries/guava_tools.xml
.idea/libraries/kxml2.xml
.idea/libraries/lombok_ast.xml
.idea/libraries/mockito.xml
.idea/modules.xml
.idea/vcs.xml
build/scripts/layouts.gant
updater/src/com/intellij/updater/Runner.java
Change-Id: I8e1c173e00cd76c855b8a98543b0a0edfdd99d12
Diffstat (limited to 'plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AnnotationExprent.java')
-rw-r--r-- | plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AnnotationExprent.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AnnotationExprent.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AnnotationExprent.java new file mode 100644 index 000000000000..9383d76559a5 --- /dev/null +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AnnotationExprent.java @@ -0,0 +1,114 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.java.decompiler.modules.decompiler.exps; + +import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; +import org.jetbrains.java.decompiler.util.InterpreterUtil; + +import java.util.List; + + +public class AnnotationExprent extends Exprent { + + public static final int ANNOTATION_NORMAL = 1; + public static final int ANNOTATION_MARKER = 2; + public static final int ANNOTATION_SINGLE_ELEMENT = 3; + + + private String classname; + + private List<String> parnames; + + private List<Exprent> parvalues; + + { + this.type = EXPRENT_ANNOTATION; + } + + public AnnotationExprent(String classname, List<String> parnames, List<Exprent> parvalues) { + this.classname = classname; + this.parnames = parnames; + this.parvalues = parvalues; + } + + public String toJava(int indent) { + + String new_line_separator = DecompilerContext.getNewLineSeparator(); + + StringBuilder buffer = new StringBuilder(); + String indstr = InterpreterUtil.getIndentString(indent); + + buffer.append(indstr); + buffer.append("@"); + buffer.append(DecompilerContext.getImportCollector().getShortName(ExprProcessor.buildJavaClassName(classname))); + + if (!parnames.isEmpty()) { + buffer.append("("); + if (parnames.size() == 1 && "value".equals(parnames.get(0))) { + buffer.append(parvalues.get(0).toJava(indent + 1)); + } + else { + String indstr1 = InterpreterUtil.getIndentString(indent + 1); + + for (int i = 0; i < parnames.size(); i++) { + buffer.append(new_line_separator).append(indstr1); + buffer.append(parnames.get(i)); + buffer.append(" = "); + buffer.append(parvalues.get(i).toJava(indent + 2)); + + if (i < parnames.size() - 1) { + buffer.append(","); + } + } + buffer.append(new_line_separator).append(indstr); + } + + buffer.append(")"); + } + + return buffer.toString(); + } + + public int getAnnotationType() { + + if (parnames.isEmpty()) { + return ANNOTATION_MARKER; + } + else { + if (parnames.size() == 1 && "value".equals(parnames.get(0))) { + return ANNOTATION_SINGLE_ELEMENT; + } + else { + return ANNOTATION_NORMAL; + } + } + } + + public boolean equals(Object o) { + if (o == this) return true; + if (o == null || !(o instanceof AnnotationExprent)) return false; + + AnnotationExprent ann = (AnnotationExprent)o; + return classname.equals(ann.classname) && + InterpreterUtil.equalLists(parnames, ann.parnames) && + InterpreterUtil.equalLists(parvalues, ann.parvalues); + } + + public String getClassname() { + return classname; + } +} |