diff options
Diffstat (limited to 'plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/attr/StructGeneralAttribute.java')
-rw-r--r-- | plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/attr/StructGeneralAttribute.java | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/attr/StructGeneralAttribute.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/attr/StructGeneralAttribute.java new file mode 100644 index 000000000000..2cdc524e37a1 --- /dev/null +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/attr/StructGeneralAttribute.java @@ -0,0 +1,118 @@ +/* + * 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.struct.attr; + +import org.jetbrains.java.decompiler.struct.consts.ConstantPool; +import org.jetbrains.java.decompiler.util.DataInputFullStream; + +import java.io.IOException; + +/* + attribute_info { + u2 attribute_name_index; + u4 attribute_length; + u1 info[attribute_length]; + } +*/ +public class StructGeneralAttribute { + + public static final String ATTRIBUTE_CODE = "Code"; + public static final String ATTRIBUTE_INNER_CLASSES = "InnerClasses"; + public static final String ATTRIBUTE_SIGNATURE = "Signature"; + public static final String ATTRIBUTE_ANNOTATION_DEFAULT = "AnnotationDefault"; + public static final String ATTRIBUTE_EXCEPTIONS = "Exceptions"; + public static final String ATTRIBUTE_ENCLOSING_METHOD = "EnclosingMethod"; + public static final String ATTRIBUTE_RUNTIME_VISIBLE_ANNOTATIONS = "RuntimeVisibleAnnotations"; + public static final String ATTRIBUTE_RUNTIME_INVISIBLE_ANNOTATIONS = "RuntimeInvisibleAnnotations"; + public static final String ATTRIBUTE_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS = "RuntimeVisibleParameterAnnotations"; + public static final String ATTRIBUTE_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS = "RuntimeInvisibleParameterAnnotations"; + public static final String ATTRIBUTE_RUNTIME_VISIBLE_TYPE_ANNOTATIONS = "RuntimeVisibleTypeAnnotations"; + public static final String ATTRIBUTE_RUNTIME_INVISIBLE_TYPE_ANNOTATIONS = "RuntimeInvisibleTypeAnnotations"; + public static final String ATTRIBUTE_LOCAL_VARIABLE_TABLE = "LocalVariableTable"; + public static final String ATTRIBUTE_CONSTANT_VALUE = "ConstantValue"; + public static final String ATTRIBUTE_BOOTSTRAP_METHODS = "BootstrapMethods"; + public static final String ATTRIBUTE_SYNTHETIC = "Synthetic"; + public static final String ATTRIBUTE_DEPRECATED = "Deprecated"; + + private String name; + private byte[] info; + + public static StructGeneralAttribute createAttribute(String name) { + StructGeneralAttribute attr; + + if (ATTRIBUTE_INNER_CLASSES.equals(name)) { + attr = new StructInnerClassesAttribute(); + } + else if (ATTRIBUTE_CONSTANT_VALUE.equals(name)) { + attr = new StructConstantValueAttribute(); + } + else if (ATTRIBUTE_SIGNATURE.equals(name)) { + attr = new StructGenericSignatureAttribute(); + } + else if (ATTRIBUTE_ANNOTATION_DEFAULT.equals(name)) { + attr = new StructAnnDefaultAttribute(); + } + else if (ATTRIBUTE_EXCEPTIONS.equals(name)) { + attr = new StructExceptionsAttribute(); + } + else if (ATTRIBUTE_ENCLOSING_METHOD.equals(name)) { + attr = new StructEnclosingMethodAttribute(); + } + else if (ATTRIBUTE_RUNTIME_VISIBLE_ANNOTATIONS.equals(name) || + ATTRIBUTE_RUNTIME_INVISIBLE_ANNOTATIONS.equals(name)) { + attr = new StructAnnotationAttribute(); + } + else if (ATTRIBUTE_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS.equals(name) || + ATTRIBUTE_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS.equals(name)) { + attr = new StructAnnotationParameterAttribute(); + } + else if (ATTRIBUTE_RUNTIME_VISIBLE_TYPE_ANNOTATIONS.equals(name) || + ATTRIBUTE_RUNTIME_INVISIBLE_TYPE_ANNOTATIONS.equals(name)) { + attr = new StructAnnotationTypeAttribute(); + } + else if (ATTRIBUTE_LOCAL_VARIABLE_TABLE.equals(name)) { + attr = new StructLocalVariableTableAttribute(); + } + else if (ATTRIBUTE_BOOTSTRAP_METHODS.equals(name)) { + attr = new StructBootstrapMethodsAttribute(); + } + else if (ATTRIBUTE_SYNTHETIC.equals(name) || + ATTRIBUTE_DEPRECATED.equals(name)) { + attr = new StructGeneralAttribute(); + } + else { + // unsupported attribute + return null; + } + + attr.name = name; + return attr; + } + + protected DataInputFullStream stream() { + return new DataInputFullStream(info); + } + + public void initContent(ConstantPool pool) throws IOException { } + + public void setInfo(byte[] info) { + this.info = info; + } + + public String getName() { + return name; + } +} |