diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/AccessFlags.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/AccessFlags.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-/**
- * See JVMS, sections 4.2, 4.6, 4.7.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class AccessFlags {
- public static final int ACC_PUBLIC = 0x0001; // class, inner, field, method
- public static final int ACC_PRIVATE = 0x0002; // inner, field, method
- public static final int ACC_PROTECTED = 0x0004; // inner, field, method
- public static final int ACC_STATIC = 0x0008; // inner, field, method
- public static final int ACC_FINAL = 0x0010; // class, inner, field, method
- public static final int ACC_SUPER = 0x0020; // class
- public static final int ACC_SYNCHRONIZED = 0x0020; // method
- public static final int ACC_VOLATILE = 0x0040; // field
- public static final int ACC_BRIDGE = 0x0040; // method
- public static final int ACC_TRANSIENT = 0x0080; // field
- public static final int ACC_VARARGS = 0x0080; // method
- public static final int ACC_NATIVE = 0x0100; // method
- public static final int ACC_INTERFACE = 0x0200; // class, inner
- public static final int ACC_ABSTRACT = 0x0400; // class, inner, method
- public static final int ACC_STRICT = 0x0800; // method
- public static final int ACC_SYNTHETIC = 0x1000; // class, inner, field, method
- public static final int ACC_ANNOTATION = 0x2000; // class, inner
- public static final int ACC_ENUM = 0x4000; // class, inner, field
- public static final int ACC_MANDATED = 0x8000; // class, inner, field, method
-
- public static enum Kind { Class, InnerClass, Field, Method}
-
- AccessFlags(ClassReader cr) throws IOException {
- this(cr.readUnsignedShort());
- }
-
- public AccessFlags(int flags) {
- this.flags = flags;
- }
-
- public AccessFlags ignore(int mask) {
- return new AccessFlags(flags & ~mask);
- }
-
- public boolean is(int mask) {
- return (flags & mask) != 0;
- }
-
- public int byteLength() {
- return 2;
- }
-
- private static final int[] classModifiers = {
- ACC_PUBLIC, ACC_FINAL, ACC_ABSTRACT
- };
-
- private static final int[] classFlags = {
- ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_INTERFACE, ACC_ABSTRACT,
- ACC_SYNTHETIC, ACC_ANNOTATION, ACC_ENUM
- };
-
- public Set getClassModifiers() {
- int f = ((flags & ACC_INTERFACE) != 0 ? flags & ~ACC_ABSTRACT : flags);
- return getModifiers(f, classModifiers, Kind.Class);
- }
-
- public Set getClassFlags() {
- return getFlags(classFlags, Kind.Class);
- }
-
- private static final int[] innerClassModifiers = {
- ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
- ACC_ABSTRACT
- };
-
- private static final int[] innerClassFlags = {
- ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, ACC_SUPER,
- ACC_INTERFACE, ACC_ABSTRACT, ACC_SYNTHETIC, ACC_ANNOTATION, ACC_ENUM
- };
-
- public Set getInnerClassModifiers() {
- int f = ((flags & ACC_INTERFACE) != 0 ? flags & ~ACC_ABSTRACT : flags);
- return getModifiers(f, innerClassModifiers, Kind.InnerClass);
- }
-
- public Set getInnerClassFlags() {
- return getFlags(innerClassFlags, Kind.InnerClass);
- }
-
- private static final int[] fieldModifiers = {
- ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
- ACC_VOLATILE, ACC_TRANSIENT
- };
-
- private static final int[] fieldFlags = {
- ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
- ACC_VOLATILE, ACC_TRANSIENT, ACC_SYNTHETIC, ACC_ENUM
- };
-
- public Set getFieldModifiers() {
- return getModifiers(fieldModifiers, Kind.Field);
- }
-
- public Set getFieldFlags() {
- return getFlags(fieldFlags, Kind.Field);
- }
-
- private static final int[] methodModifiers = {
- ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
- ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT, ACC_STRICT
- };
-
- private static final int[] methodFlags = {
- ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
- ACC_SYNCHRONIZED, ACC_BRIDGE, ACC_VARARGS, ACC_NATIVE, ACC_ABSTRACT,
- ACC_STRICT, ACC_SYNTHETIC
- };
-
- public Set getMethodModifiers() {
- return getModifiers(methodModifiers, Kind.Method);
- }
-
- public Set getMethodFlags() {
- return getFlags(methodFlags, Kind.Method);
- }
-
- private Set getModifiers(int[] modifierFlags, Kind t) {
- return getModifiers(flags, modifierFlags, t);
- }
-
- private static Set getModifiers(int flags, int[] modifierFlags, Kind t) {
- Set s = new LinkedHashSet<>();
- for (int m: modifierFlags) {
- if ((flags & m) != 0)
- s.add(flagToModifier(m, t));
- }
- return s;
- }
-
- private Set getFlags(int[] expectedFlags, Kind t) {
- Set s = new LinkedHashSet<>();
- int f = flags;
- for (int e: expectedFlags) {
- if ((f & e) != 0) {
- s.add(flagToName(e, t));
- f = f & ~e;
- }
- }
- while (f != 0) {
- int bit = Integer.highestOneBit(f);
- s.add("0x" + Integer.toHexString(bit));
- f = f & ~bit;
- }
- return s;
- }
-
- private static String flagToModifier(int flag, Kind t) {
- switch (flag) {
- case ACC_PUBLIC:
- return "public";
- case ACC_PRIVATE:
- return "private";
- case ACC_PROTECTED:
- return "protected";
- case ACC_STATIC:
- return "static";
- case ACC_FINAL:
- return "final";
- case ACC_SYNCHRONIZED:
- return "synchronized";
- case 0x80:
- return (t == Kind.Field ? "transient" : null);
- case ACC_VOLATILE:
- return "volatile";
- case ACC_NATIVE:
- return "native";
- case ACC_ABSTRACT:
- return "abstract";
- case ACC_STRICT:
- return "strictfp";
- case ACC_MANDATED:
- return "mandated";
- default:
- return null;
- }
- }
-
- private static String flagToName(int flag, Kind t) {
- switch (flag) {
- case ACC_PUBLIC:
- return "ACC_PUBLIC";
- case ACC_PRIVATE:
- return "ACC_PRIVATE";
- case ACC_PROTECTED:
- return "ACC_PROTECTED";
- case ACC_STATIC:
- return "ACC_STATIC";
- case ACC_FINAL:
- return "ACC_FINAL";
- case 0x20:
- return (t == Kind.Class ? "ACC_SUPER" : "ACC_SYNCHRONIZED");
- case 0x40:
- return (t == Kind.Field ? "ACC_VOLATILE" : "ACC_BRIDGE");
- case 0x80:
- return (t == Kind.Field ? "ACC_TRANSIENT" : "ACC_VARARGS");
- case ACC_NATIVE:
- return "ACC_NATIVE";
- case ACC_INTERFACE:
- return "ACC_INTERFACE";
- case ACC_ABSTRACT:
- return "ACC_ABSTRACT";
- case ACC_STRICT:
- return "ACC_STRICT";
- case ACC_SYNTHETIC:
- return "ACC_SYNTHETIC";
- case ACC_ANNOTATION:
- return "ACC_ANNOTATION";
- case ACC_ENUM:
- return "ACC_ENUM";
- case ACC_MANDATED:
- return "ACC_MANDATED";
- default:
- return null;
- }
- }
-
- public final int flags;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Annotation.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Annotation.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.16.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Annotation {
- static class InvalidAnnotation extends AttributeException {
- private static final long serialVersionUID = -4620480740735772708L;
- InvalidAnnotation(String msg) {
- super(msg);
- }
- }
-
- Annotation(ClassReader cr) throws IOException, InvalidAnnotation {
- type_index = cr.readUnsignedShort();
- num_element_value_pairs = cr.readUnsignedShort();
- element_value_pairs = new element_value_pair[num_element_value_pairs];
- for (int i = 0; i < element_value_pairs.length; i++)
- element_value_pairs[i] = new element_value_pair(cr);
- }
-
- public Annotation(ConstantPool constant_pool,
- int type_index,
- element_value_pair[] element_value_pairs) {
- this.type_index = type_index;
- num_element_value_pairs = element_value_pairs.length;
- this.element_value_pairs = element_value_pairs;
- }
-
- public int length() {
- int n = 2 /*type_index*/ + 2 /*num_element_value_pairs*/;
- for (element_value_pair pair: element_value_pairs)
- n += pair.length();
- return n;
- }
-
- public final int type_index;
- public final int num_element_value_pairs;
- public final element_value_pair element_value_pairs[];
-
- /**
- * See JVMS, section 4.8.16.1.
- */
- public static abstract class element_value {
- public static element_value read(ClassReader cr)
- throws IOException, InvalidAnnotation {
- int tag = cr.readUnsignedByte();
- switch (tag) {
- case 'B':
- case 'C':
- case 'D':
- case 'F':
- case 'I':
- case 'J':
- case 'S':
- case 'Z':
- case 's':
- return new Primitive_element_value(cr, tag);
-
- case 'e':
- return new Enum_element_value(cr, tag);
-
- case 'c':
- return new Class_element_value(cr, tag);
-
- case '@':
- return new Annotation_element_value(cr, tag);
-
- case '[':
- return new Array_element_value(cr, tag);
-
- default:
- throw new InvalidAnnotation("unrecognized tag: " + tag);
- }
- }
-
- protected element_value(int tag) {
- this.tag = tag;
- }
-
- public abstract int length();
-
- public abstract R accept(Visitor visitor, P p);
-
- public interface Visitor {
- R visitPrimitive(Primitive_element_value ev, P p);
- R visitEnum(Enum_element_value ev, P p);
- R visitClass(Class_element_value ev, P p);
- R visitAnnotation(Annotation_element_value ev, P p);
- R visitArray(Array_element_value ev, P p);
- }
-
- public final int tag;
- }
-
- public static class Primitive_element_value extends element_value {
- Primitive_element_value(ClassReader cr, int tag) throws IOException {
- super(tag);
- const_value_index = cr.readUnsignedShort();
- }
-
- @Override
- public int length() {
- return 2;
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitPrimitive(this, p);
- }
-
- public final int const_value_index;
-
- }
-
- public static class Enum_element_value extends element_value {
- Enum_element_value(ClassReader cr, int tag) throws IOException {
- super(tag);
- type_name_index = cr.readUnsignedShort();
- const_name_index = cr.readUnsignedShort();
- }
-
- @Override
- public int length() {
- return 4;
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitEnum(this, p);
- }
-
- public final int type_name_index;
- public final int const_name_index;
- }
-
- public static class Class_element_value extends element_value {
- Class_element_value(ClassReader cr, int tag) throws IOException {
- super(tag);
- class_info_index = cr.readUnsignedShort();
- }
-
- @Override
- public int length() {
- return 2;
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitClass(this, p);
- }
-
- public final int class_info_index;
- }
-
- public static class Annotation_element_value extends element_value {
- Annotation_element_value(ClassReader cr, int tag)
- throws IOException, InvalidAnnotation {
- super(tag);
- annotation_value = new Annotation(cr);
- }
-
- @Override
- public int length() {
- return annotation_value.length();
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitAnnotation(this, p);
- }
-
- public final Annotation annotation_value;
- }
-
- public static class Array_element_value extends element_value {
- Array_element_value(ClassReader cr, int tag)
- throws IOException, InvalidAnnotation {
- super(tag);
- num_values = cr.readUnsignedShort();
- values = new element_value[num_values];
- for (int i = 0; i < values.length; i++)
- values[i] = element_value.read(cr);
- }
-
- @Override
- public int length() {
- int n = 2;
- for (int i = 0; i < values.length; i++)
- n += values[i].length();
- return n;
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitArray(this, p);
- }
-
- public final int num_values;
- public final element_value[] values;
- }
-
- public static class element_value_pair {
- element_value_pair(ClassReader cr)
- throws IOException, InvalidAnnotation {
- element_name_index = cr.readUnsignedShort();
- value = element_value.read(cr);
- }
-
- public int length() {
- return 2 + value.length();
- }
-
- public final int element_name_index;
- public final element_value value;
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/AnnotationDefault_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/AnnotationDefault_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.15.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class AnnotationDefault_attribute extends Attribute {
- AnnotationDefault_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(name_index, length);
- default_value = Annotation.element_value.read(cr);
- }
-
- public AnnotationDefault_attribute(ConstantPool constant_pool, Annotation.element_value default_value)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.AnnotationDefault), default_value);
- }
-
- public AnnotationDefault_attribute(int name_index, Annotation.element_value default_value) {
- super(name_index, default_value.length());
- this.default_value = default_value;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitAnnotationDefault(this, data);
- }
-
- public final Annotation.element_value default_value;
-}
-
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-
-public abstract class Attribute {
- public static final String AnnotationDefault = "AnnotationDefault";
- public static final String BootstrapMethods = "BootstrapMethods";
- public static final String CharacterRangeTable = "CharacterRangeTable";
- public static final String Code = "Code";
- public static final String ConstantValue = "ConstantValue";
- public static final String CompilationID = "CompilationID";
- public static final String Deprecated = "Deprecated";
- public static final String EnclosingMethod = "EnclosingMethod";
- public static final String Exceptions = "Exceptions";
- public static final String InnerClasses = "InnerClasses";
- public static final String LineNumberTable = "LineNumberTable";
- public static final String LocalVariableTable = "LocalVariableTable";
- public static final String LocalVariableTypeTable = "LocalVariableTypeTable";
- public static final String MethodParameters = "MethodParameters";
- public static final String RuntimeVisibleAnnotations = "RuntimeVisibleAnnotations";
- public static final String RuntimeInvisibleAnnotations = "RuntimeInvisibleAnnotations";
- public static final String RuntimeVisibleParameterAnnotations = "RuntimeVisibleParameterAnnotations";
- public static final String RuntimeInvisibleParameterAnnotations = "RuntimeInvisibleParameterAnnotations";
- public static final String RuntimeVisibleTypeAnnotations = "RuntimeVisibleTypeAnnotations";
- public static final String RuntimeInvisibleTypeAnnotations = "RuntimeInvisibleTypeAnnotations";
- public static final String Signature = "Signature";
- public static final String SourceDebugExtension = "SourceDebugExtension";
- public static final String SourceFile = "SourceFile";
- public static final String SourceID = "SourceID";
- public static final String StackMap = "StackMap";
- public static final String StackMapTable = "StackMapTable";
- public static final String Synthetic = "Synthetic";
-
- public static class Factory {
- public Factory() {
- // defer init of standardAttributeClasses until after options set up
- }
-
- public Attribute createAttribute(ClassReader cr, int name_index, byte[] data)
- throws IOException {
- if (standardAttributes == null) {
- init();
- }
-
- ConstantPool cp = cr.getConstantPool();
- String reasonForDefaultAttr;
- try {
- String name = cp.getUTF8Value(name_index);
- Class extends Attribute> attrClass = standardAttributes.get(name);
- if (attrClass != null) {
- try {
- Class>[] constrArgTypes = {ClassReader.class, int.class, int.class};
- Constructor extends Attribute> constr = attrClass.getDeclaredConstructor(constrArgTypes);
- return constr.newInstance(cr, name_index, data.length);
- } catch (Throwable t) {
- reasonForDefaultAttr = t.toString();
- // fall through and use DefaultAttribute
- // t.printStackTrace();
- }
- } else {
- reasonForDefaultAttr = "unknown attribute";
- }
- } catch (ConstantPoolException e) {
- reasonForDefaultAttr = e.toString();
- // fall through and use DefaultAttribute
- }
- return new DefaultAttribute(cr, name_index, data, reasonForDefaultAttr);
- }
-
- protected void init() {
- standardAttributes = new HashMap<>();
- standardAttributes.put(AnnotationDefault, AnnotationDefault_attribute.class);
- standardAttributes.put(BootstrapMethods, BootstrapMethods_attribute.class);
- standardAttributes.put(CharacterRangeTable, CharacterRangeTable_attribute.class);
- standardAttributes.put(Code, Code_attribute.class);
- standardAttributes.put(CompilationID, CompilationID_attribute.class);
- standardAttributes.put(ConstantValue, ConstantValue_attribute.class);
- standardAttributes.put(Deprecated, Deprecated_attribute.class);
- standardAttributes.put(EnclosingMethod, EnclosingMethod_attribute.class);
- standardAttributes.put(Exceptions, Exceptions_attribute.class);
- standardAttributes.put(InnerClasses, InnerClasses_attribute.class);
- standardAttributes.put(LineNumberTable, LineNumberTable_attribute.class);
- standardAttributes.put(LocalVariableTable, LocalVariableTable_attribute.class);
- standardAttributes.put(LocalVariableTypeTable, LocalVariableTypeTable_attribute.class);
- standardAttributes.put(MethodParameters, MethodParameters_attribute.class);
- standardAttributes.put(RuntimeInvisibleAnnotations, RuntimeInvisibleAnnotations_attribute.class);
- standardAttributes.put(RuntimeInvisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations_attribute.class);
- standardAttributes.put(RuntimeVisibleAnnotations, RuntimeVisibleAnnotations_attribute.class);
- standardAttributes.put(RuntimeVisibleParameterAnnotations, RuntimeVisibleParameterAnnotations_attribute.class);
- standardAttributes.put(RuntimeVisibleTypeAnnotations, RuntimeVisibleTypeAnnotations_attribute.class);
- standardAttributes.put(RuntimeInvisibleTypeAnnotations, RuntimeInvisibleTypeAnnotations_attribute.class);
- standardAttributes.put(Signature, Signature_attribute.class);
- standardAttributes.put(SourceDebugExtension, SourceDebugExtension_attribute.class);
- standardAttributes.put(SourceFile, SourceFile_attribute.class);
- standardAttributes.put(SourceID, SourceID_attribute.class);
- standardAttributes.put(StackMap, StackMap_attribute.class);
- standardAttributes.put(StackMapTable, StackMapTable_attribute.class);
- standardAttributes.put(Synthetic, Synthetic_attribute.class);
- }
-
- private Map> standardAttributes;
- }
-
- public static Attribute read(ClassReader cr) throws IOException {
- return cr.readAttribute();
- }
-
- protected Attribute(int name_index, int length) {
- attribute_name_index = name_index;
- attribute_length = length;
- }
-
- public String getName(ConstantPool constant_pool) throws ConstantPoolException {
- return constant_pool.getUTF8Value(attribute_name_index);
- }
-
- public abstract R accept(Attribute.Visitor visitor, D data);
-
- public int byteLength() {
- return 6 + attribute_length;
- }
-
- public final int attribute_name_index;
- public final int attribute_length;
-
-
- public interface Visitor {
- R visitBootstrapMethods(BootstrapMethods_attribute attr, P p);
- R visitDefault(DefaultAttribute attr, P p);
- R visitAnnotationDefault(AnnotationDefault_attribute attr, P p);
- R visitCharacterRangeTable(CharacterRangeTable_attribute attr, P p);
- R visitCode(Code_attribute attr, P p);
- R visitCompilationID(CompilationID_attribute attr, P p);
- R visitConstantValue(ConstantValue_attribute attr, P p);
- R visitDeprecated(Deprecated_attribute attr, P p);
- R visitEnclosingMethod(EnclosingMethod_attribute attr, P p);
- R visitExceptions(Exceptions_attribute attr, P p);
- R visitInnerClasses(InnerClasses_attribute attr, P p);
- R visitLineNumberTable(LineNumberTable_attribute attr, P p);
- R visitLocalVariableTable(LocalVariableTable_attribute attr, P p);
- R visitLocalVariableTypeTable(LocalVariableTypeTable_attribute attr, P p);
- R visitMethodParameters(MethodParameters_attribute attr, P p);
- R visitRuntimeVisibleAnnotations(RuntimeVisibleAnnotations_attribute attr, P p);
- R visitRuntimeInvisibleAnnotations(RuntimeInvisibleAnnotations_attribute attr, P p);
- R visitRuntimeVisibleParameterAnnotations(RuntimeVisibleParameterAnnotations_attribute attr, P p);
- R visitRuntimeInvisibleParameterAnnotations(RuntimeInvisibleParameterAnnotations_attribute attr, P p);
- R visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute attr, P p);
- R visitRuntimeInvisibleTypeAnnotations(RuntimeInvisibleTypeAnnotations_attribute attr, P p);
- R visitSignature(Signature_attribute attr, P p);
- R visitSourceDebugExtension(SourceDebugExtension_attribute attr, P p);
- R visitSourceFile(SourceFile_attribute attr, P p);
- R visitSourceID(SourceID_attribute attr, P p);
- R visitStackMap(StackMap_attribute attr, P p);
- R visitStackMapTable(StackMapTable_attribute attr, P p);
- R visitSynthetic(Synthetic_attribute attr, P p);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/AttributeException.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/AttributeException.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-/*
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class AttributeException extends Exception {
- private static final long serialVersionUID = -4231486387714867770L;
- AttributeException() { }
-
- AttributeException(String msg) {
- super(msg);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Attributes.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Attributes.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/*
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Attributes implements Iterable {
-
- public final Attribute[] attrs;
- public final Map map;
-
- Attributes(ClassReader cr) throws IOException {
- map = new HashMap<>();
- int attrs_count = cr.readUnsignedShort();
- attrs = new Attribute[attrs_count];
- for (int i = 0; i < attrs_count; i++) {
- Attribute attr = Attribute.read(cr);
- attrs[i] = attr;
- try {
- map.put(attr.getName(cr.getConstantPool()), attr);
- } catch (ConstantPoolException e) {
- // don't enter invalid names in map
- }
- }
- }
-
- public Attributes(ConstantPool constant_pool, Attribute[] attrs) {
- this.attrs = attrs;
- map = new HashMap<>();
- for (Attribute attr : attrs) {
- try {
- map.put(attr.getName(constant_pool), attr);
- } catch (ConstantPoolException e) {
- // don't enter invalid names in map
- }
- }
- }
-
- public Iterator iterator() {
- return Arrays.asList(attrs).iterator();
- }
-
- public Attribute get(int index) {
- return attrs[index];
- }
-
- public Attribute get(String name) {
- return map.get(name);
- }
-
- public int getIndex(ConstantPool constant_pool, String name) {
- for (int i = 0; i < attrs.length; i++) {
- Attribute attr = attrs[i];
- try {
- if (attr != null && attr.getName(constant_pool).equals(name))
- return i;
- } catch (ConstantPoolException e) {
- // ignore invalid entries
- }
- }
- return -1;
- }
-
- public int size() {
- return attrs.length;
- }
-
- public int byteLength() {
- int length = 2;
- for (Attribute a: attrs)
- length += a.byteLength();
- return length;
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/BootstrapMethods_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/BootstrapMethods_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS 4.7.21
- * http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.21
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class BootstrapMethods_attribute extends Attribute {
- public final BootstrapMethodSpecifier[] bootstrap_method_specifiers;
-
- BootstrapMethods_attribute(ClassReader cr, int name_index, int length)
- throws IOException, AttributeException {
- super(name_index, length);
- int bootstrap_method_count = cr.readUnsignedShort();
- bootstrap_method_specifiers = new BootstrapMethodSpecifier[bootstrap_method_count];
- for (int i = 0; i < bootstrap_method_specifiers.length; i++)
- bootstrap_method_specifiers[i] = new BootstrapMethodSpecifier(cr);
- }
-
- public BootstrapMethods_attribute(int name_index, BootstrapMethodSpecifier[] bootstrap_method_specifiers) {
- super(name_index, length(bootstrap_method_specifiers));
- this.bootstrap_method_specifiers = bootstrap_method_specifiers;
- }
-
- public static int length(BootstrapMethodSpecifier[] bootstrap_method_specifiers) {
- int n = 2;
- for (BootstrapMethodSpecifier b : bootstrap_method_specifiers)
- n += b.length();
- return n;
- }
-
- @Override
- public R accept(Visitor visitor, P p) {
- return visitor.visitBootstrapMethods(this, p);
- }
-
- public static class BootstrapMethodSpecifier {
- public int bootstrap_method_ref;
- public int[] bootstrap_arguments;
-
- public BootstrapMethodSpecifier(int bootstrap_method_ref, int[] bootstrap_arguments) {
- this.bootstrap_method_ref = bootstrap_method_ref;
- this.bootstrap_arguments = bootstrap_arguments;
- }
- BootstrapMethodSpecifier(ClassReader cr) throws IOException {
- bootstrap_method_ref = cr.readUnsignedShort();
- int method_count = cr.readUnsignedShort();
- bootstrap_arguments = new int[method_count];
- for (int i = 0; i < bootstrap_arguments.length; i++) {
- bootstrap_arguments[i] = cr.readUnsignedShort();
- }
- }
-
- int length() {
- // u2 (method_ref) + u2 (argc) + u2 * argc
- return 2 + 2 + (bootstrap_arguments.length * 2);
- }
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/CharacterRangeTable_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/CharacterRangeTable_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class CharacterRangeTable_attribute extends Attribute {
- public static final int CRT_STATEMENT = 0x0001;
- public static final int CRT_BLOCK = 0x0002;
- public static final int CRT_ASSIGNMENT = 0x0004;
- public static final int CRT_FLOW_CONTROLLER = 0x0008;
- public static final int CRT_FLOW_TARGET = 0x0010;
- public static final int CRT_INVOKE = 0x0020;
- public static final int CRT_CREATE = 0x0040;
- public static final int CRT_BRANCH_TRUE = 0x0080;
- public static final int CRT_BRANCH_FALSE = 0x0100;
-
- CharacterRangeTable_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- int character_range_table_length = cr.readUnsignedShort();
- character_range_table = new Entry[character_range_table_length];
- for (int i = 0; i < character_range_table_length; i++)
- character_range_table[i] = new Entry(cr);
- }
-
- public CharacterRangeTable_attribute(ConstantPool constant_pool, Entry[] character_range_table)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.CharacterRangeTable), character_range_table);
- }
-
- public CharacterRangeTable_attribute(int name_index, Entry[] character_range_table) {
- super(name_index, 2 + character_range_table.length * Entry.length());
- this.character_range_table = character_range_table;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitCharacterRangeTable(this, data);
- }
-
- public final Entry[] character_range_table;
-
- public static class Entry {
- Entry(ClassReader cr) throws IOException {
- start_pc = cr.readUnsignedShort();
- end_pc = cr.readUnsignedShort();
- character_range_start = cr.readInt();
- character_range_end = cr.readInt();
- flags = cr.readUnsignedShort();
- }
-
- public static int length() {
- return 14;
- }
-
- public final int start_pc;
- public final int end_pc;
- public final int character_range_start;
- public final int character_range_end;
- public final int flags;
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ClassFile.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ClassFile.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,189 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-import static com.sun.tools.classfile.AccessFlags.*;
-
-/**
- * See JVMS, section 4.2.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class ClassFile {
- public static ClassFile read(File file)
- throws IOException, ConstantPoolException {
- return read(file.toPath(), new Attribute.Factory());
- }
-
- public static ClassFile read(Path input)
- throws IOException, ConstantPoolException {
- return read(input, new Attribute.Factory());
- }
-
- public static ClassFile read(Path input, Attribute.Factory attributeFactory)
- throws IOException, ConstantPoolException {
- try (InputStream in = Files.newInputStream(input)) {
- return new ClassFile(in, attributeFactory);
- }
- }
-
- public static ClassFile read(File file, Attribute.Factory attributeFactory)
- throws IOException, ConstantPoolException {
- return read(file.toPath(), attributeFactory);
- }
-
- public static ClassFile read(InputStream in)
- throws IOException, ConstantPoolException {
- return new ClassFile(in, new Attribute.Factory());
- }
-
- public static ClassFile read(InputStream in, Attribute.Factory attributeFactory)
- throws IOException, ConstantPoolException {
- return new ClassFile(in, attributeFactory);
- }
-
- ClassFile(InputStream in, Attribute.Factory attributeFactory) throws IOException, ConstantPoolException {
- ClassReader cr = new ClassReader(this, in, attributeFactory);
- magic = cr.readInt();
- minor_version = cr.readUnsignedShort();
- major_version = cr.readUnsignedShort();
- constant_pool = new ConstantPool(cr);
- access_flags = new AccessFlags(cr);
- this_class = cr.readUnsignedShort();
- super_class = cr.readUnsignedShort();
-
- int interfaces_count = cr.readUnsignedShort();
- interfaces = new int[interfaces_count];
- for (int i = 0; i < interfaces_count; i++)
- interfaces[i] = cr.readUnsignedShort();
-
- int fields_count = cr.readUnsignedShort();
- fields = new Field[fields_count];
- for (int i = 0; i < fields_count; i++)
- fields[i] = new Field(cr);
-
- int methods_count = cr.readUnsignedShort();
- methods = new Method[methods_count];
- for (int i = 0; i < methods_count; i++)
- methods[i] = new Method(cr);
-
- attributes = new Attributes(cr);
- }
-
- public ClassFile(int magic, int minor_version, int major_version,
- ConstantPool constant_pool, AccessFlags access_flags,
- int this_class, int super_class, int[] interfaces,
- Field[] fields, Method[] methods, Attributes attributes) {
- this.magic = magic;
- this.minor_version = minor_version;
- this.major_version = major_version;
- this.constant_pool = constant_pool;
- this.access_flags = access_flags;
- this.this_class = this_class;
- this.super_class = super_class;
- this.interfaces = interfaces;
- this.fields = fields;
- this.methods = methods;
- this.attributes = attributes;
- }
-
- public String getName() throws ConstantPoolException {
- return constant_pool.getClassInfo(this_class).getName();
- }
-
- public String getSuperclassName() throws ConstantPoolException {
- return constant_pool.getClassInfo(super_class).getName();
- }
-
- public String getInterfaceName(int i) throws ConstantPoolException {
- return constant_pool.getClassInfo(interfaces[i]).getName();
- }
-
- public Attribute getAttribute(String name) {
- return attributes.get(name);
- }
-
- public boolean isClass() {
- return !isInterface();
- }
-
- public boolean isInterface() {
- return access_flags.is(ACC_INTERFACE);
- }
-
- public int byteLength() {
- return 4 + // magic
- 2 + // minor
- 2 + // major
- constant_pool.byteLength() +
- 2 + // access flags
- 2 + // this_class
- 2 + // super_class
- byteLength(interfaces) +
- byteLength(fields) +
- byteLength(methods) +
- attributes.byteLength();
- }
-
- private int byteLength(int[] indices) {
- return 2 + 2 * indices.length;
- }
-
- private int byteLength(Field[] fields) {
- int length = 2;
- for (Field f: fields)
- length += f.byteLength();
- return length;
- }
-
- private int byteLength(Method[] methods) {
- int length = 2;
- for (Method m: methods)
- length += m.byteLength();
- return length;
- }
-
- public final int magic;
- public final int minor_version;
- public final int major_version;
- public final ConstantPool constant_pool;
- public final AccessFlags access_flags;
- public final int this_class;
- public final int super_class;
- public final int[] interfaces;
- public final Field[] fields;
- public final Method[] methods;
- public final Attributes attributes;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ClassReader.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ClassReader.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Objects;
-
-/**
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class ClassReader {
- ClassReader(ClassFile classFile, InputStream in, Attribute.Factory attributeFactory) throws IOException {
- this.classFile = Objects.requireNonNull(classFile);
- this.attributeFactory = Objects.requireNonNull(attributeFactory);
- this.in = new DataInputStream(new BufferedInputStream(in));
- }
-
- ClassFile getClassFile() {
- return classFile;
- }
-
- ConstantPool getConstantPool() {
- return classFile.constant_pool;
- }
-
- public Attribute readAttribute() throws IOException {
- int name_index = readUnsignedShort();
- int length = readInt();
- byte[] data = new byte[length];
- readFully(data);
-
- DataInputStream prev = in;
- in = new DataInputStream(new ByteArrayInputStream(data));
- try {
- return attributeFactory.createAttribute(this, name_index, data);
- } finally {
- in = prev;
- }
- }
-
- public void readFully(byte[] b) throws IOException {
- in.readFully(b);
- }
-
- public int readUnsignedByte() throws IOException {
- return in.readUnsignedByte();
- }
-
- public int readUnsignedShort() throws IOException {
- return in.readUnsignedShort();
- }
-
- public int readInt() throws IOException {
- return in.readInt();
- }
-
- public long readLong() throws IOException {
- return in.readLong();
- }
-
- public float readFloat() throws IOException {
- return in.readFloat();
- }
-
- public double readDouble() throws IOException {
- return in.readDouble();
- }
-
- public String readUTF() throws IOException {
- return in.readUTF();
- }
-
- private DataInputStream in;
- private ClassFile classFile;
- private Attribute.Factory attributeFactory;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ClassTranslator.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ClassTranslator.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,410 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.util.Map;
-
-import com.sun.tools.classfile.ConstantPool.CONSTANT_Class_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_Double_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_Fieldref_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_Float_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_Integer_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_InterfaceMethodref_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_InvokeDynamic_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_Long_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodHandle_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodType_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_Methodref_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_NameAndType_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_String_info;
-import com.sun.tools.classfile.ConstantPool.CONSTANT_Utf8_info;
-import com.sun.tools.classfile.ConstantPool.CPInfo;
-
-/**
- * Rewrites a class file using a map of translations.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class ClassTranslator
- implements ConstantPool.Visitor> {
- /**
- * Create a new ClassFile from {@code cf}, such that for all entries
- * {@code k -\> v} in {@code translations},
- * each occurrence of {@code k} in {@code cf} will be replaced by {@code v}.
- * in
- * @param cf the class file to be processed
- * @param translations the set of translations to be applied
- * @return a copy of {@code} with the values in {@code translations} substituted
- */
- public ClassFile translate(ClassFile cf, Map translations) {
- ClassFile cf2 = (ClassFile) translations.get(cf);
- if (cf2 == null) {
- ConstantPool constant_pool2 = translate(cf.constant_pool, translations);
- Field[] fields2 = translate(cf.fields, cf.constant_pool, translations);
- Method[] methods2 = translateMethods(cf.methods, cf.constant_pool, translations);
- Attributes attributes2 = translateAttributes(cf.attributes, cf.constant_pool,
- translations);
-
- if (constant_pool2 == cf.constant_pool &&
- fields2 == cf.fields &&
- methods2 == cf.methods &&
- attributes2 == cf.attributes)
- cf2 = cf;
- else
- cf2 = new ClassFile(
- cf.magic,
- cf.minor_version,
- cf.major_version,
- constant_pool2,
- cf.access_flags,
- cf.this_class,
- cf.super_class,
- cf.interfaces,
- fields2,
- methods2,
- attributes2);
- translations.put(cf, cf2);
- }
- return cf2;
- }
-
- ConstantPool translate(ConstantPool cp, Map translations) {
- ConstantPool cp2 = (ConstantPool) translations.get(cp);
- if (cp2 == null) {
- ConstantPool.CPInfo[] pool2 = new ConstantPool.CPInfo[cp.size()];
- boolean eq = true;
- for (int i = 0; i < cp.size(); ) {
- ConstantPool.CPInfo cpInfo;
- try {
- cpInfo = cp.get(i);
- } catch (ConstantPool.InvalidIndex e) {
- throw new IllegalStateException(e);
- }
- ConstantPool.CPInfo cpInfo2 = translate(cpInfo, translations);
- eq &= (cpInfo == cpInfo2);
- pool2[i] = cpInfo2;
- if (cpInfo.getTag() != cpInfo2.getTag())
- throw new IllegalStateException();
- i += cpInfo.size();
- }
-
- if (eq)
- cp2 = cp;
- else
- cp2 = new ConstantPool(pool2);
-
- translations.put(cp, cp2);
- }
- return cp2;
- }
-
- ConstantPool.CPInfo translate(ConstantPool.CPInfo cpInfo, Map translations) {
- ConstantPool.CPInfo cpInfo2 = (ConstantPool.CPInfo) translations.get(cpInfo);
- if (cpInfo2 == null) {
- cpInfo2 = cpInfo.accept(this, translations);
- translations.put(cpInfo, cpInfo2);
- }
- return cpInfo2;
- }
-
- Field[] translate(Field[] fields, ConstantPool constant_pool, Map translations) {
- Field[] fields2 = (Field[]) translations.get(fields);
- if (fields2 == null) {
- fields2 = new Field[fields.length];
- for (int i = 0; i < fields.length; i++)
- fields2[i] = translate(fields[i], constant_pool, translations);
- if (equal(fields, fields2))
- fields2 = fields;
- translations.put(fields, fields2);
- }
- return fields2;
- }
-
- Field translate(Field field, ConstantPool constant_pool, Map translations) {
- Field field2 = (Field) translations.get(field);
- if (field2 == null) {
- Attributes attributes2 = translateAttributes(field.attributes, constant_pool,
- translations);
-
- if (attributes2 == field.attributes)
- field2 = field;
- else
- field2 = new Field(
- field.access_flags,
- field.name_index,
- field.descriptor,
- attributes2);
- translations.put(field, field2);
- }
- return field2;
- }
-
- Method[] translateMethods(Method[] methods, ConstantPool constant_pool, Map translations) {
- Method[] methods2 = (Method[]) translations.get(methods);
- if (methods2 == null) {
- methods2 = new Method[methods.length];
- for (int i = 0; i < methods.length; i++)
- methods2[i] = translate(methods[i], constant_pool, translations);
- if (equal(methods, methods2))
- methods2 = methods;
- translations.put(methods, methods2);
- }
- return methods2;
- }
-
- Method translate(Method method, ConstantPool constant_pool, Map translations) {
- Method method2 = (Method) translations.get(method);
- if (method2 == null) {
- Attributes attributes2 = translateAttributes(method.attributes, constant_pool,
- translations);
-
- if (attributes2 == method.attributes)
- method2 = method;
- else
- method2 = new Method(
- method.access_flags,
- method.name_index,
- method.descriptor,
- attributes2);
- translations.put(method, method2);
- }
- return method2;
- }
-
- Attributes translateAttributes(Attributes attributes,
- ConstantPool constant_pool, Map translations) {
- Attributes attributes2 = (Attributes) translations.get(attributes);
- if (attributes2 == null) {
- Attribute[] attrArray2 = new Attribute[attributes.size()];
- ConstantPool constant_pool2 = translate(constant_pool, translations);
- boolean attrsEqual = true;
- for (int i = 0; i < attributes.size(); i++) {
- Attribute attr = attributes.get(i);
- Attribute attr2 = translate(attr, translations);
- if (attr2 != attr)
- attrsEqual = false;
- attrArray2[i] = attr2;
- }
- if ((constant_pool2 == constant_pool) && attrsEqual)
- attributes2 = attributes;
- else
- attributes2 = new Attributes(constant_pool2, attrArray2);
- translations.put(attributes, attributes2);
- }
- return attributes2;
- }
-
- Attribute translate(Attribute attribute, Map translations) {
- Attribute attribute2 = (Attribute) translations.get(attribute);
- if (attribute2 == null) {
- attribute2 = attribute; // don't support translation within attributes yet
- // (what about Code attribute)
- translations.put(attribute, attribute2);
- }
- return attribute2;
- }
-
- private static boolean equal(T[] a1, T[] a2) {
- if (a1 == null || a2 == null)
- return (a1 == a2);
- if (a1.length != a2.length)
- return false;
- for (int i = 0; i < a1.length; i++) {
- if (a1[i] != a2[i])
- return false;
- }
- return true;
- }
-
- public CPInfo visitClass(CONSTANT_Class_info info, Map translations) {
- CONSTANT_Class_info info2 = (CONSTANT_Class_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp)
- info2 = info;
- else
- info2 = new CONSTANT_Class_info(cp2, info.name_index);
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitDouble(CONSTANT_Double_info info, Map translations) {
- CONSTANT_Double_info info2 = (CONSTANT_Double_info) translations.get(info);
- if (info2 == null) {
- info2 = info;
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitFieldref(CONSTANT_Fieldref_info info, Map translations) {
- CONSTANT_Fieldref_info info2 = (CONSTANT_Fieldref_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp)
- info2 = info;
- else
- info2 = new CONSTANT_Fieldref_info(cp2, info.class_index, info.name_and_type_index);
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitFloat(CONSTANT_Float_info info, Map translations) {
- CONSTANT_Float_info info2 = (CONSTANT_Float_info) translations.get(info);
- if (info2 == null) {
- info2 = info;
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitInteger(CONSTANT_Integer_info info, Map translations) {
- CONSTANT_Integer_info info2 = (CONSTANT_Integer_info) translations.get(info);
- if (info2 == null) {
- info2 = info;
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Map translations) {
- CONSTANT_InterfaceMethodref_info info2 = (CONSTANT_InterfaceMethodref_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp)
- info2 = info;
- else
- info2 = new CONSTANT_InterfaceMethodref_info(cp2, info.class_index, info.name_and_type_index);
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, Map translations) {
- CONSTANT_InvokeDynamic_info info2 = (CONSTANT_InvokeDynamic_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp) {
- info2 = info;
- } else {
- info2 = new CONSTANT_InvokeDynamic_info(cp2, info.bootstrap_method_attr_index, info.name_and_type_index);
- }
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitLong(CONSTANT_Long_info info, Map translations) {
- CONSTANT_Long_info info2 = (CONSTANT_Long_info) translations.get(info);
- if (info2 == null) {
- info2 = info;
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitNameAndType(CONSTANT_NameAndType_info info, Map translations) {
- CONSTANT_NameAndType_info info2 = (CONSTANT_NameAndType_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp)
- info2 = info;
- else
- info2 = new CONSTANT_NameAndType_info(cp2, info.name_index, info.type_index);
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitMethodref(CONSTANT_Methodref_info info, Map translations) {
- CONSTANT_Methodref_info info2 = (CONSTANT_Methodref_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp)
- info2 = info;
- else
- info2 = new CONSTANT_Methodref_info(cp2, info.class_index, info.name_and_type_index);
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitMethodHandle(CONSTANT_MethodHandle_info info, Map translations) {
- CONSTANT_MethodHandle_info info2 = (CONSTANT_MethodHandle_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp) {
- info2 = info;
- } else {
- info2 = new CONSTANT_MethodHandle_info(cp2, info.reference_kind, info.reference_index);
- }
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitMethodType(CONSTANT_MethodType_info info, Map translations) {
- CONSTANT_MethodType_info info2 = (CONSTANT_MethodType_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp) {
- info2 = info;
- } else {
- info2 = new CONSTANT_MethodType_info(cp2, info.descriptor_index);
- }
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitString(CONSTANT_String_info info, Map translations) {
- CONSTANT_String_info info2 = (CONSTANT_String_info) translations.get(info);
- if (info2 == null) {
- ConstantPool cp2 = translate(info.cp, translations);
- if (cp2 == info.cp)
- info2 = info;
- else
- info2 = new CONSTANT_String_info(cp2, info.string_index);
- translations.put(info, info2);
- }
- return info;
- }
-
- public CPInfo visitUtf8(CONSTANT_Utf8_info info, Map translations) {
- CONSTANT_Utf8_info info2 = (CONSTANT_Utf8_info) translations.get(info);
- if (info2 == null) {
- info2 = info;
- translations.put(info, info2);
- }
- return info;
- }
-
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ClassWriter.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ClassWriter.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,808 +0,0 @@
-
-/*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import static com.sun.tools.classfile.Annotation.*;
-import static com.sun.tools.classfile.ConstantPool.*;
-import static com.sun.tools.classfile.StackMapTable_attribute.*;
-import static com.sun.tools.classfile.StackMapTable_attribute.verification_type_info.*;
-
-/**
- * Write a ClassFile data structure to a file or stream.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class ClassWriter {
- public ClassWriter() {
- attributeWriter = new AttributeWriter();
- constantPoolWriter = new ConstantPoolWriter();
- out = new ClassOutputStream();
- }
-
- /**
- * Write a ClassFile data structure to a file.
- */
- public void write(ClassFile classFile, File f) throws IOException {
- try (FileOutputStream f_out = new FileOutputStream(f)) {
- write(classFile, f_out);
- }
- }
-
- /**
- * Write a ClassFile data structure to a stream.
- */
- public void write(ClassFile classFile, OutputStream s) throws IOException {
- this.classFile = classFile;
- out.reset();
- write();
- out.writeTo(s);
- }
-
- protected void write() throws IOException {
- writeHeader();
- writeConstantPool();
- writeAccessFlags(classFile.access_flags);
- writeClassInfo();
- writeFields();
- writeMethods();
- writeAttributes(classFile.attributes);
- }
-
- protected void writeHeader() {
- out.writeInt(classFile.magic);
- out.writeShort(classFile.minor_version);
- out.writeShort(classFile.major_version);
- }
-
- protected void writeAccessFlags(AccessFlags flags) {
- out.writeShort(flags.flags);
- }
-
- protected void writeAttributes(Attributes attributes) {
- int size = attributes.size();
- out.writeShort(size);
- for (Attribute attr: attributes)
- attributeWriter.write(attr, out);
- }
-
- protected void writeClassInfo() {
- out.writeShort(classFile.this_class);
- out.writeShort(classFile.super_class);
- int[] interfaces = classFile.interfaces;
- out.writeShort(interfaces.length);
- for (int i: interfaces)
- out.writeShort(i);
- }
-
- protected void writeDescriptor(Descriptor d) {
- out.writeShort(d.index);
- }
-
- protected void writeConstantPool() {
- ConstantPool pool = classFile.constant_pool;
- int size = pool.size();
- out.writeShort(size);
- for (CPInfo cpInfo: pool.entries())
- constantPoolWriter.write(cpInfo, out);
- }
-
- protected void writeFields() throws IOException {
- Field[] fields = classFile.fields;
- out.writeShort(fields.length);
- for (Field f: fields)
- writeField(f);
- }
-
- protected void writeField(Field f) throws IOException {
- writeAccessFlags(f.access_flags);
- out.writeShort(f.name_index);
- writeDescriptor(f.descriptor);
- writeAttributes(f.attributes);
- }
-
- protected void writeMethods() throws IOException {
- Method[] methods = classFile.methods;
- out.writeShort(methods.length);
- for (Method m: methods) {
- writeMethod(m);
- }
- }
-
- protected void writeMethod(Method m) throws IOException {
- writeAccessFlags(m.access_flags);
- out.writeShort(m.name_index);
- writeDescriptor(m.descriptor);
- writeAttributes(m.attributes);
- }
-
- protected ClassFile classFile;
- protected ClassOutputStream out;
- protected AttributeWriter attributeWriter;
- protected ConstantPoolWriter constantPoolWriter;
-
- /**
- * Subtype of ByteArrayOutputStream with the convenience methods of
- * a DataOutputStream. Since ByteArrayOutputStream does not throw
- * IOException, there are no exceptions from the additional
- * convenience methods either,
- */
- protected static class ClassOutputStream extends ByteArrayOutputStream {
- public ClassOutputStream() {
- d = new DataOutputStream(this);
- }
-
- public void writeByte(int value) {
- try {
- d.writeByte(value);
- } catch (IOException ignore) {
- }
- }
-
- public void writeShort(int value) {
- try {
- d.writeShort(value);
- } catch (IOException ignore) {
- }
- }
-
- public void writeInt(int value) {
- try {
- d.writeInt(value);
- } catch (IOException ignore) {
- }
- }
-
- public void writeLong(long value) {
- try {
- d.writeLong(value);
- } catch (IOException ignore) {
- }
- }
-
- public void writeFloat(float value) {
- try {
- d.writeFloat(value);
- } catch (IOException ignore) {
- }
- }
-
- public void writeDouble(double value) {
- try {
- d.writeDouble(value);
- } catch (IOException ignore) {
- }
- }
-
- public void writeUTF(String value) {
- try {
- d.writeUTF(value);
- } catch (IOException ignore) {
- }
- }
-
- public void writeTo(ClassOutputStream s) {
- try {
- super.writeTo(s);
- } catch (IOException ignore) {
- }
- }
-
- private DataOutputStream d;
- }
-
- /**
- * Writer for the entries in the constant pool.
- */
- protected static class ConstantPoolWriter
- implements ConstantPool.Visitor {
- protected int write(CPInfo info, ClassOutputStream out) {
- out.writeByte(info.getTag());
- return info.accept(this, out);
- }
-
- public Integer visitClass(CONSTANT_Class_info info, ClassOutputStream out) {
- out.writeShort(info.name_index);
- return 1;
- }
-
- public Integer visitDouble(CONSTANT_Double_info info, ClassOutputStream out) {
- out.writeDouble(info.value);
- return 2;
- }
-
- public Integer visitFieldref(CONSTANT_Fieldref_info info, ClassOutputStream out) {
- writeRef(info, out);
- return 1;
- }
-
- public Integer visitFloat(CONSTANT_Float_info info, ClassOutputStream out) {
- out.writeFloat(info.value);
- return 1;
- }
-
- public Integer visitInteger(CONSTANT_Integer_info info, ClassOutputStream out) {
- out.writeInt(info.value);
- return 1;
- }
-
- public Integer visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, ClassOutputStream out) {
- writeRef(info, out);
- return 1;
- }
-
- public Integer visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, ClassOutputStream out) {
- out.writeShort(info.bootstrap_method_attr_index);
- out.writeShort(info.name_and_type_index);
- return 1;
- }
-
- public Integer visitLong(CONSTANT_Long_info info, ClassOutputStream out) {
- out.writeLong(info.value);
- return 2;
- }
-
- public Integer visitNameAndType(CONSTANT_NameAndType_info info, ClassOutputStream out) {
- out.writeShort(info.name_index);
- out.writeShort(info.type_index);
- return 1;
- }
-
- public Integer visitMethodHandle(CONSTANT_MethodHandle_info info, ClassOutputStream out) {
- out.writeByte(info.reference_kind.tag);
- out.writeShort(info.reference_index);
- return 1;
- }
-
- public Integer visitMethodType(CONSTANT_MethodType_info info, ClassOutputStream out) {
- out.writeShort(info.descriptor_index);
- return 1;
- }
-
- public Integer visitMethodref(CONSTANT_Methodref_info info, ClassOutputStream out) {
- return writeRef(info, out);
- }
-
- public Integer visitString(CONSTANT_String_info info, ClassOutputStream out) {
- out.writeShort(info.string_index);
- return 1;
- }
-
- public Integer visitUtf8(CONSTANT_Utf8_info info, ClassOutputStream out) {
- out.writeUTF(info.value);
- return 1;
- }
-
- protected Integer writeRef(CPRefInfo info, ClassOutputStream out) {
- out.writeShort(info.class_index);
- out.writeShort(info.name_and_type_index);
- return 1;
- }
- }
-
- /**
- * Writer for the different types of attribute.
- */
- protected static class AttributeWriter implements Attribute.Visitor {
- public void write(Attributes attributes, ClassOutputStream out) {
- int size = attributes.size();
- out.writeShort(size);
- for (Attribute a: attributes)
- write(a, out);
- }
-
- // Note: due to the use of shared resources, this method is not reentrant.
- public void write(Attribute attr, ClassOutputStream out) {
- out.writeShort(attr.attribute_name_index);
- sharedOut.reset();
- attr.accept(this, sharedOut);
- out.writeInt(sharedOut.size());
- sharedOut.writeTo(out);
- }
-
- protected ClassOutputStream sharedOut = new ClassOutputStream();
- protected AnnotationWriter annotationWriter = new AnnotationWriter();
-
- public Void visitDefault(DefaultAttribute attr, ClassOutputStream out) {
- out.write(attr.info, 0, attr.info.length);
- return null;
- }
-
- public Void visitAnnotationDefault(AnnotationDefault_attribute attr, ClassOutputStream out) {
- annotationWriter.write(attr.default_value, out);
- return null;
- }
-
- public Void visitBootstrapMethods(BootstrapMethods_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.bootstrap_method_specifiers.length);
- for (BootstrapMethods_attribute.BootstrapMethodSpecifier bsm : attr.bootstrap_method_specifiers) {
- out.writeShort(bsm.bootstrap_method_ref);
- int bsm_args_count = bsm.bootstrap_arguments.length;
- out.writeShort(bsm_args_count);
- for (int i : bsm.bootstrap_arguments) {
- out.writeShort(i);
- }
- }
- return null;
- }
-
- public Void visitCharacterRangeTable(CharacterRangeTable_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.character_range_table.length);
- for (CharacterRangeTable_attribute.Entry e: attr.character_range_table)
- writeCharacterRangeTableEntry(e, out);
- return null;
- }
-
- protected void writeCharacterRangeTableEntry(CharacterRangeTable_attribute.Entry entry, ClassOutputStream out) {
- out.writeShort(entry.start_pc);
- out.writeShort(entry.end_pc);
- out.writeInt(entry.character_range_start);
- out.writeInt(entry.character_range_end);
- out.writeShort(entry.flags);
- }
-
- public Void visitCode(Code_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.max_stack);
- out.writeShort(attr.max_locals);
- out.writeInt(attr.code.length);
- out.write(attr.code, 0, attr.code.length);
- out.writeShort(attr.exception_table.length);
- for (Code_attribute.Exception_data e: attr.exception_table)
- writeExceptionTableEntry(e, out);
- new AttributeWriter().write(attr.attributes, out);
- return null;
- }
-
- protected void writeExceptionTableEntry(Code_attribute.Exception_data exception_data, ClassOutputStream out) {
- out.writeShort(exception_data.start_pc);
- out.writeShort(exception_data.end_pc);
- out.writeShort(exception_data.handler_pc);
- out.writeShort(exception_data.catch_type);
- }
-
- public Void visitCompilationID(CompilationID_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.compilationID_index);
- return null;
- }
-
- public Void visitConstantValue(ConstantValue_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.constantvalue_index);
- return null;
- }
-
- public Void visitDeprecated(Deprecated_attribute attr, ClassOutputStream out) {
- return null;
- }
-
- public Void visitEnclosingMethod(EnclosingMethod_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.class_index);
- out.writeShort(attr.method_index);
- return null;
- }
-
- public Void visitExceptions(Exceptions_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.exception_index_table.length);
- for (int i: attr.exception_index_table)
- out.writeShort(i);
- return null;
- }
-
- public Void visitInnerClasses(InnerClasses_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.classes.length);
- for (InnerClasses_attribute.Info info: attr.classes)
- writeInnerClassesInfo(info, out);
- return null;
- }
-
- protected void writeInnerClassesInfo(InnerClasses_attribute.Info info, ClassOutputStream out) {
- out.writeShort(info.inner_class_info_index);
- out.writeShort(info.outer_class_info_index);
- out.writeShort(info.inner_name_index);
- writeAccessFlags(info.inner_class_access_flags, out);
- }
-
- public Void visitLineNumberTable(LineNumberTable_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.line_number_table.length);
- for (LineNumberTable_attribute.Entry e: attr.line_number_table)
- writeLineNumberTableEntry(e, out);
- return null;
- }
-
- protected void writeLineNumberTableEntry(LineNumberTable_attribute.Entry entry, ClassOutputStream out) {
- out.writeShort(entry.start_pc);
- out.writeShort(entry.line_number);
- }
-
- public Void visitLocalVariableTable(LocalVariableTable_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.local_variable_table.length);
- for (LocalVariableTable_attribute.Entry e: attr.local_variable_table)
- writeLocalVariableTableEntry(e, out);
- return null;
- }
-
- protected void writeLocalVariableTableEntry(LocalVariableTable_attribute.Entry entry, ClassOutputStream out) {
- out.writeShort(entry.start_pc);
- out.writeShort(entry.length);
- out.writeShort(entry.name_index);
- out.writeShort(entry.descriptor_index);
- out.writeShort(entry.index);
- }
-
- public Void visitLocalVariableTypeTable(LocalVariableTypeTable_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.local_variable_table.length);
- for (LocalVariableTypeTable_attribute.Entry e: attr.local_variable_table)
- writeLocalVariableTypeTableEntry(e, out);
- return null;
- }
-
- protected void writeLocalVariableTypeTableEntry(LocalVariableTypeTable_attribute.Entry entry, ClassOutputStream out) {
- out.writeShort(entry.start_pc);
- out.writeShort(entry.length);
- out.writeShort(entry.name_index);
- out.writeShort(entry.signature_index);
- out.writeShort(entry.index);
- }
-
- public Void visitMethodParameters(MethodParameters_attribute attr, ClassOutputStream out) {
- out.writeByte(attr.method_parameter_table.length);
- for (MethodParameters_attribute.Entry e : attr.method_parameter_table) {
- out.writeShort(e.name_index);
- out.writeShort(e.flags);
- }
- return null;
- }
-
- public Void visitRuntimeVisibleAnnotations(RuntimeVisibleAnnotations_attribute attr, ClassOutputStream out) {
- annotationWriter.write(attr.annotations, out);
- return null;
- }
-
- public Void visitRuntimeInvisibleAnnotations(RuntimeInvisibleAnnotations_attribute attr, ClassOutputStream out) {
- annotationWriter.write(attr.annotations, out);
- return null;
- }
-
- public Void visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute attr, ClassOutputStream out) {
- annotationWriter.write(attr.annotations, out);
- return null;
- }
-
- public Void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisibleTypeAnnotations_attribute attr, ClassOutputStream out) {
- annotationWriter.write(attr.annotations, out);
- return null;
- }
-
- public Void visitRuntimeVisibleParameterAnnotations(RuntimeVisibleParameterAnnotations_attribute attr, ClassOutputStream out) {
- out.writeByte(attr.parameter_annotations.length);
- for (Annotation[] annos: attr.parameter_annotations)
- annotationWriter.write(annos, out);
- return null;
- }
-
- public Void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisibleParameterAnnotations_attribute attr, ClassOutputStream out) {
- out.writeByte(attr.parameter_annotations.length);
- for (Annotation[] annos: attr.parameter_annotations)
- annotationWriter.write(annos, out);
- return null;
- }
-
- public Void visitSignature(Signature_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.signature_index);
- return null;
- }
-
- public Void visitSourceDebugExtension(SourceDebugExtension_attribute attr, ClassOutputStream out) {
- out.write(attr.debug_extension, 0, attr.debug_extension.length);
- return null;
- }
-
- public Void visitSourceFile(SourceFile_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.sourcefile_index);
- return null;
- }
-
- public Void visitSourceID(SourceID_attribute attr, ClassOutputStream out) {
- out.writeShort(attr.sourceID_index);
- return null;
- }
-
- public Void visitStackMap(StackMap_attribute attr, ClassOutputStream out) {
- if (stackMapWriter == null)
- stackMapWriter = new StackMapTableWriter();
-
- out.writeShort(attr.entries.length);
- for (stack_map_frame f: attr.entries)
- stackMapWriter.write(f, out);
- return null;
- }
-
- public Void visitStackMapTable(StackMapTable_attribute attr, ClassOutputStream out) {
- if (stackMapWriter == null)
- stackMapWriter = new StackMapTableWriter();
-
- out.writeShort(attr.entries.length);
- for (stack_map_frame f: attr.entries)
- stackMapWriter.write(f, out);
- return null;
- }
-
- public Void visitSynthetic(Synthetic_attribute attr, ClassOutputStream out) {
- return null;
- }
-
- protected void writeAccessFlags(AccessFlags flags, ClassOutputStream p) {
- sharedOut.writeShort(flags.flags);
- }
-
- protected StackMapTableWriter stackMapWriter;
- }
-
- /**
- * Writer for the frames of StackMap and StackMapTable attributes.
- */
- protected static class StackMapTableWriter
- implements stack_map_frame.Visitor {
-
- public void write(stack_map_frame frame, ClassOutputStream out) {
- out.write(frame.frame_type);
- frame.accept(this, out);
- }
-
- public Void visit_same_frame(same_frame frame, ClassOutputStream p) {
- return null;
- }
-
- public Void visit_same_locals_1_stack_item_frame(same_locals_1_stack_item_frame frame, ClassOutputStream out) {
- writeVerificationTypeInfo(frame.stack[0], out);
- return null;
- }
-
- public Void visit_same_locals_1_stack_item_frame_extended(same_locals_1_stack_item_frame_extended frame, ClassOutputStream out) {
- out.writeShort(frame.offset_delta);
- writeVerificationTypeInfo(frame.stack[0], out);
- return null;
- }
-
- public Void visit_chop_frame(chop_frame frame, ClassOutputStream out) {
- out.writeShort(frame.offset_delta);
- return null;
- }
-
- public Void visit_same_frame_extended(same_frame_extended frame, ClassOutputStream out) {
- out.writeShort(frame.offset_delta);
- return null;
- }
-
- public Void visit_append_frame(append_frame frame, ClassOutputStream out) {
- out.writeShort(frame.offset_delta);
- for (verification_type_info l: frame.locals)
- writeVerificationTypeInfo(l, out);
- return null;
- }
-
- public Void visit_full_frame(full_frame frame, ClassOutputStream out) {
- out.writeShort(frame.offset_delta);
- out.writeShort(frame.locals.length);
- for (verification_type_info l: frame.locals)
- writeVerificationTypeInfo(l, out);
- out.writeShort(frame.stack.length);
- for (verification_type_info s: frame.stack)
- writeVerificationTypeInfo(s, out);
- return null;
- }
-
- protected void writeVerificationTypeInfo(verification_type_info info,
- ClassOutputStream out) {
- out.write(info.tag);
- switch (info.tag) {
- case ITEM_Top:
- case ITEM_Integer:
- case ITEM_Float:
- case ITEM_Long:
- case ITEM_Double:
- case ITEM_Null:
- case ITEM_UninitializedThis:
- break;
-
- case ITEM_Object:
- Object_variable_info o = (Object_variable_info) info;
- out.writeShort(o.cpool_index);
- break;
-
- case ITEM_Uninitialized:
- Uninitialized_variable_info u = (Uninitialized_variable_info) info;
- out.writeShort(u.offset);
- break;
-
- default:
- throw new Error();
- }
- }
- }
-
- /**
- * Writer for annotations and the values they contain.
- */
- protected static class AnnotationWriter
- implements Annotation.element_value.Visitor {
- public void write(Annotation[] annos, ClassOutputStream out) {
- out.writeShort(annos.length);
- for (Annotation anno: annos)
- write(anno, out);
- }
-
- public void write(TypeAnnotation[] annos, ClassOutputStream out) {
- out.writeShort(annos.length);
- for (TypeAnnotation anno: annos)
- write(anno, out);
- }
-
- public void write(Annotation anno, ClassOutputStream out) {
- out.writeShort(anno.type_index);
- out.writeShort(anno.element_value_pairs.length);
- for (element_value_pair p: anno.element_value_pairs)
- write(p, out);
- }
-
- public void write(TypeAnnotation anno, ClassOutputStream out) {
- write(anno.position, out);
- write(anno.annotation, out);
- }
-
- public void write(element_value_pair pair, ClassOutputStream out) {
- out.writeShort(pair.element_name_index);
- write(pair.value, out);
- }
-
- public void write(element_value ev, ClassOutputStream out) {
- out.writeByte(ev.tag);
- ev.accept(this, out);
- }
-
- public Void visitPrimitive(Primitive_element_value ev, ClassOutputStream out) {
- out.writeShort(ev.const_value_index);
- return null;
- }
-
- public Void visitEnum(Enum_element_value ev, ClassOutputStream out) {
- out.writeShort(ev.type_name_index);
- out.writeShort(ev.const_name_index);
- return null;
- }
-
- public Void visitClass(Class_element_value ev, ClassOutputStream out) {
- out.writeShort(ev.class_info_index);
- return null;
- }
-
- public Void visitAnnotation(Annotation_element_value ev, ClassOutputStream out) {
- write(ev.annotation_value, out);
- return null;
- }
-
- public Void visitArray(Array_element_value ev, ClassOutputStream out) {
- out.writeShort(ev.num_values);
- for (element_value v: ev.values)
- write(v, out);
- return null;
- }
-
- // TODO: Move this to TypeAnnotation to be closer with similar logic?
- private void write(TypeAnnotation.Position p, ClassOutputStream out) {
- out.writeByte(p.type.targetTypeValue());
- switch (p.type) {
- // instanceof
- case INSTANCEOF:
- // new expression
- case NEW:
- // constructor/method reference receiver
- case CONSTRUCTOR_REFERENCE:
- case METHOD_REFERENCE:
- out.writeShort(p.offset);
- break;
- // local variable
- case LOCAL_VARIABLE:
- // resource variable
- case RESOURCE_VARIABLE:
- int table_length = p.lvarOffset.length;
- out.writeShort(table_length);
- for (int i = 0; i < table_length; ++i) {
- out.writeShort(1); // for table length
- out.writeShort(p.lvarOffset[i]);
- out.writeShort(p.lvarLength[i]);
- out.writeShort(p.lvarIndex[i]);
- }
- break;
- // exception parameter
- case EXCEPTION_PARAMETER:
- out.writeShort(p.exception_index);
- break;
- // method receiver
- case METHOD_RECEIVER:
- // Do nothing
- break;
- // type parameters
- case CLASS_TYPE_PARAMETER:
- case METHOD_TYPE_PARAMETER:
- out.writeByte(p.parameter_index);
- break;
- // type parameters bounds
- case CLASS_TYPE_PARAMETER_BOUND:
- case METHOD_TYPE_PARAMETER_BOUND:
- out.writeByte(p.parameter_index);
- out.writeByte(p.bound_index);
- break;
- // class extends or implements clause
- case CLASS_EXTENDS:
- out.writeShort(p.type_index);
- break;
- // throws
- case THROWS:
- out.writeShort(p.type_index);
- break;
- // method parameter
- case METHOD_FORMAL_PARAMETER:
- out.writeByte(p.parameter_index);
- break;
- // type cast
- case CAST:
- // method/constructor/reference type argument
- case CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT:
- case METHOD_INVOCATION_TYPE_ARGUMENT:
- case CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT:
- case METHOD_REFERENCE_TYPE_ARGUMENT:
- out.writeShort(p.offset);
- out.writeByte(p.type_index);
- break;
- // We don't need to worry about these
- case METHOD_RETURN:
- case FIELD:
- break;
- case UNKNOWN:
- throw new AssertionError("ClassWriter: UNKNOWN target type should never occur!");
- default:
- throw new AssertionError("ClassWriter: Unknown target type for position: " + p);
- }
-
- { // Append location data for generics/arrays.
- // TODO: check for overrun?
- out.writeByte((byte)p.location.size());
- for (int i : TypeAnnotation.Position.getBinaryFromTypePath(p.location))
- out.writeByte((byte)i);
- }
- }
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Code_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Code_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * See JVMS, section 4.8.3.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Code_attribute extends Attribute {
- public static class InvalidIndex extends AttributeException {
- private static final long serialVersionUID = -8904527774589382802L;
- InvalidIndex(int index) {
- this.index = index;
- }
-
- @Override
- public String getMessage() {
- // i18n
- return "invalid index " + index + " in Code attribute";
- }
-
- public final int index;
- }
-
- Code_attribute(ClassReader cr, int name_index, int length)
- throws IOException, ConstantPoolException {
- super(name_index, length);
- max_stack = cr.readUnsignedShort();
- max_locals = cr.readUnsignedShort();
- code_length = cr.readInt();
- code = new byte[code_length];
- cr.readFully(code);
- exception_table_length = cr.readUnsignedShort();
- exception_table = new Exception_data[exception_table_length];
- for (int i = 0; i < exception_table_length; i++)
- exception_table[i] = new Exception_data(cr);
- attributes = new Attributes(cr);
- }
-
- public int getByte(int offset) throws InvalidIndex {
- if (offset < 0 || offset >= code.length)
- throw new InvalidIndex(offset);
- return code[offset];
- }
-
- public int getUnsignedByte(int offset) throws InvalidIndex {
- if (offset < 0 || offset >= code.length)
- throw new InvalidIndex(offset);
- return code[offset] & 0xff;
- }
-
- public int getShort(int offset) throws InvalidIndex {
- if (offset < 0 || offset + 1 >= code.length)
- throw new InvalidIndex(offset);
- return (code[offset] << 8) | (code[offset + 1] & 0xFF);
- }
-
- public int getUnsignedShort(int offset) throws InvalidIndex {
- if (offset < 0 || offset + 1 >= code.length)
- throw new InvalidIndex(offset);
- return ((code[offset] << 8) | (code[offset + 1] & 0xFF)) & 0xFFFF;
- }
-
- public int getInt(int offset) throws InvalidIndex {
- if (offset < 0 || offset + 3 >= code.length)
- throw new InvalidIndex(offset);
- return (getShort(offset) << 16) | (getShort(offset + 2) & 0xFFFF);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitCode(this, data);
- }
-
- public Iterable getInstructions() {
- return new Iterable() {
- public Iterator iterator() {
- return new Iterator() {
-
- public boolean hasNext() {
- return (next != null);
- }
-
- public Instruction next() {
- if (next == null)
- throw new NoSuchElementException();
-
- current = next;
- pc += current.length();
- next = (pc < code.length ? new Instruction(code, pc) : null);
- return current;
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Not supported.");
- }
-
- Instruction current = null;
- int pc = 0;
- Instruction next = new Instruction(code, pc);
-
- };
- }
-
- };
- }
-
- public final int max_stack;
- public final int max_locals;
- public final int code_length;
- public final byte[] code;
- public final int exception_table_length;
- public final Exception_data[] exception_table;
- public final Attributes attributes;
-
- public static class Exception_data {
- Exception_data(ClassReader cr) throws IOException {
- start_pc = cr.readUnsignedShort();
- end_pc = cr.readUnsignedShort();
- handler_pc = cr.readUnsignedShort();
- catch_type = cr.readUnsignedShort();
- }
-
- public final int start_pc;
- public final int end_pc;
- public final int handler_pc;
- public final int catch_type;
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/CompilationID_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/CompilationID_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class CompilationID_attribute extends Attribute {
-
- CompilationID_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- compilationID_index = cr.readUnsignedShort();
- }
-
- public CompilationID_attribute(ConstantPool constant_pool, int compilationID_index)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.CompilationID), compilationID_index);
- }
-
- public CompilationID_attribute(int name_index, int compilationID_index) {
- super(name_index, 2);
- this.compilationID_index = compilationID_index;
- }
-
- String getCompilationID(ConstantPool constant_pool)
- throws ConstantPoolException {
- return constant_pool.getUTF8Value(compilationID_index);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitCompilationID(this, data);
- }
-
- public final int compilationID_index;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ConstantPool.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ConstantPool.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,914 +0,0 @@
-/*
- * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Iterator;
-
-/**
- * See JVMS, section 4.5.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class ConstantPool {
-
- public static class InvalidIndex extends ConstantPoolException {
- private static final long serialVersionUID = -4350294289300939730L;
- InvalidIndex(int index) {
- super(index);
- }
-
- @Override
- public String getMessage() {
- // i18n
- return "invalid index #" + index;
- }
- }
-
- public static class UnexpectedEntry extends ConstantPoolException {
- private static final long serialVersionUID = 6986335935377933211L;
- UnexpectedEntry(int index, int expected_tag, int found_tag) {
- super(index);
- this.expected_tag = expected_tag;
- this.found_tag = found_tag;
- }
-
- @Override
- public String getMessage() {
- // i18n?
- return "unexpected entry at #" + index + " -- expected tag " + expected_tag + ", found " + found_tag;
- }
-
- public final int expected_tag;
- public final int found_tag;
- }
-
- public static class InvalidEntry extends ConstantPoolException {
- private static final long serialVersionUID = 1000087545585204447L;
- InvalidEntry(int index, int tag) {
- super(index);
- this.tag = tag;
- }
-
- @Override
- public String getMessage() {
- // i18n?
- return "unexpected tag at #" + index + ": " + tag;
- }
-
- public final int tag;
- }
-
- public static class EntryNotFound extends ConstantPoolException {
- private static final long serialVersionUID = 2885537606468581850L;
- EntryNotFound(Object value) {
- super(-1);
- this.value = value;
- }
-
- @Override
- public String getMessage() {
- // i18n?
- return "value not found: " + value;
- }
-
- public final Object value;
- }
-
- public static final int CONSTANT_Utf8 = 1;
- public static final int CONSTANT_Integer = 3;
- public static final int CONSTANT_Float = 4;
- public static final int CONSTANT_Long = 5;
- public static final int CONSTANT_Double = 6;
- public static final int CONSTANT_Class = 7;
- public static final int CONSTANT_String = 8;
- public static final int CONSTANT_Fieldref = 9;
- public static final int CONSTANT_Methodref = 10;
- public static final int CONSTANT_InterfaceMethodref = 11;
- public static final int CONSTANT_NameAndType = 12;
- public static final int CONSTANT_MethodHandle = 15;
- public static final int CONSTANT_MethodType = 16;
- public static final int CONSTANT_InvokeDynamic = 18;
-
- public static enum RefKind {
- REF_getField(1, "getfield"),
- REF_getStatic(2, "getstatic"),
- REF_putField(3, "putfield"),
- REF_putStatic(4, "putstatic"),
- REF_invokeVirtual(5, "invokevirtual"),
- REF_invokeStatic(6, "invokestatic"),
- REF_invokeSpecial(7, "invokespecial"),
- REF_newInvokeSpecial(8, "newinvokespecial"),
- REF_invokeInterface(9, "invokeinterface");
-
- public final int tag;
- public final String name;
-
- RefKind(int tag, String name) {
- this.tag = tag;
- this.name = name;
- }
-
- static RefKind getRefkind(int tag) {
- switch(tag) {
- case 1:
- return REF_getField;
- case 2:
- return REF_getStatic;
- case 3:
- return REF_putField;
- case 4:
- return REF_putStatic;
- case 5:
- return REF_invokeVirtual;
- case 6:
- return REF_invokeStatic;
- case 7:
- return REF_invokeSpecial;
- case 8:
- return REF_newInvokeSpecial;
- case 9:
- return REF_invokeInterface;
- default:
- return null;
- }
- }
- }
-
- ConstantPool(ClassReader cr) throws IOException, InvalidEntry {
- int count = cr.readUnsignedShort();
- pool = new CPInfo[count];
- for (int i = 1; i < count; i++) {
- int tag = cr.readUnsignedByte();
- switch (tag) {
- case CONSTANT_Class:
- pool[i] = new CONSTANT_Class_info(this, cr);
- break;
-
- case CONSTANT_Double:
- pool[i] = new CONSTANT_Double_info(cr);
- i++;
- break;
-
- case CONSTANT_Fieldref:
- pool[i] = new CONSTANT_Fieldref_info(this, cr);
- break;
-
- case CONSTANT_Float:
- pool[i] = new CONSTANT_Float_info(cr);
- break;
-
- case CONSTANT_Integer:
- pool[i] = new CONSTANT_Integer_info(cr);
- break;
-
- case CONSTANT_InterfaceMethodref:
- pool[i] = new CONSTANT_InterfaceMethodref_info(this, cr);
- break;
-
- case CONSTANT_InvokeDynamic:
- pool[i] = new CONSTANT_InvokeDynamic_info(this, cr);
- break;
-
- case CONSTANT_Long:
- pool[i] = new CONSTANT_Long_info(cr);
- i++;
- break;
-
- case CONSTANT_MethodHandle:
- pool[i] = new CONSTANT_MethodHandle_info(this, cr);
- break;
-
- case CONSTANT_MethodType:
- pool[i] = new CONSTANT_MethodType_info(this, cr);
- break;
-
- case CONSTANT_Methodref:
- pool[i] = new CONSTANT_Methodref_info(this, cr);
- break;
-
- case CONSTANT_NameAndType:
- pool[i] = new CONSTANT_NameAndType_info(this, cr);
- break;
-
- case CONSTANT_String:
- pool[i] = new CONSTANT_String_info(this, cr);
- break;
-
- case CONSTANT_Utf8:
- pool[i] = new CONSTANT_Utf8_info(cr);
- break;
-
- default:
- throw new InvalidEntry(i, tag);
- }
- }
- }
-
- public ConstantPool(CPInfo[] pool) {
- this.pool = pool;
- }
-
- public int size() {
- return pool.length;
- }
-
- public int byteLength() {
- int length = 2;
- for (int i = 1; i < size(); ) {
- CPInfo cpInfo = pool[i];
- length += cpInfo.byteLength();
- i += cpInfo.size();
- }
- return length;
- }
-
- public CPInfo get(int index) throws InvalidIndex {
- if (index <= 0 || index >= pool.length)
- throw new InvalidIndex(index);
- CPInfo info = pool[index];
- if (info == null) {
- // this occurs for indices referencing the "second half" of an
- // 8 byte constant, such as CONSTANT_Double or CONSTANT_Long
- throw new InvalidIndex(index);
- }
- return pool[index];
- }
-
- private CPInfo get(int index, int expected_type) throws InvalidIndex, UnexpectedEntry {
- CPInfo info = get(index);
- if (info.getTag() != expected_type)
- throw new UnexpectedEntry(index, expected_type, info.getTag());
- return info;
- }
-
- public CONSTANT_Utf8_info getUTF8Info(int index) throws InvalidIndex, UnexpectedEntry {
- return ((CONSTANT_Utf8_info) get(index, CONSTANT_Utf8));
- }
-
- public CONSTANT_Class_info getClassInfo(int index) throws InvalidIndex, UnexpectedEntry {
- return ((CONSTANT_Class_info) get(index, CONSTANT_Class));
- }
-
- public CONSTANT_NameAndType_info getNameAndTypeInfo(int index) throws InvalidIndex, UnexpectedEntry {
- return ((CONSTANT_NameAndType_info) get(index, CONSTANT_NameAndType));
- }
-
- public String getUTF8Value(int index) throws InvalidIndex, UnexpectedEntry {
- return getUTF8Info(index).value;
- }
-
- public int getUTF8Index(String value) throws EntryNotFound {
- for (int i = 1; i < pool.length; i++) {
- CPInfo info = pool[i];
- if (info instanceof CONSTANT_Utf8_info &&
- ((CONSTANT_Utf8_info) info).value.equals(value))
- return i;
- }
- throw new EntryNotFound(value);
- }
-
- public Iterable entries() {
- return new Iterable() {
- public Iterator iterator() {
- return new Iterator() {
-
- public boolean hasNext() {
- return next < pool.length;
- }
-
- public CPInfo next() {
- current = pool[next];
- switch (current.getTag()) {
- case CONSTANT_Double:
- case CONSTANT_Long:
- next += 2;
- break;
- default:
- next += 1;
- }
- return current;
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- private CPInfo current;
- private int next = 1;
-
- };
- }
- };
- }
-
- private CPInfo[] pool;
-
- public interface Visitor {
- R visitClass(CONSTANT_Class_info info, P p);
- R visitDouble(CONSTANT_Double_info info, P p);
- R visitFieldref(CONSTANT_Fieldref_info info, P p);
- R visitFloat(CONSTANT_Float_info info, P p);
- R visitInteger(CONSTANT_Integer_info info, P p);
- R visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, P p);
- R visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, P p);
- R visitLong(CONSTANT_Long_info info, P p);
- R visitNameAndType(CONSTANT_NameAndType_info info, P p);
- R visitMethodref(CONSTANT_Methodref_info info, P p);
- R visitMethodHandle(CONSTANT_MethodHandle_info info, P p);
- R visitMethodType(CONSTANT_MethodType_info info, P p);
- R visitString(CONSTANT_String_info info, P p);
- R visitUtf8(CONSTANT_Utf8_info info, P p);
- }
-
- public static abstract class CPInfo {
- CPInfo() {
- this.cp = null;
- }
-
- CPInfo(ConstantPool cp) {
- this.cp = cp;
- }
-
- public abstract int getTag();
-
- /** The number of slots in the constant pool used by this entry.
- * 2 for CONSTANT_Double and CONSTANT_Long; 1 for everything else. */
- public int size() {
- return 1;
- }
-
- public abstract int byteLength();
-
- public abstract R accept(Visitor visitor, D data);
-
- protected final ConstantPool cp;
- }
-
- public static abstract class CPRefInfo extends CPInfo {
- protected CPRefInfo(ConstantPool cp, ClassReader cr, int tag) throws IOException {
- super(cp);
- this.tag = tag;
- class_index = cr.readUnsignedShort();
- name_and_type_index = cr.readUnsignedShort();
- }
-
- protected CPRefInfo(ConstantPool cp, int tag, int class_index, int name_and_type_index) {
- super(cp);
- this.tag = tag;
- this.class_index = class_index;
- this.name_and_type_index = name_and_type_index;
- }
-
- public int getTag() {
- return tag;
- }
-
- public int byteLength() {
- return 5;
- }
-
- public CONSTANT_Class_info getClassInfo() throws ConstantPoolException {
- return cp.getClassInfo(class_index);
- }
-
- public String getClassName() throws ConstantPoolException {
- return cp.getClassInfo(class_index).getName();
- }
-
- public CONSTANT_NameAndType_info getNameAndTypeInfo() throws ConstantPoolException {
- return cp.getNameAndTypeInfo(name_and_type_index);
- }
-
- public final int tag;
- public final int class_index;
- public final int name_and_type_index;
- }
-
- public static class CONSTANT_Class_info extends CPInfo {
- CONSTANT_Class_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp);
- name_index = cr.readUnsignedShort();
- }
-
- public CONSTANT_Class_info(ConstantPool cp, int name_index) {
- super(cp);
- this.name_index = name_index;
- }
-
- public int getTag() {
- return CONSTANT_Class;
- }
-
- public int byteLength() {
- return 3;
- }
-
- /**
- * Get the raw value of the class referenced by this constant pool entry.
- * This will either be the name of the class, in internal form, or a
- * descriptor for an array class.
- * @return the raw value of the class
- */
- public String getName() throws ConstantPoolException {
- return cp.getUTF8Value(name_index);
- }
-
- /**
- * If this constant pool entry identifies either a class or interface type,
- * or a possibly multi-dimensional array of a class of interface type,
- * return the name of the class or interface in internal form. Otherwise,
- * (i.e. if this is a possibly multi-dimensional array of a primitive type),
- * return null.
- * @return the base class or interface name
- */
- public String getBaseName() throws ConstantPoolException {
- String name = getName();
- if (name.startsWith("[")) {
- int index = name.indexOf("[L");
- if (index == -1)
- return null;
- return name.substring(index + 2, name.length() - 1);
- } else
- return name;
- }
-
- public int getDimensionCount() throws ConstantPoolException {
- String name = getName();
- int count = 0;
- while (name.charAt(count) == '[')
- count++;
- return count;
- }
-
- @Override
- public String toString() {
- return "CONSTANT_Class_info[name_index: " + name_index + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitClass(this, data);
- }
-
- public final int name_index;
- }
-
- public static class CONSTANT_Double_info extends CPInfo {
- CONSTANT_Double_info(ClassReader cr) throws IOException {
- value = cr.readDouble();
- }
-
- public CONSTANT_Double_info(double value) {
- this.value = value;
- }
-
- public int getTag() {
- return CONSTANT_Double;
- }
-
- public int byteLength() {
- return 9;
- }
-
- @Override
- public int size() {
- return 2;
- }
-
- @Override
- public String toString() {
- return "CONSTANT_Double_info[value: " + value + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitDouble(this, data);
- }
-
- public final double value;
- }
-
- public static class CONSTANT_Fieldref_info extends CPRefInfo {
- CONSTANT_Fieldref_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp, cr, CONSTANT_Fieldref);
- }
-
- public CONSTANT_Fieldref_info(ConstantPool cp, int class_index, int name_and_type_index) {
- super(cp, CONSTANT_Fieldref, class_index, name_and_type_index);
- }
-
- @Override
- public String toString() {
- return "CONSTANT_Fieldref_info[class_index: " + class_index + ", name_and_type_index: " + name_and_type_index + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitFieldref(this, data);
- }
- }
-
- public static class CONSTANT_Float_info extends CPInfo {
- CONSTANT_Float_info(ClassReader cr) throws IOException {
- value = cr.readFloat();
- }
-
- public CONSTANT_Float_info(float value) {
- this.value = value;
- }
-
- public int getTag() {
- return CONSTANT_Float;
- }
-
- public int byteLength() {
- return 5;
- }
-
- @Override
- public String toString() {
- return "CONSTANT_Float_info[value: " + value + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitFloat(this, data);
- }
-
- public final float value;
- }
-
- public static class CONSTANT_Integer_info extends CPInfo {
- CONSTANT_Integer_info(ClassReader cr) throws IOException {
- value = cr.readInt();
- }
-
- public CONSTANT_Integer_info(int value) {
- this.value = value;
- }
-
- public int getTag() {
- return CONSTANT_Integer;
- }
-
- public int byteLength() {
- return 5;
- }
-
- @Override
- public String toString() {
- return "CONSTANT_Integer_info[value: " + value + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitInteger(this, data);
- }
-
- public final int value;
- }
-
- public static class CONSTANT_InterfaceMethodref_info extends CPRefInfo {
- CONSTANT_InterfaceMethodref_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp, cr, CONSTANT_InterfaceMethodref);
- }
-
- public CONSTANT_InterfaceMethodref_info(ConstantPool cp, int class_index, int name_and_type_index) {
- super(cp, CONSTANT_InterfaceMethodref, class_index, name_and_type_index);
- }
-
- @Override
- public String toString() {
- return "CONSTANT_InterfaceMethodref_info[class_index: " + class_index + ", name_and_type_index: " + name_and_type_index + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitInterfaceMethodref(this, data);
- }
- }
-
- public static class CONSTANT_InvokeDynamic_info extends CPInfo {
- CONSTANT_InvokeDynamic_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp);
- bootstrap_method_attr_index = cr.readUnsignedShort();
- name_and_type_index = cr.readUnsignedShort();
- }
-
- public CONSTANT_InvokeDynamic_info(ConstantPool cp, int bootstrap_method_index, int name_and_type_index) {
- super(cp);
- this.bootstrap_method_attr_index = bootstrap_method_index;
- this.name_and_type_index = name_and_type_index;
- }
-
- public int getTag() {
- return CONSTANT_InvokeDynamic;
- }
-
- public int byteLength() {
- return 5;
- }
-
- @Override
- public String toString() {
- return "CONSTANT_InvokeDynamic_info[bootstrap_method_index: " + bootstrap_method_attr_index + ", name_and_type_index: " + name_and_type_index + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitInvokeDynamic(this, data);
- }
-
- public CONSTANT_NameAndType_info getNameAndTypeInfo() throws ConstantPoolException {
- return cp.getNameAndTypeInfo(name_and_type_index);
- }
-
- public final int bootstrap_method_attr_index;
- public final int name_and_type_index;
- }
-
- public static class CONSTANT_Long_info extends CPInfo {
- CONSTANT_Long_info(ClassReader cr) throws IOException {
- value = cr.readLong();
- }
-
- public CONSTANT_Long_info(long value) {
- this.value = value;
- }
-
- public int getTag() {
- return CONSTANT_Long;
- }
-
- @Override
- public int size() {
- return 2;
- }
-
- public int byteLength() {
- return 9;
- }
-
- @Override
- public String toString() {
- return "CONSTANT_Long_info[value: " + value + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitLong(this, data);
- }
-
- public final long value;
- }
-
- public static class CONSTANT_MethodHandle_info extends CPInfo {
- CONSTANT_MethodHandle_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp);
- reference_kind = RefKind.getRefkind(cr.readUnsignedByte());
- reference_index = cr.readUnsignedShort();
- }
-
- public CONSTANT_MethodHandle_info(ConstantPool cp, RefKind ref_kind, int member_index) {
- super(cp);
- this.reference_kind = ref_kind;
- this.reference_index = member_index;
- }
-
- public int getTag() {
- return CONSTANT_MethodHandle;
- }
-
- public int byteLength() {
- return 4;
- }
-
- @Override
- public String toString() {
- return "CONSTANT_MethodHandle_info[ref_kind: " + reference_kind + ", member_index: " + reference_index + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitMethodHandle(this, data);
- }
-
- public CPRefInfo getCPRefInfo() throws ConstantPoolException {
- int expected = CONSTANT_Methodref;
- int actual = cp.get(reference_index).getTag();
- // allow these tag types also:
- switch (actual) {
- case CONSTANT_Fieldref:
- case CONSTANT_InterfaceMethodref:
- expected = actual;
- }
- return (CPRefInfo) cp.get(reference_index, expected);
- }
-
- public final RefKind reference_kind;
- public final int reference_index;
- }
-
- public static class CONSTANT_MethodType_info extends CPInfo {
- CONSTANT_MethodType_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp);
- descriptor_index = cr.readUnsignedShort();
- }
-
- public CONSTANT_MethodType_info(ConstantPool cp, int signature_index) {
- super(cp);
- this.descriptor_index = signature_index;
- }
-
- public int getTag() {
- return CONSTANT_MethodType;
- }
-
- public int byteLength() {
- return 3;
- }
-
- @Override
- public String toString() {
- return "CONSTANT_MethodType_info[signature_index: " + descriptor_index + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitMethodType(this, data);
- }
-
- public String getType() throws ConstantPoolException {
- return cp.getUTF8Value(descriptor_index);
- }
-
- public final int descriptor_index;
- }
-
- public static class CONSTANT_Methodref_info extends CPRefInfo {
- CONSTANT_Methodref_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp, cr, CONSTANT_Methodref);
- }
-
- public CONSTANT_Methodref_info(ConstantPool cp, int class_index, int name_and_type_index) {
- super(cp, CONSTANT_Methodref, class_index, name_and_type_index);
- }
-
- @Override
- public String toString() {
- return "CONSTANT_Methodref_info[class_index: " + class_index + ", name_and_type_index: " + name_and_type_index + "]";
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitMethodref(this, data);
- }
- }
-
- public static class CONSTANT_NameAndType_info extends CPInfo {
- CONSTANT_NameAndType_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp);
- name_index = cr.readUnsignedShort();
- type_index = cr.readUnsignedShort();
- }
-
- public CONSTANT_NameAndType_info(ConstantPool cp, int name_index, int type_index) {
- super(cp);
- this.name_index = name_index;
- this.type_index = type_index;
- }
-
- public int getTag() {
- return CONSTANT_NameAndType;
- }
-
- public int byteLength() {
- return 5;
- }
-
- public String getName() throws ConstantPoolException {
- return cp.getUTF8Value(name_index);
- }
-
- public String getType() throws ConstantPoolException {
- return cp.getUTF8Value(type_index);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitNameAndType(this, data);
- }
-
- @Override
- public String toString() {
- return "CONSTANT_NameAndType_info[name_index: " + name_index + ", type_index: " + type_index + "]";
- }
-
- public final int name_index;
- public final int type_index;
- }
-
- public static class CONSTANT_String_info extends CPInfo {
- CONSTANT_String_info(ConstantPool cp, ClassReader cr) throws IOException {
- super(cp);
- string_index = cr.readUnsignedShort();
- }
-
- public CONSTANT_String_info(ConstantPool cp, int string_index) {
- super(cp);
- this.string_index = string_index;
- }
-
- public int getTag() {
- return CONSTANT_String;
- }
-
- public int byteLength() {
- return 3;
- }
-
- public String getString() throws ConstantPoolException {
- return cp.getUTF8Value(string_index);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitString(this, data);
- }
-
- @Override
- public String toString() {
- return "CONSTANT_String_info[class_index: " + string_index + "]";
- }
-
- public final int string_index;
- }
-
- public static class CONSTANT_Utf8_info extends CPInfo {
- CONSTANT_Utf8_info(ClassReader cr) throws IOException {
- value = cr.readUTF();
- }
-
- public CONSTANT_Utf8_info(String value) {
- this.value = value;
- }
-
- public int getTag() {
- return CONSTANT_Utf8;
- }
-
- public int byteLength() {
- class SizeOutputStream extends OutputStream {
- @Override
- public void write(int b) {
- size++;
- }
- int size;
- }
- SizeOutputStream sizeOut = new SizeOutputStream();
- DataOutputStream out = new DataOutputStream(sizeOut);
- try { out.writeUTF(value); } catch (IOException ignore) { }
- return 1 + sizeOut.size;
- }
-
- @Override
- public String toString() {
- if (value.length() < 32 && isPrintableAscii(value))
- return "CONSTANT_Utf8_info[value: \"" + value + "\"]";
- else
- return "CONSTANT_Utf8_info[value: (" + value.length() + " chars)]";
- }
-
- static boolean isPrintableAscii(String s) {
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- if (c < 32 || c >= 127)
- return false;
- }
- return true;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitUtf8(this, data);
- }
-
- public final String value;
- }
-
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ConstantPoolException.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ConstantPoolException.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package com.sun.tools.classfile;
-
-/*
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class ConstantPoolException extends Exception {
- private static final long serialVersionUID = -2324397349644754565L;
- ConstantPoolException(int index) {
- this.index = index;
- }
-
- public final int index;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ConstantValue_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ConstantValue_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.2.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class ConstantValue_attribute extends Attribute {
- ConstantValue_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- constantvalue_index = cr.readUnsignedShort();
- }
-
- public ConstantValue_attribute(ConstantPool constant_pool, int constantvalue_index)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.ConstantValue), constantvalue_index);
- }
-
- public ConstantValue_attribute(int name_index, int constantvalue_index) {
- super(name_index, 2);
- this.constantvalue_index = constantvalue_index;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitConstantValue(this, data);
- }
-
- public final int constantvalue_index;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/DefaultAttribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/DefaultAttribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-/*
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class DefaultAttribute extends Attribute {
- DefaultAttribute(ClassReader cr, int name_index, byte[] data) {
- this(cr, name_index, data, null);
- }
-
- DefaultAttribute(ClassReader cr, int name_index, byte[] data, String reason) {
- super(name_index, data.length);
- info = data;
- this.reason = reason;
- }
-
- public DefaultAttribute(ConstantPool constant_pool, int name_index, byte[] info) {
- this(constant_pool, name_index, info, null);
- }
-
- public DefaultAttribute(ConstantPool constant_pool, int name_index,
- byte[] info, String reason) {
- super(name_index, info.length);
- this.info = info;
- this.reason = reason;
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitDefault(this, p);
- }
-
- public final byte[] info;
- /** Why did we need to generate a DefaultAttribute
- */
- public final String reason;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Dependencies.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Dependencies.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,794 +0,0 @@
-/*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.tools.classfile;
-
-import java.util.Deque;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import com.sun.tools.classfile.Dependency.Filter;
-import com.sun.tools.classfile.Dependency.Finder;
-import com.sun.tools.classfile.Dependency.Location;
-import com.sun.tools.classfile.Type.ArrayType;
-import com.sun.tools.classfile.Type.ClassSigType;
-import com.sun.tools.classfile.Type.ClassType;
-import com.sun.tools.classfile.Type.MethodType;
-import com.sun.tools.classfile.Type.SimpleType;
-import com.sun.tools.classfile.Type.TypeParamType;
-import com.sun.tools.classfile.Type.WildcardType;
-
-import static com.sun.tools.classfile.ConstantPool.*;
-
-/**
- * A framework for determining {@link Dependency dependencies} between class files.
- *
- * A {@link Dependency.Finder finder} is used to identify the dependencies of
- * individual classes. Some finders may return subtypes of {@code Dependency} to
- * further characterize the type of dependency, such as a dependency on a
- * method within a class.
- *
- * A {@link Dependency.Filter filter} may be used to restrict the set of
- * dependencies found by a finder.
- *
- * Dependencies that are found may be passed to a {@link Dependencies.Recorder
- * recorder} so that the dependencies can be stored in a custom data structure.
- */
-public class Dependencies {
- /**
- * Thrown when a class file cannot be found.
- */
- public static class ClassFileNotFoundException extends Exception {
- private static final long serialVersionUID = 3632265927794475048L;
-
- public ClassFileNotFoundException(String className) {
- super(className);
- this.className = className;
- }
-
- public ClassFileNotFoundException(String className, Throwable cause) {
- this(className);
- initCause(cause);
- }
-
- public final String className;
- }
-
- /**
- * Thrown when an exception is found processing a class file.
- */
- public static class ClassFileError extends Error {
- private static final long serialVersionUID = 4111110813961313203L;
-
- public ClassFileError(Throwable cause) {
- initCause(cause);
- }
- }
-
- /**
- * Service provider interface to locate and read class files.
- */
- public interface ClassFileReader {
- /**
- * Get the ClassFile object for a specified class.
- * @param className the name of the class to be returned.
- * @return the ClassFile for the given class
- * @throws Dependencies.ClassFileNotFoundException if the classfile cannot be
- * found
- */
- public ClassFile getClassFile(String className)
- throws ClassFileNotFoundException;
- }
-
- /**
- * Service provide interface to handle results.
- */
- public interface Recorder {
- /**
- * Record a dependency that has been found.
- * @param d
- */
- public void addDependency(Dependency d);
- }
-
- /**
- * Get the default finder used to locate the dependencies for a class.
- * @return the default finder
- */
- public static Finder getDefaultFinder() {
- return new APIDependencyFinder(AccessFlags.ACC_PRIVATE);
- }
-
- /**
- * Get a finder used to locate the API dependencies for a class.
- * These include the superclass, superinterfaces, and classes referenced in
- * the declarations of fields and methods. The fields and methods that
- * are checked can be limited according to a specified access.
- * The access parameter must be one of {@link AccessFlags#ACC_PUBLIC ACC_PUBLIC},
- * {@link AccessFlags#ACC_PRIVATE ACC_PRIVATE},
- * {@link AccessFlags#ACC_PROTECTED ACC_PROTECTED}, or 0 for
- * package private access. Members with greater than or equal accessibility
- * to that specified will be searched for dependencies.
- * @param access the access of members to be checked
- * @return an API finder
- */
- public static Finder getAPIFinder(int access) {
- return new APIDependencyFinder(access);
- }
-
- /**
- * Get a finder to do class dependency analysis.
- *
- * @return a Class dependency finder
- */
- public static Finder getClassDependencyFinder() {
- return new ClassDependencyFinder();
- }
-
- /**
- * Get the finder used to locate the dependencies for a class.
- * @return the finder
- */
- public Finder getFinder() {
- if (finder == null)
- finder = getDefaultFinder();
- return finder;
- }
-
- /**
- * Set the finder used to locate the dependencies for a class.
- * @param f the finder
- */
- public void setFinder(Finder f) {
- finder = Objects.requireNonNull(f);
- }
-
- /**
- * Get the default filter used to determine included when searching
- * the transitive closure of all the dependencies.
- * Unless overridden, the default filter accepts all dependencies.
- * @return the default filter.
- */
- public static Filter getDefaultFilter() {
- return DefaultFilter.instance();
- }
-
- /**
- * Get a filter which uses a regular expression on the target's class name
- * to determine if a dependency is of interest.
- * @param pattern the pattern used to match the target's class name
- * @return a filter for matching the target class name with a regular expression
- */
- public static Filter getRegexFilter(Pattern pattern) {
- return new TargetRegexFilter(pattern);
- }
-
- /**
- * Get a filter which checks the package of a target's class name
- * to determine if a dependency is of interest. The filter checks if the
- * package of the target's class matches any of a set of given package
- * names. The match may optionally match subpackages of the given names as well.
- * @param packageNames the package names used to match the target's class name
- * @param matchSubpackages whether or not to match subpackages as well
- * @return a filter for checking the target package name against a list of package names
- */
- public static Filter getPackageFilter(Set packageNames, boolean matchSubpackages) {
- return new TargetPackageFilter(packageNames, matchSubpackages);
- }
-
- /**
- * Get the filter used to determine the dependencies included when searching
- * the transitive closure of all the dependencies.
- * Unless overridden, the default filter accepts all dependencies.
- * @return the filter
- */
- public Filter getFilter() {
- if (filter == null)
- filter = getDefaultFilter();
- return filter;
- }
-
- /**
- * Set the filter used to determine the dependencies included when searching
- * the transitive closure of all the dependencies.
- * @param f the filter
- */
- public void setFilter(Filter f) {
- filter = Objects.requireNonNull(f);
- }
-
- /**
- * Find the dependencies of a class, using the current
- * {@link Dependencies#getFinder finder} and
- * {@link Dependencies#getFilter filter}.
- * The search may optionally include the transitive closure of all the
- * filtered dependencies, by also searching in the classes named in those
- * dependencies.
- * @param classFinder a finder to locate class files
- * @param rootClassNames the names of the root classes from which to begin
- * searching
- * @param transitiveClosure whether or not to also search those classes
- * named in any filtered dependencies that are found.
- * @return the set of dependencies that were found
- * @throws ClassFileNotFoundException if a required class file cannot be found
- * @throws ClassFileError if an error occurs while processing a class file,
- * such as an error in the internal class file structure.
- */
- public Set findAllDependencies(
- ClassFileReader classFinder, Set rootClassNames,
- boolean transitiveClosure)
- throws ClassFileNotFoundException {
- final Set results = new HashSet<>();
- Recorder r = new Recorder() {
- public void addDependency(Dependency d) {
- results.add(d);
- }
- };
- findAllDependencies(classFinder, rootClassNames, transitiveClosure, r);
- return results;
- }
-
- /**
- * Find the dependencies of a class, using the current
- * {@link Dependencies#getFinder finder} and
- * {@link Dependencies#getFilter filter}.
- * The search may optionally include the transitive closure of all the
- * filtered dependencies, by also searching in the classes named in those
- * dependencies.
- * @param classFinder a finder to locate class files
- * @param rootClassNames the names of the root classes from which to begin
- * searching
- * @param transitiveClosure whether or not to also search those classes
- * named in any filtered dependencies that are found.
- * @param recorder a recorder for handling the results
- * @throws ClassFileNotFoundException if a required class file cannot be found
- * @throws ClassFileError if an error occurs while processing a class file,
- * such as an error in the internal class file structure.
- */
- public void findAllDependencies(
- ClassFileReader classFinder, Set rootClassNames,
- boolean transitiveClosure, Recorder recorder)
- throws ClassFileNotFoundException {
- Set doneClasses = new HashSet<>();
-
- getFinder(); // ensure initialized
- getFilter(); // ensure initialized
-
- // Work queue of names of classfiles to be searched.
- // Entries will be unique, and for classes that do not yet have
- // dependencies in the results map.
- Deque deque = new LinkedList<>(rootClassNames);
-
- String className;
- while ((className = deque.poll()) != null) {
- assert (!doneClasses.contains(className));
- doneClasses.add(className);
-
- ClassFile cf = classFinder.getClassFile(className);
-
- // The following code just applies the filter to the dependencies
- // followed for the transitive closure.
- for (Dependency d: finder.findDependencies(cf)) {
- recorder.addDependency(d);
- if (transitiveClosure && filter.accepts(d)) {
- String cn = d.getTarget().getClassName();
- if (!doneClasses.contains(cn))
- deque.add(cn);
- }
- }
- }
- }
-
- private Filter filter;
- private Finder finder;
-
- /**
- * A location identifying a class.
- */
- static class SimpleLocation implements Location {
- public SimpleLocation(String name) {
- this.name = name;
- this.className = name.replace('/', '.');
- }
-
- public String getName() {
- return name;
- }
-
- public String getClassName() {
- return className;
- }
-
- public String getPackageName() {
- int i = name.lastIndexOf('/');
- return (i > 0) ? name.substring(0, i).replace('/', '.') : "";
- }
-
- @Override
- public boolean equals(Object other) {
- if (this == other)
- return true;
- if (!(other instanceof SimpleLocation))
- return false;
- return (name.equals(((SimpleLocation) other).name));
- }
-
- @Override
- public int hashCode() {
- return name.hashCode();
- }
-
- @Override
- public String toString() {
- return name;
- }
-
- private String name;
- private String className;
- }
-
- /**
- * A dependency of one class on another.
- */
- static class SimpleDependency implements Dependency {
- public SimpleDependency(Location origin, Location target) {
- this.origin = origin;
- this.target = target;
- }
-
- public Location getOrigin() {
- return origin;
- }
-
- public Location getTarget() {
- return target;
- }
-
- @Override
- public boolean equals(Object other) {
- if (this == other)
- return true;
- if (!(other instanceof SimpleDependency))
- return false;
- SimpleDependency o = (SimpleDependency) other;
- return (origin.equals(o.origin) && target.equals(o.target));
- }
-
- @Override
- public int hashCode() {
- return origin.hashCode() * 31 + target.hashCode();
- }
-
- @Override
- public String toString() {
- return origin + ":" + target;
- }
-
- private Location origin;
- private Location target;
- }
-
-
- /**
- * This class accepts all dependencies.
- */
- static class DefaultFilter implements Filter {
- private static DefaultFilter instance;
-
- static DefaultFilter instance() {
- if (instance == null)
- instance = new DefaultFilter();
- return instance;
- }
-
- public boolean accepts(Dependency dependency) {
- return true;
- }
- }
-
- /**
- * This class accepts those dependencies whose target's class name matches a
- * regular expression.
- */
- static class TargetRegexFilter implements Filter {
- TargetRegexFilter(Pattern pattern) {
- this.pattern = pattern;
- }
-
- public boolean accepts(Dependency dependency) {
- return pattern.matcher(dependency.getTarget().getClassName()).matches();
- }
-
- private final Pattern pattern;
- }
-
- /**
- * This class accepts those dependencies whose class name is in a given
- * package.
- */
- static class TargetPackageFilter implements Filter {
- TargetPackageFilter(Set packageNames, boolean matchSubpackages) {
- for (String pn: packageNames) {
- if (pn.length() == 0) // implies null check as well
- throw new IllegalArgumentException();
- }
- this.packageNames = packageNames;
- this.matchSubpackages = matchSubpackages;
- }
-
- public boolean accepts(Dependency dependency) {
- String pn = dependency.getTarget().getPackageName();
- if (packageNames.contains(pn))
- return true;
-
- if (matchSubpackages) {
- for (String n: packageNames) {
- if (pn.startsWith(n + "."))
- return true;
- }
- }
-
- return false;
- }
-
- private final Set packageNames;
- private final boolean matchSubpackages;
- }
-
- /**
- * This class identifies class names directly or indirectly in the constant pool.
- */
- static class ClassDependencyFinder extends BasicDependencyFinder {
- public Iterable extends Dependency> findDependencies(ClassFile classfile) {
- Visitor v = new Visitor(classfile);
- for (CPInfo cpInfo: classfile.constant_pool.entries()) {
- v.scan(cpInfo);
- }
- try {
- v.addClass(classfile.super_class);
- v.addClasses(classfile.interfaces);
- v.scan(classfile.attributes);
-
- for (Field f : classfile.fields) {
- v.scan(f.descriptor, f.attributes);
- }
- for (Method m : classfile.methods) {
- v.scan(m.descriptor, m.attributes);
- Exceptions_attribute e =
- (Exceptions_attribute)m.attributes.get(Attribute.Exceptions);
- if (e != null) {
- v.addClasses(e.exception_index_table);
- }
- }
- } catch (ConstantPoolException e) {
- throw new ClassFileError(e);
- }
-
- return v.deps;
- }
- }
-
- /**
- * This class identifies class names in the signatures of classes, fields,
- * and methods in a class.
- */
- static class APIDependencyFinder extends BasicDependencyFinder {
- APIDependencyFinder(int access) {
- switch (access) {
- case AccessFlags.ACC_PUBLIC:
- case AccessFlags.ACC_PROTECTED:
- case AccessFlags.ACC_PRIVATE:
- case 0:
- showAccess = access;
- break;
- default:
- throw new IllegalArgumentException("invalid access 0x"
- + Integer.toHexString(access));
- }
- }
-
- public Iterable extends Dependency> findDependencies(ClassFile classfile) {
- try {
- Visitor v = new Visitor(classfile);
- v.addClass(classfile.super_class);
- v.addClasses(classfile.interfaces);
- // inner classes?
- for (Field f : classfile.fields) {
- if (checkAccess(f.access_flags))
- v.scan(f.descriptor, f.attributes);
- }
- for (Method m : classfile.methods) {
- if (checkAccess(m.access_flags)) {
- v.scan(m.descriptor, m.attributes);
- Exceptions_attribute e =
- (Exceptions_attribute) m.attributes.get(Attribute.Exceptions);
- if (e != null)
- v.addClasses(e.exception_index_table);
- }
- }
- return v.deps;
- } catch (ConstantPoolException e) {
- throw new ClassFileError(e);
- }
- }
-
- boolean checkAccess(AccessFlags flags) {
- // code copied from javap.Options.checkAccess
- boolean isPublic = flags.is(AccessFlags.ACC_PUBLIC);
- boolean isProtected = flags.is(AccessFlags.ACC_PROTECTED);
- boolean isPrivate = flags.is(AccessFlags.ACC_PRIVATE);
- boolean isPackage = !(isPublic || isProtected || isPrivate);
-
- if ((showAccess == AccessFlags.ACC_PUBLIC) && (isProtected || isPrivate || isPackage))
- return false;
- else if ((showAccess == AccessFlags.ACC_PROTECTED) && (isPrivate || isPackage))
- return false;
- else if ((showAccess == 0) && (isPrivate))
- return false;
- else
- return true;
- }
-
- private int showAccess;
- }
-
- static abstract class BasicDependencyFinder implements Finder {
- private Map locations = new HashMap<>();
-
- Location getLocation(String className) {
- Location l = locations.get(className);
- if (l == null)
- locations.put(className, l = new SimpleLocation(className));
- return l;
- }
-
- class Visitor implements ConstantPool.Visitor, Type.Visitor {
- private ConstantPool constant_pool;
- private Location origin;
- Set deps;
-
- Visitor(ClassFile classFile) {
- try {
- constant_pool = classFile.constant_pool;
- origin = getLocation(classFile.getName());
- deps = new HashSet<>();
- } catch (ConstantPoolException e) {
- throw new ClassFileError(e);
- }
- }
-
- void scan(Descriptor d, Attributes attrs) {
- try {
- scan(new Signature(d.index).getType(constant_pool));
- scan(attrs);
- } catch (ConstantPoolException e) {
- throw new ClassFileError(e);
- }
- }
-
- void scan(CPInfo cpInfo) {
- cpInfo.accept(this, null);
- }
-
- void scan(Type t) {
- t.accept(this, null);
- }
-
- void scan(Attributes attrs) {
- try {
- Signature_attribute sa = (Signature_attribute)attrs.get(Attribute.Signature);
- if (sa != null)
- scan(sa.getParsedSignature().getType(constant_pool));
-
- scan((RuntimeVisibleAnnotations_attribute)
- attrs.get(Attribute.RuntimeVisibleAnnotations));
- scan((RuntimeVisibleParameterAnnotations_attribute)
- attrs.get(Attribute.RuntimeVisibleParameterAnnotations));
- } catch (ConstantPoolException e) {
- throw new ClassFileError(e);
- }
- }
-
- private void scan(RuntimeAnnotations_attribute attr) throws ConstantPoolException {
- if (attr == null) {
- return;
- }
- for (int i = 0; i < attr.annotations.length; i++) {
- int index = attr.annotations[i].type_index;
- scan(new Signature(index).getType(constant_pool));
- }
- }
-
- private void scan(RuntimeParameterAnnotations_attribute attr) throws ConstantPoolException {
- if (attr == null) {
- return;
- }
- for (int param = 0; param < attr.parameter_annotations.length; param++) {
- for (int i = 0; i < attr.parameter_annotations[param].length; i++) {
- int index = attr.parameter_annotations[param][i].type_index;
- scan(new Signature(index).getType(constant_pool));
- }
- }
- }
-
- void addClass(int index) throws ConstantPoolException {
- if (index != 0) {
- String name = constant_pool.getClassInfo(index).getBaseName();
- if (name != null)
- addDependency(name);
- }
- }
-
- void addClasses(int[] indices) throws ConstantPoolException {
- for (int i: indices)
- addClass(i);
- }
-
- private void addDependency(String name) {
- deps.add(new SimpleDependency(origin, getLocation(name)));
- }
-
- // ConstantPool.Visitor methods
-
- public Void visitClass(CONSTANT_Class_info info, Void p) {
- try {
- if (info.getName().startsWith("["))
- new Signature(info.name_index).getType(constant_pool).accept(this, null);
- else
- addDependency(info.getBaseName());
- return null;
- } catch (ConstantPoolException e) {
- throw new ClassFileError(e);
- }
- }
-
- public Void visitDouble(CONSTANT_Double_info info, Void p) {
- return null;
- }
-
- public Void visitFieldref(CONSTANT_Fieldref_info info, Void p) {
- return visitRef(info, p);
- }
-
- public Void visitFloat(CONSTANT_Float_info info, Void p) {
- return null;
- }
-
- public Void visitInteger(CONSTANT_Integer_info info, Void p) {
- return null;
- }
-
- public Void visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Void p) {
- return visitRef(info, p);
- }
-
- public Void visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, Void p) {
- return null;
- }
-
- public Void visitLong(CONSTANT_Long_info info, Void p) {
- return null;
- }
-
- public Void visitMethodHandle(CONSTANT_MethodHandle_info info, Void p) {
- return null;
- }
-
- public Void visitMethodType(CONSTANT_MethodType_info info, Void p) {
- return null;
- }
-
- public Void visitMethodref(CONSTANT_Methodref_info info, Void p) {
- return visitRef(info, p);
- }
-
- public Void visitNameAndType(CONSTANT_NameAndType_info info, Void p) {
- try {
- new Signature(info.type_index).getType(constant_pool).accept(this, null);
- return null;
- } catch (ConstantPoolException e) {
- throw new ClassFileError(e);
- }
- }
-
- public Void visitString(CONSTANT_String_info info, Void p) {
- return null;
- }
-
- public Void visitUtf8(CONSTANT_Utf8_info info, Void p) {
- return null;
- }
-
- private Void visitRef(CPRefInfo info, Void p) {
- try {
- visitClass(info.getClassInfo(), p);
- return null;
- } catch (ConstantPoolException e) {
- throw new ClassFileError(e);
- }
- }
-
- // Type.Visitor methods
-
- private void findDependencies(Type t) {
- if (t != null)
- t.accept(this, null);
- }
-
- private void findDependencies(List extends Type> ts) {
- if (ts != null) {
- for (Type t: ts)
- t.accept(this, null);
- }
- }
-
- public Void visitSimpleType(SimpleType type, Void p) {
- return null;
- }
-
- public Void visitArrayType(ArrayType type, Void p) {
- findDependencies(type.elemType);
- return null;
- }
-
- public Void visitMethodType(MethodType type, Void p) {
- findDependencies(type.paramTypes);
- findDependencies(type.returnType);
- findDependencies(type.throwsTypes);
- findDependencies(type.typeParamTypes);
- return null;
- }
-
- public Void visitClassSigType(ClassSigType type, Void p) {
- findDependencies(type.superclassType);
- findDependencies(type.superinterfaceTypes);
- return null;
- }
-
- public Void visitClassType(ClassType type, Void p) {
- findDependencies(type.outerType);
- addDependency(type.getBinaryName());
- findDependencies(type.typeArgs);
- return null;
- }
-
- public Void visitTypeParamType(TypeParamType type, Void p) {
- findDependencies(type.classBound);
- findDependencies(type.interfaceBounds);
- return null;
- }
-
- public Void visitWildcardType(WildcardType type, Void p) {
- findDependencies(type.boundType);
- return null;
- }
- }
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Dependency.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Dependency.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-
-/**
- * A directed relationship between two {@link Dependency.Location Location}s.
- * Subtypes of {@code Dependency} may provide additional detail about the dependency.
- *
- * @see Dependency.Finder
- * @see Dependency.Filter
- * @see Dependencies
- */
-public interface Dependency {
- /**
- * A filter used to select dependencies of interest, and to discard others.
- */
- public interface Filter {
- /**
- * Return true if the dependency is of interest.
- * @param dependency the dependency to be considered
- * @return true if and only if the dependency is of interest.
- */
- boolean accepts(Dependency dependency);
- }
-
- /**
- * An interface for finding the immediate dependencies of a given class file.
- */
- public interface Finder {
- /**
- * Find the immediate dependencies of a given class file.
- * @param classfile the class file to be examined
- * @return the dependencies located in the given class file.
- */
- public Iterable extends Dependency> findDependencies(ClassFile classfile);
- }
-
-
- /**
- * A location somewhere within a class. Subtypes of {@code Location}
- * may be used to provide additional detail about the location.
- */
- public interface Location {
- /**
- * Get the name of the class containing the location.
- * This name will be used to locate the class file for transitive
- * dependency analysis.
- * @return the name of the class containing the location.
- */
- String getName();
-
- /**
- * Get the fully-qualified name of the class containing the location.
- * @return the fully-qualified name of the class containing the location.
- */
- String getClassName();
-
- /**
- * Get the package name of the class containing the location.
- * @return the package name of the class containing the location.
- */
- String getPackageName();
- }
-
-
- /**
- * Get the location that has the dependency.
- * @return the location that has the dependency.
- */
- Location getOrigin();
-
- /**
- * Get the location that is being depended upon.
- * @return the location that is being depended upon.
- */
- Location getTarget();
-}
-
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Deprecated_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Deprecated_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.15.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Deprecated_attribute extends Attribute {
- Deprecated_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- }
-
- public Deprecated_attribute(ConstantPool constant_pool)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.Deprecated));
- }
-
- public Deprecated_attribute(int name_index) {
- super(name_index, 0);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitDeprecated(this, data);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Descriptor.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Descriptor.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.4.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Descriptor {
- public static class InvalidDescriptor extends DescriptorException {
- private static final long serialVersionUID = 1L;
- InvalidDescriptor(String desc) {
- this.desc = desc;
- this.index = -1;
- }
-
- InvalidDescriptor(String desc, int index) {
- this.desc = desc;
- this.index = index;
- }
-
- @Override
- public String getMessage() {
- // i18n
- if (index == -1)
- return "invalid descriptor \"" + desc + "\"";
- else
- return "descriptor is invalid at offset " + index + " in \"" + desc + "\"";
- }
-
- public final String desc;
- public final int index;
-
- }
-
- public Descriptor(ClassReader cr) throws IOException {
- this(cr.readUnsignedShort());
- }
-
- public Descriptor(int index) {
- this.index = index;
-
- }
-
- public String getValue(ConstantPool constant_pool) throws ConstantPoolException {
- return constant_pool.getUTF8Value(index);
- }
-
- public int getParameterCount(ConstantPool constant_pool)
- throws ConstantPoolException, InvalidDescriptor {
- String desc = getValue(constant_pool);
- int end = desc.indexOf(")");
- if (end == -1)
- throw new InvalidDescriptor(desc);
- parse(desc, 0, end + 1);
- return count;
-
- }
-
- public String getParameterTypes(ConstantPool constant_pool)
- throws ConstantPoolException, InvalidDescriptor {
- String desc = getValue(constant_pool);
- int end = desc.indexOf(")");
- if (end == -1)
- throw new InvalidDescriptor(desc);
- return parse(desc, 0, end + 1);
- }
-
- public String getReturnType(ConstantPool constant_pool)
- throws ConstantPoolException, InvalidDescriptor {
- String desc = getValue(constant_pool);
- int end = desc.indexOf(")");
- if (end == -1)
- throw new InvalidDescriptor(desc);
- return parse(desc, end + 1, desc.length());
- }
-
- public String getFieldType(ConstantPool constant_pool)
- throws ConstantPoolException, InvalidDescriptor {
- String desc = getValue(constant_pool);
- return parse(desc, 0, desc.length());
- }
-
- private String parse(String desc, int start, int end)
- throws InvalidDescriptor {
- int p = start;
- StringBuilder sb = new StringBuilder();
- int dims = 0;
- count = 0;
-
- while (p < end) {
- String type;
- char ch;
- switch (ch = desc.charAt(p++)) {
- case '(':
- sb.append('(');
- continue;
-
- case ')':
- sb.append(')');
- continue;
-
- case '[':
- dims++;
- continue;
-
- case 'B':
- type = "byte";
- break;
-
- case 'C':
- type = "char";
- break;
-
- case 'D':
- type = "double";
- break;
-
- case 'F':
- type = "float";
- break;
-
- case 'I':
- type = "int";
- break;
-
- case 'J':
- type = "long";
- break;
-
- case 'L':
- int sep = desc.indexOf(';', p);
- if (sep == -1)
- throw new InvalidDescriptor(desc, p - 1);
- type = desc.substring(p, sep).replace('/', '.');
- p = sep + 1;
- break;
-
- case 'S':
- type = "short";
- break;
-
- case 'Z':
- type = "boolean";
- break;
-
- case 'V':
- type = "void";
- break;
-
- default:
- throw new InvalidDescriptor(desc, p - 1);
- }
-
- if (sb.length() > 1 && sb.charAt(0) == '(')
- sb.append(", ");
- sb.append(type);
- for ( ; dims > 0; dims-- )
- sb.append("[]");
-
- count++;
- }
-
- return sb.toString();
- }
-
- public final int index;
- private int count;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/DescriptorException.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/DescriptorException.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package com.sun.tools.classfile;
-
-/*
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class DescriptorException extends Exception {
- private static final long serialVersionUID = 2411890273788901032L;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/EnclosingMethod_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/EnclosingMethod_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.7.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class EnclosingMethod_attribute extends Attribute {
- EnclosingMethod_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- class_index = cr.readUnsignedShort();
- method_index = cr.readUnsignedShort();
- }
-
- public EnclosingMethod_attribute(ConstantPool constant_pool, int class_index, int method_index)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.EnclosingMethod), class_index, method_index);
- }
-
- public EnclosingMethod_attribute(int name_index, int class_index, int method_index) {
- super(name_index, 4);
- this.class_index = class_index;
- this.method_index = method_index;
- }
-
- public String getClassName(ConstantPool constant_pool) throws ConstantPoolException {
- return constant_pool.getClassInfo(class_index).getName();
- }
-
- public String getMethodName(ConstantPool constant_pool) throws ConstantPoolException {
- if (method_index == 0)
- return "";
- return constant_pool.getNameAndTypeInfo(method_index).getName();
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitEnclosingMethod(this, data);
- }
-
- public final int class_index;
- public final int method_index;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Exceptions_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Exceptions_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.5.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Exceptions_attribute extends Attribute {
- Exceptions_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- number_of_exceptions = cr.readUnsignedShort();
- exception_index_table = new int[number_of_exceptions];
- for (int i = 0; i < number_of_exceptions; i++)
- exception_index_table[i] = cr.readUnsignedShort();
- }
-
- public Exceptions_attribute(ConstantPool constant_pool, int[] exception_index_table)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.Exceptions), exception_index_table);
- }
-
- public Exceptions_attribute(int name_index, int[] exception_index_table) {
- super(name_index, 2 + 2 * exception_index_table.length);
- this.number_of_exceptions = exception_index_table.length;
- this.exception_index_table = exception_index_table;
- }
-
- public String getException(int index, ConstantPool constant_pool) throws ConstantPoolException {
- int exception_index = exception_index_table[index];
- return constant_pool.getClassInfo(exception_index).getName();
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitExceptions(this, data);
- }
-
- public final int number_of_exceptions;
- public final int[] exception_index_table;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Field.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Field.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/*
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Field {
- Field(ClassReader cr) throws IOException {
- access_flags = new AccessFlags(cr);
- name_index = cr.readUnsignedShort();
- descriptor = new Descriptor(cr);
- attributes = new Attributes(cr);
- }
-
- public Field(AccessFlags access_flags,
- int name_index, Descriptor descriptor,
- Attributes attributes) {
- this.access_flags = access_flags;
- this.name_index = name_index;
- this.descriptor = descriptor;
- this.attributes = attributes;
- }
-
- public int byteLength() {
- return 6 + attributes.byteLength();
- }
-
- public String getName(ConstantPool constant_pool) throws ConstantPoolException {
- return constant_pool.getUTF8Value(name_index);
- }
-
- public final AccessFlags access_flags;
- public final int name_index;
- public final Descriptor descriptor;
- public final Attributes attributes;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/InnerClasses_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/InnerClasses_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-import com.sun.tools.classfile.ConstantPool.*;
-
-/**
- * See JVMS, section 4.8.6.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class InnerClasses_attribute extends Attribute {
- InnerClasses_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- number_of_classes = cr.readUnsignedShort();
- classes = new Info[number_of_classes];
- for (int i = 0; i < number_of_classes; i++)
- classes[i] = new Info(cr);
- }
-
- public InnerClasses_attribute(ConstantPool constant_pool, Info[] classes)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.InnerClasses), classes);
- }
-
- public InnerClasses_attribute(int name_index, Info[] classes) {
- super(name_index, 2 + Info.length() * classes.length);
- this.number_of_classes = classes.length;
- this.classes = classes;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitInnerClasses(this, data);
- }
-
- public final int number_of_classes;
- public final Info[] classes;
-
- public static class Info {
- Info(ClassReader cr) throws IOException {
- inner_class_info_index = cr.readUnsignedShort();
- outer_class_info_index = cr.readUnsignedShort();
- inner_name_index = cr.readUnsignedShort();
- inner_class_access_flags = new AccessFlags(cr.readUnsignedShort());
- }
-
- public CONSTANT_Class_info getInnerClassInfo(ConstantPool constant_pool) throws ConstantPoolException {
- if (inner_class_info_index == 0)
- return null;
- return constant_pool.getClassInfo(inner_class_info_index);
- }
-
- public CONSTANT_Class_info getOuterClassInfo(ConstantPool constant_pool) throws ConstantPoolException {
- if (outer_class_info_index == 0)
- return null;
- return constant_pool.getClassInfo(outer_class_info_index);
- }
-
- public String getInnerName(ConstantPool constant_pool) throws ConstantPoolException {
- if (inner_name_index == 0)
- return null;
- return constant_pool.getUTF8Value(inner_name_index);
- }
-
- public static int length() {
- return 8;
- }
-
- public final int inner_class_info_index;
- public final int outer_class_info_index;
- public final int inner_name_index;
- public final AccessFlags inner_class_access_flags;
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Instruction.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Instruction.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,353 +0,0 @@
-/*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.util.Locale;
-
-/**
- * See JVMS, chapter 6.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- *
- * @see Code_attribute#getInstructions
- */
-public class Instruction {
- /** The kind of an instruction, as determined by the position, size and
- * types of its operands. */
- public static enum Kind {
- /** Opcode is not followed by any operands. */
- NO_OPERANDS(1),
- /** Opcode is followed by a byte indicating a type. */
- ATYPE(2),
- /** Opcode is followed by a 2-byte branch offset. */
- BRANCH(3),
- /** Opcode is followed by a 4-byte branch offset. */
- BRANCH_W(5),
- /** Opcode is followed by a signed byte value. */
- BYTE(2),
- /** Opcode is followed by a 1-byte index into the constant pool. */
- CPREF(2),
- /** Opcode is followed by a 2-byte index into the constant pool. */
- CPREF_W(3),
- /** Opcode is followed by a 2-byte index into the constant pool,
- * an unsigned byte value. */
- CPREF_W_UBYTE(4),
- /** Opcode is followed by a 2-byte index into the constant pool.,
- * an unsigned byte value, and a zero byte. */
- CPREF_W_UBYTE_ZERO(5),
- /** Opcode is followed by variable number of operands, depending
- * on the instruction.*/
- DYNAMIC(-1),
- /** Opcode is followed by a 1-byte reference to a local variable. */
- LOCAL(2),
- /** Opcode is followed by a 1-byte reference to a local variable,
- * and a signed byte value. */
- LOCAL_BYTE(3),
- /** Opcode is followed by a signed short value. */
- SHORT(3),
- /** Wide opcode is not followed by any operands. */
- WIDE_NO_OPERANDS(2),
- /** Wide opcode is followed by a 2-byte index into the local variables array. */
- WIDE_LOCAL(4),
- /** Wide opcode is followed by a 2-byte index into the constant pool. */
- WIDE_CPREF_W(4),
- /** Wide opcode is followed by a 2-byte index into the constant pool,
- * and a signed short value. */
- WIDE_CPREF_W_SHORT(6),
- /** Wide opcode is followed by a 2-byte reference to a local variable,
- * and a signed short value. */
- WIDE_LOCAL_SHORT(6),
- /** Opcode was not recognized. */
- UNKNOWN(1);
-
- Kind(int length) {
- this.length = length;
- }
-
- /** The length, in bytes, of this kind of instruction, or -1 is the
- * length depends on the specific instruction. */
- public final int length;
- }
-
- /** A utility visitor to help decode the operands of an instruction.
- * @see Instruction#accept */
- public interface KindVisitor {
- /** See {@link Kind#NO_OPERANDS}, {@link Kind#WIDE_NO_OPERANDS}. */
- R visitNoOperands(Instruction instr, P p);
- /** See {@link Kind#ATYPE}. */
- R visitArrayType(Instruction instr, TypeKind kind, P p);
- /** See {@link Kind#BRANCH}, {@link Kind#BRANCH_W}. */
- R visitBranch(Instruction instr, int offset, P p);
- /** See {@link Kind#CPREF}, {@link Kind#CPREF_W}, {@link Kind#WIDE_CPREF_W}. */
- R visitConstantPoolRef(Instruction instr, int index, P p);
- /** See {@link Kind#CPREF_W_UBYTE}, {@link Kind#CPREF_W_UBYTE_ZERO}, {@link Kind#WIDE_CPREF_W_SHORT}. */
- R visitConstantPoolRefAndValue(Instruction instr, int index, int value, P p);
- /** See {@link Kind#LOCAL}, {@link Kind#WIDE_LOCAL}. */
- R visitLocal(Instruction instr, int index, P p);
- /** See {@link Kind#LOCAL_BYTE}. */
- R visitLocalAndValue(Instruction instr, int index, int value, P p);
- /** See {@link Kind#DYNAMIC}. */
- R visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets, P p);
- /** See {@link Kind#DYNAMIC}. */
- R visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets, P p);
- /** See {@link Kind#BYTE}, {@link Kind#SHORT}. */
- R visitValue(Instruction instr, int value, P p);
- /** Instruction is unrecognized. */
- R visitUnknown(Instruction instr, P p);
-
- }
-
- /** The kind of primitive array type to create.
- * See JVMS chapter 6, newarray. */
- public static enum TypeKind {
- T_BOOLEAN(4, "boolean"),
- T_CHAR(5, "char"),
- T_FLOAT(6, "float"),
- T_DOUBLE(7, "double"),
- T_BYTE(8, "byte"),
- T_SHORT(9, "short"),
- T_INT (10, "int"),
- T_LONG (11, "long");
- TypeKind(int value, String name) {
- this.value = value;
- this.name = name;
- }
-
- public static TypeKind get(int value) {
- switch (value) {
- case 4: return T_BOOLEAN;
- case 5: return T_CHAR;
- case 6: return T_FLOAT;
- case 7: return T_DOUBLE;
- case 8: return T_BYTE;
- case 9: return T_SHORT;
- case 10: return T_INT;
- case 11: return T_LONG;
- default: return null;
- }
- }
-
- public final int value;
- public final String name;
- }
-
- /** An instruction is defined by its position in a bytecode array. */
- public Instruction(byte[] bytes, int pc) {
- this.bytes = bytes;
- this.pc = pc;
- }
-
- /** Get the position of the instruction within the bytecode array. */
- public int getPC() {
- return pc;
- }
-
- /** Get a byte value, relative to the start of this instruction. */
- public int getByte(int offset) {
- return bytes[pc + offset];
- }
-
- /** Get an unsigned byte value, relative to the start of this instruction. */
- public int getUnsignedByte(int offset) {
- return getByte(offset) & 0xff;
- }
-
- /** Get a 2-byte value, relative to the start of this instruction. */
- public int getShort(int offset) {
- return (getByte(offset) << 8) | getUnsignedByte(offset + 1);
- }
-
- /** Get a unsigned 2-byte value, relative to the start of this instruction. */
- public int getUnsignedShort(int offset) {
- return getShort(offset) & 0xFFFF;
- }
-
- /** Get a 4-byte value, relative to the start of this instruction. */
- public int getInt(int offset) {
- return (getShort(offset) << 16) | (getUnsignedShort(offset + 2));
- }
-
- /** Get the Opcode for this instruction, or null if the instruction is
- * unrecognized. */
- public Opcode getOpcode() {
- int b = getUnsignedByte(0);
- switch (b) {
- case Opcode.NONPRIV:
- case Opcode.PRIV:
- case Opcode.WIDE:
- return Opcode.get(b, getUnsignedByte(1));
- }
- return Opcode.get(b);
- }
-
- /** Get the mnemonic for this instruction, or a default string if the
- * instruction is unrecognized. */
- public String getMnemonic() {
- Opcode opcode = getOpcode();
- if (opcode == null)
- return "bytecode " + getUnsignedByte(0);
- else
- return opcode.toString().toLowerCase(Locale.US);
- }
-
- /** Get the length, in bytes, of this instruction, including the opcode
- * and all its operands. */
- public int length() {
- Opcode opcode = getOpcode();
- if (opcode == null)
- return 1;
-
- switch (opcode) {
- case TABLESWITCH: {
- int pad = align(pc + 1) - pc;
- int low = getInt(pad + 4);
- int high = getInt(pad + 8);
- return pad + 12 + 4 * (high - low + 1);
- }
- case LOOKUPSWITCH: {
- int pad = align(pc + 1) - pc;
- int npairs = getInt(pad + 4);
- return pad + 8 + 8 * npairs;
-
- }
- default:
- return opcode.kind.length;
- }
- }
-
- /** Get the {@link Kind} of this instruction. */
- public Kind getKind() {
- Opcode opcode = getOpcode();
- return (opcode != null ? opcode.kind : Kind.UNKNOWN);
- }
-
- /** Invoke a method on the visitor according to the kind of this
- * instruction, passing in the decoded operands for the instruction. */
- public R accept(KindVisitor visitor, P p) {
- switch (getKind()) {
- case NO_OPERANDS:
- return visitor.visitNoOperands(this, p);
-
- case ATYPE:
- return visitor.visitArrayType(
- this, TypeKind.get(getUnsignedByte(1)), p);
-
- case BRANCH:
- return visitor.visitBranch(this, getShort(1), p);
-
- case BRANCH_W:
- return visitor.visitBranch(this, getInt(1), p);
-
- case BYTE:
- return visitor.visitValue(this, getByte(1), p);
-
- case CPREF:
- return visitor.visitConstantPoolRef(this, getUnsignedByte(1), p);
-
- case CPREF_W:
- return visitor.visitConstantPoolRef(this, getUnsignedShort(1), p);
-
- case CPREF_W_UBYTE:
- case CPREF_W_UBYTE_ZERO:
- return visitor.visitConstantPoolRefAndValue(
- this, getUnsignedShort(1), getUnsignedByte(3), p);
-
- case DYNAMIC: {
- switch (getOpcode()) {
- case TABLESWITCH: {
- int pad = align(pc + 1) - pc;
- int default_ = getInt(pad);
- int low = getInt(pad + 4);
- int high = getInt(pad + 8);
- int[] values = new int[high - low + 1];
- for (int i = 0; i < values.length; i++)
- values[i] = getInt(pad + 12 + 4 * i);
- return visitor.visitTableSwitch(
- this, default_, low, high, values, p);
- }
- case LOOKUPSWITCH: {
- int pad = align(pc + 1) - pc;
- int default_ = getInt(pad);
- int npairs = getInt(pad + 4);
- int[] matches = new int[npairs];
- int[] offsets = new int[npairs];
- for (int i = 0; i < npairs; i++) {
- matches[i] = getInt(pad + 8 + i * 8);
- offsets[i] = getInt(pad + 12 + i * 8);
- }
- return visitor.visitLookupSwitch(
- this, default_, npairs, matches, offsets, p);
- }
- default:
- throw new IllegalStateException();
- }
- }
-
- case LOCAL:
- return visitor.visitLocal(this, getUnsignedByte(1), p);
-
- case LOCAL_BYTE:
- return visitor.visitLocalAndValue(
- this, getUnsignedByte(1), getByte(2), p);
-
- case SHORT:
- return visitor.visitValue(this, getShort(1), p);
-
- case WIDE_NO_OPERANDS:
- return visitor.visitNoOperands(this, p);
-
- case WIDE_LOCAL:
- return visitor.visitLocal(this, getUnsignedShort(2), p);
-
- case WIDE_CPREF_W:
- return visitor.visitConstantPoolRef(this, getUnsignedShort(2), p);
-
- case WIDE_CPREF_W_SHORT:
- return visitor.visitConstantPoolRefAndValue(
- this, getUnsignedShort(2), getUnsignedByte(4), p);
-
- case WIDE_LOCAL_SHORT:
- return visitor.visitLocalAndValue(
- this, getUnsignedShort(2), getShort(4), p);
-
- case UNKNOWN:
- return visitor.visitUnknown(this, p);
-
- default:
- throw new IllegalStateException();
- }
- }
-
- private static int align(int n) {
- return (n + 3) & ~3;
- }
-
- private byte[] bytes;
- private int pc;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/LineNumberTable_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/LineNumberTable_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.12.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class LineNumberTable_attribute extends Attribute {
- LineNumberTable_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- line_number_table_length = cr.readUnsignedShort();
- line_number_table = new Entry[line_number_table_length];
- for (int i = 0; i < line_number_table_length; i++)
- line_number_table[i] = new Entry(cr);
- }
-
- public LineNumberTable_attribute(ConstantPool constant_pool, Entry[] line_number_table)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.LineNumberTable), line_number_table);
- }
-
- public LineNumberTable_attribute(int name_index, Entry[] line_number_table) {
- super(name_index, 2 + line_number_table.length * Entry.length());
- this.line_number_table_length = line_number_table.length;
- this.line_number_table = line_number_table;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitLineNumberTable(this, data);
- }
-
- public final int line_number_table_length;
- public final Entry[] line_number_table;
-
- public static class Entry {
- Entry(ClassReader cr) throws IOException {
- start_pc = cr.readUnsignedShort();
- line_number = cr.readUnsignedShort();
- }
-
- public static int length() {
- return 4;
- }
-
- public final int start_pc;
- public final int line_number;
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/LocalVariableTable_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/LocalVariableTable_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.13.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class LocalVariableTable_attribute extends Attribute {
- LocalVariableTable_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- local_variable_table_length = cr.readUnsignedShort();
- local_variable_table = new Entry[local_variable_table_length];
- for (int i = 0; i < local_variable_table_length; i++)
- local_variable_table[i] = new Entry(cr);
- }
-
- public LocalVariableTable_attribute(ConstantPool constant_pool, Entry[] local_variable_table)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.LocalVariableTable), local_variable_table);
- }
-
- public LocalVariableTable_attribute(int name_index, Entry[] local_variable_table) {
- super(name_index, 2 + local_variable_table.length * Entry.length());
- this.local_variable_table_length = local_variable_table.length;
- this.local_variable_table = local_variable_table;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitLocalVariableTable(this, data);
- }
-
- public final int local_variable_table_length;
- public final Entry[] local_variable_table;
-
- public static class Entry {
- Entry(ClassReader cr) throws IOException {
- start_pc = cr.readUnsignedShort();
- length = cr.readUnsignedShort();
- name_index = cr.readUnsignedShort();
- descriptor_index = cr.readUnsignedShort();
- index = cr.readUnsignedShort();
- }
-
- public static int length() {
- return 10;
- }
-
- public final int start_pc;
- public final int length;
- public final int name_index;
- public final int descriptor_index;
- public final int index;
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/LocalVariableTypeTable_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/LocalVariableTypeTable_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.14.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class LocalVariableTypeTable_attribute extends Attribute {
- LocalVariableTypeTable_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- local_variable_table_length = cr.readUnsignedShort();
- local_variable_table = new Entry[local_variable_table_length];
- for (int i = 0; i < local_variable_table_length; i++)
- local_variable_table[i] = new Entry(cr);
- }
-
- public LocalVariableTypeTable_attribute(ConstantPool constant_pool, Entry[] local_variable_table)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.LocalVariableTypeTable), local_variable_table);
- }
-
- public LocalVariableTypeTable_attribute(int name_index, Entry[] local_variable_table) {
- super(name_index, 2 + local_variable_table.length * Entry.length());
- this.local_variable_table_length = local_variable_table.length;
- this.local_variable_table = local_variable_table;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitLocalVariableTypeTable(this, data);
- }
-
- public final int local_variable_table_length;
- public final Entry[] local_variable_table;
-
- public static class Entry {
- Entry(ClassReader cr) throws IOException {
- start_pc = cr.readUnsignedShort();
- length = cr.readUnsignedShort();
- name_index = cr.readUnsignedShort();
- signature_index = cr.readUnsignedShort();
- index = cr.readUnsignedShort();
- }
-
- public static int length() {
- return 10;
- }
-
- public final int start_pc;
- public final int length;
- public final int name_index;
- public final int signature_index;
- public final int index;
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Method.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Method.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/*
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Method {
- Method(ClassReader cr) throws IOException {
- access_flags = new AccessFlags(cr);
- name_index = cr.readUnsignedShort();
- descriptor = new Descriptor(cr);
- attributes = new Attributes(cr);
- }
-
- public Method(AccessFlags access_flags,
- int name_index, Descriptor descriptor,
- Attributes attributes) {
- this.access_flags = access_flags;
- this.name_index = name_index;
- this.descriptor = descriptor;
- this.attributes = attributes;
- }
-
- public int byteLength() {
- return 6 + attributes.byteLength();
- }
-
- public String getName(ConstantPool constant_pool) throws ConstantPoolException {
- return constant_pool.getUTF8Value(name_index);
- }
-
- public final AccessFlags access_flags;
- public final int name_index;
- public final Descriptor descriptor;
- public final Attributes attributes;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/MethodParameters_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/MethodParameters_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.13.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class MethodParameters_attribute extends Attribute {
-
- public final int method_parameter_table_length;
- public final Entry[] method_parameter_table;
-
- MethodParameters_attribute(ClassReader cr,
- int name_index,
- int length)
- throws IOException {
- super(name_index, length);
-
- method_parameter_table_length = cr.readUnsignedByte();
- method_parameter_table = new Entry[method_parameter_table_length];
- for (int i = 0; i < method_parameter_table_length; i++)
- method_parameter_table[i] = new Entry(cr);
- }
-
- public MethodParameters_attribute(ConstantPool constant_pool,
- Entry[] method_parameter_table)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.MethodParameters),
- method_parameter_table);
- }
-
- public MethodParameters_attribute(int name_index,
- Entry[] method_parameter_table) {
- super(name_index, 1 + method_parameter_table.length * Entry.length());
- this.method_parameter_table_length = method_parameter_table.length;
- this.method_parameter_table = method_parameter_table;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitMethodParameters(this, data);
- }
-
- public static class Entry {
- Entry(ClassReader cr) throws IOException {
- name_index = cr.readUnsignedShort();
- flags = cr.readUnsignedShort();
- }
-
- public static int length() {
- return 6;
- }
-
- public final int name_index;
- public final int flags;
- }
-
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Opcode.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Opcode.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,472 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import static com.sun.tools.classfile.Instruction.Kind.*;
-import static com.sun.tools.classfile.Opcode.Set.*;
-
-/**
- * See JVMS, chapter 6.
- *
- * In addition to providing all the standard opcodes defined in JVMS,
- * this class also provides legacy support for the PicoJava extensions.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public enum Opcode {
- NOP(0x0),
- ACONST_NULL(0x1),
- ICONST_M1(0x2),
- ICONST_0(0x3),
- ICONST_1(0x4),
- ICONST_2(0x5),
- ICONST_3(0x6),
- ICONST_4(0x7),
- ICONST_5(0x8),
- LCONST_0(0x9),
- LCONST_1(0xa),
- FCONST_0(0xb),
- FCONST_1(0xc),
- FCONST_2(0xd),
- DCONST_0(0xe),
- DCONST_1(0xf),
- BIPUSH(0x10, BYTE),
- SIPUSH(0x11, SHORT),
- LDC(0x12, CPREF),
- LDC_W(0x13, CPREF_W),
- LDC2_W(0x14, CPREF_W),
- ILOAD(0x15, LOCAL),
- LLOAD(0x16, LOCAL),
- FLOAD(0x17, LOCAL),
- DLOAD(0x18, LOCAL),
- ALOAD(0x19, LOCAL),
- ILOAD_0(0x1a),
- ILOAD_1(0x1b),
- ILOAD_2(0x1c),
- ILOAD_3(0x1d),
- LLOAD_0(0x1e),
- LLOAD_1(0x1f),
- LLOAD_2(0x20),
- LLOAD_3(0x21),
- FLOAD_0(0x22),
- FLOAD_1(0x23),
- FLOAD_2(0x24),
- FLOAD_3(0x25),
- DLOAD_0(0x26),
- DLOAD_1(0x27),
- DLOAD_2(0x28),
- DLOAD_3(0x29),
- ALOAD_0(0x2a),
- ALOAD_1(0x2b),
- ALOAD_2(0x2c),
- ALOAD_3(0x2d),
- IALOAD(0x2e),
- LALOAD(0x2f),
- FALOAD(0x30),
- DALOAD(0x31),
- AALOAD(0x32),
- BALOAD(0x33),
- CALOAD(0x34),
- SALOAD(0x35),
- ISTORE(0x36, LOCAL),
- LSTORE(0x37, LOCAL),
- FSTORE(0x38, LOCAL),
- DSTORE(0x39, LOCAL),
- ASTORE(0x3a, LOCAL),
- ISTORE_0(0x3b),
- ISTORE_1(0x3c),
- ISTORE_2(0x3d),
- ISTORE_3(0x3e),
- LSTORE_0(0x3f),
- LSTORE_1(0x40),
- LSTORE_2(0x41),
- LSTORE_3(0x42),
- FSTORE_0(0x43),
- FSTORE_1(0x44),
- FSTORE_2(0x45),
- FSTORE_3(0x46),
- DSTORE_0(0x47),
- DSTORE_1(0x48),
- DSTORE_2(0x49),
- DSTORE_3(0x4a),
- ASTORE_0(0x4b),
- ASTORE_1(0x4c),
- ASTORE_2(0x4d),
- ASTORE_3(0x4e),
- IASTORE(0x4f),
- LASTORE(0x50),
- FASTORE(0x51),
- DASTORE(0x52),
- AASTORE(0x53),
- BASTORE(0x54),
- CASTORE(0x55),
- SASTORE(0x56),
- POP(0x57),
- POP2(0x58),
- DUP(0x59),
- DUP_X1(0x5a),
- DUP_X2(0x5b),
- DUP2(0x5c),
- DUP2_X1(0x5d),
- DUP2_X2(0x5e),
- SWAP(0x5f),
- IADD(0x60),
- LADD(0x61),
- FADD(0x62),
- DADD(0x63),
- ISUB(0x64),
- LSUB(0x65),
- FSUB(0x66),
- DSUB(0x67),
- IMUL(0x68),
- LMUL(0x69),
- FMUL(0x6a),
- DMUL(0x6b),
- IDIV(0x6c),
- LDIV(0x6d),
- FDIV(0x6e),
- DDIV(0x6f),
- IREM(0x70),
- LREM(0x71),
- FREM(0x72),
- DREM(0x73),
- INEG(0x74),
- LNEG(0x75),
- FNEG(0x76),
- DNEG(0x77),
- ISHL(0x78),
- LSHL(0x79),
- ISHR(0x7a),
- LSHR(0x7b),
- IUSHR(0x7c),
- LUSHR(0x7d),
- IAND(0x7e),
- LAND(0x7f),
- IOR(0x80),
- LOR(0x81),
- IXOR(0x82),
- LXOR(0x83),
- IINC(0x84, LOCAL_BYTE),
- I2L(0x85),
- I2F(0x86),
- I2D(0x87),
- L2I(0x88),
- L2F(0x89),
- L2D(0x8a),
- F2I(0x8b),
- F2L(0x8c),
- F2D(0x8d),
- D2I(0x8e),
- D2L(0x8f),
- D2F(0x90),
- I2B(0x91),
- I2C(0x92),
- I2S(0x93),
- LCMP(0x94),
- FCMPL(0x95),
- FCMPG(0x96),
- DCMPL(0x97),
- DCMPG(0x98),
- IFEQ(0x99, BRANCH),
- IFNE(0x9a, BRANCH),
- IFLT(0x9b, BRANCH),
- IFGE(0x9c, BRANCH),
- IFGT(0x9d, BRANCH),
- IFLE(0x9e, BRANCH),
- IF_ICMPEQ(0x9f, BRANCH),
- IF_ICMPNE(0xa0, BRANCH),
- IF_ICMPLT(0xa1, BRANCH),
- IF_ICMPGE(0xa2, BRANCH),
- IF_ICMPGT(0xa3, BRANCH),
- IF_ICMPLE(0xa4, BRANCH),
- IF_ACMPEQ(0xa5, BRANCH),
- IF_ACMPNE(0xa6, BRANCH),
- GOTO(0xa7, BRANCH),
- JSR(0xa8, BRANCH),
- RET(0xa9, LOCAL),
- TABLESWITCH(0xaa, DYNAMIC),
- LOOKUPSWITCH(0xab, DYNAMIC),
- IRETURN(0xac),
- LRETURN(0xad),
- FRETURN(0xae),
- DRETURN(0xaf),
- ARETURN(0xb0),
- RETURN(0xb1),
- GETSTATIC(0xb2, CPREF_W),
- PUTSTATIC(0xb3, CPREF_W),
- GETFIELD(0xb4, CPREF_W),
- PUTFIELD(0xb5, CPREF_W),
- INVOKEVIRTUAL(0xb6, CPREF_W),
- INVOKESPECIAL(0xb7, CPREF_W),
- INVOKESTATIC(0xb8, CPREF_W),
- INVOKEINTERFACE(0xb9, CPREF_W_UBYTE_ZERO),
- INVOKEDYNAMIC(0xba, CPREF_W_UBYTE_ZERO),
- NEW(0xbb, CPREF_W),
- NEWARRAY(0xbc, ATYPE),
- ANEWARRAY(0xbd, CPREF_W),
- ARRAYLENGTH(0xbe),
- ATHROW(0xbf),
- CHECKCAST(0xc0, CPREF_W),
- INSTANCEOF(0xc1, CPREF_W),
- MONITORENTER(0xc2),
- MONITOREXIT(0xc3),
- // wide 0xc4
- MULTIANEWARRAY(0xc5, CPREF_W_UBYTE),
- IFNULL(0xc6, BRANCH),
- IFNONNULL(0xc7, BRANCH),
- GOTO_W(0xc8, BRANCH_W),
- JSR_W(0xc9, BRANCH_W),
- // impdep 0xfe: PicoJava nonpriv
- // impdep 0xff: Picojava priv
-
- // wide opcodes
- ILOAD_W(0xc415, WIDE_LOCAL),
- LLOAD_W(0xc416, WIDE_LOCAL),
- FLOAD_W(0xc417, WIDE_LOCAL),
- DLOAD_W(0xc418, WIDE_LOCAL),
- ALOAD_W(0xc419, WIDE_LOCAL),
- ISTORE_W(0xc436, WIDE_LOCAL),
- LSTORE_W(0xc437, WIDE_LOCAL),
- FSTORE_W(0xc438, WIDE_LOCAL),
- DSTORE_W(0xc439, WIDE_LOCAL),
- ASTORE_W(0xc43a, WIDE_LOCAL),
- IINC_W(0xc484, WIDE_LOCAL_SHORT),
- RET_W(0xc4a9, WIDE_LOCAL),
-
- // PicoJava nonpriv instructions
- LOAD_UBYTE(PICOJAVA, 0xfe00),
- LOAD_BYTE(PICOJAVA, 0xfe01),
- LOAD_CHAR(PICOJAVA, 0xfe02),
- LOAD_SHORT(PICOJAVA, 0xfe03),
- LOAD_WORD(PICOJAVA, 0xfe04),
- RET_FROM_SUB(PICOJAVA, 0xfe05),
- LOAD_CHAR_OE(PICOJAVA, 0xfe0a),
- LOAD_SHORT_OE(PICOJAVA, 0xfe0b),
- LOAD_WORD_OE(PICOJAVA, 0xfe0c),
- NCLOAD_UBYTE(PICOJAVA, 0xfe10),
- NCLOAD_BYTE(PICOJAVA, 0xfe11),
- NCLOAD_CHAR(PICOJAVA, 0xfe12),
- NCLOAD_SHORT(PICOJAVA, 0xfe13),
- NCLOAD_WORD(PICOJAVA, 0xfe14),
- NCLOAD_CHAR_OE(PICOJAVA, 0xfe1a),
- NCLOAD_SHORT_OE(PICOJAVA, 0xfe1b),
- NCLOAD_WORD_OE(PICOJAVA, 0xfe1c),
- CACHE_FLUSH(PICOJAVA, 0xfe1e),
- STORE_BYTE(PICOJAVA, 0xfe20),
- STORE_SHORT(PICOJAVA, 0xfe22),
- STORE_WORD(PICOJAVA, 0xfe24),
- STORE_SHORT_OE(PICOJAVA, 0xfe2a),
- STORE_WORD_OE(PICOJAVA, 0xfe2c),
- NCSTORE_BYTE(PICOJAVA, 0xfe30),
- NCSTORE_SHORT(PICOJAVA, 0xfe32),
- NCSTORE_WORD(PICOJAVA, 0xfe34),
- NCSTORE_SHORT_OE(PICOJAVA, 0xfe3a),
- NCSTORE_WORD_OE(PICOJAVA, 0xfe3c),
- ZERO_LINE(PICOJAVA, 0xfe3e),
- ENTER_SYNC_METHOD(PICOJAVA, 0xfe3f),
-
- // PicoJava priv instructions
- PRIV_LOAD_UBYTE(PICOJAVA, 0xff00),
- PRIV_LOAD_BYTE(PICOJAVA, 0xff01),
- PRIV_LOAD_CHAR(PICOJAVA, 0xff02),
- PRIV_LOAD_SHORT(PICOJAVA, 0xff03),
- PRIV_LOAD_WORD(PICOJAVA, 0xff04),
- PRIV_RET_FROM_TRAP(PICOJAVA, 0xff05),
- PRIV_READ_DCACHE_TAG(PICOJAVA, 0xff06),
- PRIV_READ_DCACHE_DATA(PICOJAVA, 0xff07),
- PRIV_LOAD_CHAR_OE(PICOJAVA, 0xff0a),
- PRIV_LOAD_SHORT_OE(PICOJAVA, 0xff0b),
- PRIV_LOAD_WORD_OE(PICOJAVA, 0xff0c),
- PRIV_READ_ICACHE_TAG(PICOJAVA, 0xff0e),
- PRIV_READ_ICACHE_DATA(PICOJAVA, 0xff0f),
- PRIV_NCLOAD_UBYTE(PICOJAVA, 0xff10),
- PRIV_NCLOAD_BYTE(PICOJAVA, 0xff11),
- PRIV_NCLOAD_CHAR(PICOJAVA, 0xff12),
- PRIV_NCLOAD_SHORT(PICOJAVA, 0xff13),
- PRIV_NCLOAD_WORD(PICOJAVA, 0xff14),
- PRIV_POWERDOWN(PICOJAVA, 0xff16),
- PRIV_READ_SCACHE_DATA(PICOJAVA, 0xff17),
- PRIV_NCLOAD_CHAR_OE(PICOJAVA, 0xff1a),
- PRIV_NCLOAD_SHORT_OE(PICOJAVA, 0xff1b),
- PRIV_NCLOAD_WORD_OE(PICOJAVA, 0xff1c),
- PRIV_CACHE_FLUSH(PICOJAVA, 0xff1e),
- PRIV_CACHE_INDEX_FLUSH(PICOJAVA, 0xff1f),
- PRIV_STORE_BYTE(PICOJAVA, 0xff20),
- PRIV_STORE_SHORT(PICOJAVA, 0xff22),
- PRIV_STORE_WORD(PICOJAVA, 0xff24),
- PRIV_WRITE_DCACHE_TAG(PICOJAVA, 0xff26),
- PRIV_WRITE_DCACHE_DATA(PICOJAVA, 0xff27),
- PRIV_STORE_SHORT_OE(PICOJAVA, 0xff2a),
- PRIV_STORE_WORD_OE(PICOJAVA, 0xff2c),
- PRIV_WRITE_ICACHE_TAG(PICOJAVA, 0xff2e),
- PRIV_WRITE_ICACHE_DATA(PICOJAVA, 0xff2f),
- PRIV_NCSTORE_BYTE(PICOJAVA, 0xff30),
- PRIV_NCSTORE_SHORT(PICOJAVA, 0xff32),
- PRIV_NCSTORE_WORD(PICOJAVA, 0xff34),
- PRIV_RESET(PICOJAVA, 0xff36),
- PRIV_WRITE_SCACHE_DATA(PICOJAVA, 0xff37),
- PRIV_NCSTORE_SHORT_OE(PICOJAVA, 0xff3a),
- PRIV_NCSTORE_WORD_OE(PICOJAVA, 0xff3c),
- PRIV_ZERO_LINE(PICOJAVA, 0xff3e),
- PRIV_READ_REG_0(PICOJAVA, 0xff40),
- PRIV_READ_REG_1(PICOJAVA, 0xff41),
- PRIV_READ_REG_2(PICOJAVA, 0xff42),
- PRIV_READ_REG_3(PICOJAVA, 0xff43),
- PRIV_READ_REG_4(PICOJAVA, 0xff44),
- PRIV_READ_REG_5(PICOJAVA, 0xff45),
- PRIV_READ_REG_6(PICOJAVA, 0xff46),
- PRIV_READ_REG_7(PICOJAVA, 0xff47),
- PRIV_READ_REG_8(PICOJAVA, 0xff48),
- PRIV_READ_REG_9(PICOJAVA, 0xff49),
- PRIV_READ_REG_10(PICOJAVA, 0xff4a),
- PRIV_READ_REG_11(PICOJAVA, 0xff4b),
- PRIV_READ_REG_12(PICOJAVA, 0xff4c),
- PRIV_READ_REG_13(PICOJAVA, 0xff4d),
- PRIV_READ_REG_14(PICOJAVA, 0xff4e),
- PRIV_READ_REG_15(PICOJAVA, 0xff4f),
- PRIV_READ_REG_16(PICOJAVA, 0xff50),
- PRIV_READ_REG_17(PICOJAVA, 0xff51),
- PRIV_READ_REG_18(PICOJAVA, 0xff52),
- PRIV_READ_REG_19(PICOJAVA, 0xff53),
- PRIV_READ_REG_20(PICOJAVA, 0xff54),
- PRIV_READ_REG_21(PICOJAVA, 0xff55),
- PRIV_READ_REG_22(PICOJAVA, 0xff56),
- PRIV_READ_REG_23(PICOJAVA, 0xff57),
- PRIV_READ_REG_24(PICOJAVA, 0xff58),
- PRIV_READ_REG_25(PICOJAVA, 0xff59),
- PRIV_READ_REG_26(PICOJAVA, 0xff5a),
- PRIV_READ_REG_27(PICOJAVA, 0xff5b),
- PRIV_READ_REG_28(PICOJAVA, 0xff5c),
- PRIV_READ_REG_29(PICOJAVA, 0xff5d),
- PRIV_READ_REG_30(PICOJAVA, 0xff5e),
- PRIV_READ_REG_31(PICOJAVA, 0xff5f),
- PRIV_WRITE_REG_0(PICOJAVA, 0xff60),
- PRIV_WRITE_REG_1(PICOJAVA, 0xff61),
- PRIV_WRITE_REG_2(PICOJAVA, 0xff62),
- PRIV_WRITE_REG_3(PICOJAVA, 0xff63),
- PRIV_WRITE_REG_4(PICOJAVA, 0xff64),
- PRIV_WRITE_REG_5(PICOJAVA, 0xff65),
- PRIV_WRITE_REG_6(PICOJAVA, 0xff66),
- PRIV_WRITE_REG_7(PICOJAVA, 0xff67),
- PRIV_WRITE_REG_8(PICOJAVA, 0xff68),
- PRIV_WRITE_REG_9(PICOJAVA, 0xff69),
- PRIV_WRITE_REG_10(PICOJAVA, 0xff6a),
- PRIV_WRITE_REG_11(PICOJAVA, 0xff6b),
- PRIV_WRITE_REG_12(PICOJAVA, 0xff6c),
- PRIV_WRITE_REG_13(PICOJAVA, 0xff6d),
- PRIV_WRITE_REG_14(PICOJAVA, 0xff6e),
- PRIV_WRITE_REG_15(PICOJAVA, 0xff6f),
- PRIV_WRITE_REG_16(PICOJAVA, 0xff70),
- PRIV_WRITE_REG_17(PICOJAVA, 0xff71),
- PRIV_WRITE_REG_18(PICOJAVA, 0xff72),
- PRIV_WRITE_REG_19(PICOJAVA, 0xff73),
- PRIV_WRITE_REG_20(PICOJAVA, 0xff74),
- PRIV_WRITE_REG_21(PICOJAVA, 0xff75),
- PRIV_WRITE_REG_22(PICOJAVA, 0xff76),
- PRIV_WRITE_REG_23(PICOJAVA, 0xff77),
- PRIV_WRITE_REG_24(PICOJAVA, 0xff78),
- PRIV_WRITE_REG_25(PICOJAVA, 0xff79),
- PRIV_WRITE_REG_26(PICOJAVA, 0xff7a),
- PRIV_WRITE_REG_27(PICOJAVA, 0xff7b),
- PRIV_WRITE_REG_28(PICOJAVA, 0xff7c),
- PRIV_WRITE_REG_29(PICOJAVA, 0xff7d),
- PRIV_WRITE_REG_30(PICOJAVA, 0xff7e),
- PRIV_WRITE_REG_31(PICOJAVA, 0xff7f);
-
- Opcode(int opcode) {
- this(STANDARD, opcode, NO_OPERANDS);
- }
-
- Opcode(int opcode, Instruction.Kind kind) {
- this(STANDARD, opcode, kind);
- }
-
- Opcode(Set set, int opcode) {
- this(set, opcode, (set == STANDARD ? NO_OPERANDS : WIDE_NO_OPERANDS));
- }
-
- Opcode(Set set, int opcode, Instruction.Kind kind) {
- this.set = set;
- this.opcode = opcode;
- this.kind = kind;
- }
-
- public final Set set;
- public final int opcode;
- public final Instruction.Kind kind;
-
- /** Get the Opcode for a simple standard 1-byte opcode. */
- public static Opcode get(int opcode) {
- return stdOpcodes[opcode];
- }
-
- /** Get the Opcode for 1- or 2-byte opcode. */
- public static Opcode get(int opcodePrefix, int opcode) {
- Opcode[] block = getOpcodeBlock(opcodePrefix);
- return (block == null ? null : block[opcode]);
- }
-
- private static Opcode[] getOpcodeBlock(int opcodePrefix) {
- switch (opcodePrefix) {
- case 0:
- return stdOpcodes;
- case WIDE:
- return wideOpcodes;
- case NONPRIV:
- return nonPrivOpcodes;
- case PRIV:
- return privOpcodes;
- default:
- return null;
- }
-
- }
-
- private static final Opcode[] stdOpcodes = new Opcode[256];
- private static final Opcode[] wideOpcodes = new Opcode[256];
- private static final Opcode[] nonPrivOpcodes = new Opcode[256];
- private static final Opcode[] privOpcodes = new Opcode[256];
- static {
- for (Opcode o: values())
- getOpcodeBlock(o.opcode >> 8)[o.opcode & 0xff] = o;
- }
-
- /** The byte prefix for the wide instructions. */
- public static final int WIDE = 0xc4;
- /** The byte prefix for the PicoJava nonpriv instructions. */
- public static final int NONPRIV = 0xfe;
- /** The byte prefix for the PicoJava priv instructions. */
- public static final int PRIV = 0xff;
-
- public enum Set {
- /** Standard opcodes. */
- STANDARD,
- /** Legacy support for PicoJava opcodes. */
- PICOJAVA }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ReferenceFinder.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/ReferenceFinder.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import com.sun.tools.classfile.Instruction.TypeKind;
-import static com.sun.tools.classfile.ConstantPool.*;
-
-/**
- * A utility class to find where in a ClassFile references
- * a {@link CONSTANT_Methodref_info method},
- * a {@link CONSTANT_InterfaceMethodref_info interface method,
- * or a {@link CONSTANT_Fieldref_info field}.
- */
-public final class ReferenceFinder {
- /**
- * Filter for ReferenceFinder of what constant pool entries for reference lookup.
- */
- public interface Filter {
- /**
- * Decides if the given CPRefInfo entry should be accepted or filtered.
- *
- * @param cpool ConstantPool of the ClassFile being parsed
- * @param cpref constant pool entry representing a reference to
- * a fields method, and interface method.
- * @return {@code true} if accepted; otherwise {@code false}
- */
- boolean accept(ConstantPool cpool, CPRefInfo cpref);
- }
-
- /**
- * Visitor of individual method of a ClassFile that references the
- * accepted field, method, or interface method references.
- */
- public interface Visitor {
- /**
- * Invoked for a method containing one or more accepted CPRefInfo entries
- *
- * @param cf ClassFile
- * @param method Method that does the references the accepted references
- * @param refs Accepted constant pool method/field reference
- */
- void visit(ClassFile cf, Method method, List refConstantPool);
- }
-
- private final Filter filter;
- private final Visitor visitor;
-
- /**
- * Constructor.
- */
- public ReferenceFinder(Filter filter, Visitor visitor) {
- this.filter = Objects.requireNonNull(filter);
- this.visitor = Objects.requireNonNull(visitor);
- }
-
- /**
- * Parses a given ClassFile and invoke the visitor if there is any reference
- * to the constant pool entries referencing field, method, or
- * interface method that are accepted. This method will return
- * {@code true} if there is one or more accepted constant pool entries
- * to lookup; otherwise, it will return {@code false}.
- *
- * @param cf ClassFile
- * @return {@code true} if the given class file is processed to lookup
- * references
- * @throws ConstantPoolException if an error of the constant pool
- */
- public boolean parse(ClassFile cf) throws ConstantPoolException {
- List cprefs = new ArrayList<>();
- int index = 1;
- for (ConstantPool.CPInfo cpInfo : cf.constant_pool.entries()) {
- if (cpInfo.accept(cpVisitor, cf.constant_pool)) {
- cprefs.add(index);
- }
- index += cpInfo.size();
- }
-
- if (cprefs.isEmpty()) {
- return false;
- }
-
- for (Method m : cf.methods) {
- Set ids = new HashSet<>();
- Code_attribute c_attr = (Code_attribute) m.attributes.get(Attribute.Code);
- if (c_attr != null) {
- for (Instruction instr : c_attr.getInstructions()) {
- int idx = instr.accept(codeVisitor, cprefs);
- if (idx > 0) {
- ids.add(idx);
- }
- }
- }
- if (ids.size() > 0) {
- List refInfos = new ArrayList<>(ids.size());
- for (int id : ids) {
- refInfos.add(CPRefInfo.class.cast(cf.constant_pool.get(id)));
- }
- visitor.visit(cf, m, refInfos);
- }
- }
- return true;
- }
-
- private ConstantPool.Visitor cpVisitor =
- new ConstantPool.Visitor()
- {
- public Boolean visitClass(CONSTANT_Class_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, ConstantPool cpool) {
- return filter.accept(cpool, info);
- }
-
- public Boolean visitMethodref(CONSTANT_Methodref_info info, ConstantPool cpool) {
- return filter.accept(cpool, info);
- }
-
- public Boolean visitFieldref(CONSTANT_Fieldref_info info, ConstantPool cpool) {
- return filter.accept(cpool, info);
- }
-
- public Boolean visitDouble(CONSTANT_Double_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitFloat(CONSTANT_Float_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitInteger(CONSTANT_Integer_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitLong(CONSTANT_Long_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitNameAndType(CONSTANT_NameAndType_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitMethodHandle(CONSTANT_MethodHandle_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitMethodType(CONSTANT_MethodType_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitString(CONSTANT_String_info info, ConstantPool cpool) {
- return false;
- }
-
- public Boolean visitUtf8(CONSTANT_Utf8_info info, ConstantPool cpool) {
- return false;
- }
- };
-
- private Instruction.KindVisitor> codeVisitor =
- new Instruction.KindVisitor>()
- {
- public Integer visitNoOperands(Instruction instr, List p) {
- return 0;
- }
-
- public Integer visitArrayType(Instruction instr, TypeKind kind, List p) {
- return 0;
- }
-
- public Integer visitBranch(Instruction instr, int offset, List p) {
- return 0;
- }
-
- public Integer visitConstantPoolRef(Instruction instr, int index, List p) {
- return p.contains(index) ? index : 0;
- }
-
- public Integer visitConstantPoolRefAndValue(Instruction instr, int index, int value, List p) {
- return p.contains(index) ? index : 0;
- }
-
- public Integer visitLocal(Instruction instr, int index, List p) {
- return 0;
- }
-
- public Integer visitLocalAndValue(Instruction instr, int index, int value, List p) {
- return 0;
- }
-
- public Integer visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets, List p) {
- return 0;
- }
-
- public Integer visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets, List p) {
- return 0;
- }
-
- public Integer visitValue(Instruction instr, int value, List p) {
- return 0;
- }
-
- public Integer visitUnknown(Instruction instr, List p) {
- return 0;
- }
- };
-}
-
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.16 and 4.8.17.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public abstract class RuntimeAnnotations_attribute extends Attribute {
- protected RuntimeAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(name_index, length);
- int num_annotations = cr.readUnsignedShort();
- annotations = new Annotation[num_annotations];
- for (int i = 0; i < annotations.length; i++)
- annotations[i] = new Annotation(cr);
- }
-
- protected RuntimeAnnotations_attribute(int name_index, Annotation[] annotations) {
- super(name_index, length(annotations));
- this.annotations = annotations;
- }
-
- private static int length(Annotation[] annos) {
- int n = 2;
- for (Annotation anno: annos)
- n += anno.length();
- return n;
- }
-
- public final Annotation[] annotations;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeInvisibleAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeInvisibleAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.17.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class RuntimeInvisibleAnnotations_attribute extends RuntimeAnnotations_attribute {
- RuntimeInvisibleAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, AttributeException {
- super(cr, name_index, length);
- }
-
- public RuntimeInvisibleAnnotations_attribute(ConstantPool cp, Annotation[] annotations)
- throws ConstantPoolException {
- this(cp.getUTF8Index(Attribute.RuntimeInvisibleAnnotations), annotations);
- }
-
- public RuntimeInvisibleAnnotations_attribute(int name_index, Annotation[] annotations) {
- super(name_index, annotations);
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitRuntimeInvisibleAnnotations(this, p);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeInvisibleParameterAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeInvisibleParameterAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.18.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class RuntimeInvisibleParameterAnnotations_attribute extends RuntimeParameterAnnotations_attribute {
- RuntimeInvisibleParameterAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(cr, name_index, length);
- }
-
- public RuntimeInvisibleParameterAnnotations_attribute(ConstantPool cp, Annotation[][] parameter_annotations)
- throws ConstantPoolException {
- this(cp.getUTF8Index(Attribute.RuntimeInvisibleParameterAnnotations), parameter_annotations);
- }
-
- public RuntimeInvisibleParameterAnnotations_attribute(int name_index, Annotation[][] parameter_annotations) {
- super(name_index, parameter_annotations);
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitRuntimeInvisibleParameterAnnotations(this, p);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeInvisibleTypeAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeInvisibleTypeAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JSR 308 specification, Section 3.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class RuntimeInvisibleTypeAnnotations_attribute extends RuntimeTypeAnnotations_attribute {
- RuntimeInvisibleTypeAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(cr, name_index, length);
- }
-
- public RuntimeInvisibleTypeAnnotations_attribute(ConstantPool cp, TypeAnnotation[] annotations)
- throws ConstantPoolException {
- this(cp.getUTF8Index(Attribute.RuntimeInvisibleTypeAnnotations), annotations);
- }
-
- public RuntimeInvisibleTypeAnnotations_attribute(int name_index, TypeAnnotation[] annotations) {
- super(name_index, annotations);
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitRuntimeInvisibleTypeAnnotations(this, p);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeParameterAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeParameterAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.18 and 4.8.19.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public abstract class RuntimeParameterAnnotations_attribute extends Attribute {
- RuntimeParameterAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(name_index, length);
- int num_parameters = cr.readUnsignedByte();
- parameter_annotations = new Annotation[num_parameters][];
- for (int p = 0; p < parameter_annotations.length; p++) {
- int num_annotations = cr.readUnsignedShort();
- Annotation[] annotations = new Annotation[num_annotations];
- for (int i = 0; i < num_annotations; i++)
- annotations[i] = new Annotation(cr);
- parameter_annotations[p] = annotations;
- }
- }
-
- protected RuntimeParameterAnnotations_attribute(int name_index, Annotation[][] parameter_annotations) {
- super(name_index, length(parameter_annotations));
- this.parameter_annotations = parameter_annotations;
- }
-
- private static int length(Annotation[][] anno_arrays) {
- int n = 1;
- for (Annotation[] anno_array: anno_arrays) {
- n += 2;
- for (Annotation anno: anno_array)
- n += anno.length();
- }
- return n;
- }
-
- public final Annotation[][] parameter_annotations;
-}
-
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeTypeAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeTypeAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JSR 308 specification, Section 3.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public abstract class RuntimeTypeAnnotations_attribute extends Attribute {
- protected RuntimeTypeAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(name_index, length);
- int num_annotations = cr.readUnsignedShort();
- annotations = new TypeAnnotation[num_annotations];
- for (int i = 0; i < annotations.length; i++)
- annotations[i] = new TypeAnnotation(cr);
- }
-
- protected RuntimeTypeAnnotations_attribute(int name_index, TypeAnnotation[] annotations) {
- super(name_index, length(annotations));
- this.annotations = annotations;
- }
-
- private static int length(TypeAnnotation[] annos) {
- int n = 2;
- for (TypeAnnotation anno: annos)
- n += anno.length();
- return n;
- }
-
- public final TypeAnnotation[] annotations;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeVisibleAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeVisibleAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.16.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class RuntimeVisibleAnnotations_attribute extends RuntimeAnnotations_attribute {
- RuntimeVisibleAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(cr, name_index, length);
- }
-
- public RuntimeVisibleAnnotations_attribute(ConstantPool cp, Annotation[] annotations)
- throws ConstantPoolException {
- this(cp.getUTF8Index(Attribute.RuntimeVisibleAnnotations), annotations);
- }
-
- public RuntimeVisibleAnnotations_attribute(int name_index, Annotation[] annotations) {
- super(name_index, annotations);
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitRuntimeVisibleAnnotations(this, p);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeVisibleParameterAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeVisibleParameterAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.18.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class RuntimeVisibleParameterAnnotations_attribute extends RuntimeParameterAnnotations_attribute {
- RuntimeVisibleParameterAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(cr, name_index, length);
- }
-
- public RuntimeVisibleParameterAnnotations_attribute(ConstantPool cp, Annotation[][] parameter_annotations)
- throws ConstantPoolException {
- this(cp.getUTF8Index(Attribute.RuntimeVisibleParameterAnnotations), parameter_annotations);
- }
-
- public RuntimeVisibleParameterAnnotations_attribute(int name_index, Annotation[][] parameter_annotations) {
- super(name_index, parameter_annotations);
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitRuntimeVisibleParameterAnnotations(this, p);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeVisibleTypeAnnotations_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/RuntimeVisibleTypeAnnotations_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JSR 308 specification, Section 3.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class RuntimeVisibleTypeAnnotations_attribute extends RuntimeTypeAnnotations_attribute {
- RuntimeVisibleTypeAnnotations_attribute(ClassReader cr, int name_index, int length)
- throws IOException, Annotation.InvalidAnnotation {
- super(cr, name_index, length);
- }
-
- public RuntimeVisibleTypeAnnotations_attribute(ConstantPool cp, TypeAnnotation[] annotations)
- throws ConstantPoolException {
- this(cp.getUTF8Index(Attribute.RuntimeVisibleTypeAnnotations), annotations);
- }
-
- public RuntimeVisibleTypeAnnotations_attribute(int name_index, TypeAnnotation[] annotations) {
- super(name_index, annotations);
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitRuntimeVisibleTypeAnnotations(this, p);
- }
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Signature.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Signature.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,272 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.util.ArrayList;
-import java.util.List;
-import com.sun.tools.classfile.Type.*;
-
-/**
- * See JVMS 4.4.4.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Signature extends Descriptor {
-
- public Signature(int index) {
- super(index);
- }
-
- public Type getType(ConstantPool constant_pool) throws ConstantPoolException {
- if (type == null)
- type = parse(getValue(constant_pool));
- return type;
- }
-
- @Override
- public int getParameterCount(ConstantPool constant_pool) throws ConstantPoolException {
- MethodType m = (MethodType) getType(constant_pool);
- return m.paramTypes.size();
- }
-
- @Override
- public String getParameterTypes(ConstantPool constant_pool) throws ConstantPoolException {
- MethodType m = (MethodType) getType(constant_pool);
- StringBuilder sb = new StringBuilder();
- sb.append("(");
- String sep = "";
- for (Type paramType: m.paramTypes) {
- sb.append(sep);
- sb.append(paramType);
- sep = ", ";
- }
- sb.append(")");
- return sb.toString();
- }
-
- @Override
- public String getReturnType(ConstantPool constant_pool) throws ConstantPoolException {
- MethodType m = (MethodType) getType(constant_pool);
- return m.returnType.toString();
- }
-
- @Override
- public String getFieldType(ConstantPool constant_pool) throws ConstantPoolException {
- return getType(constant_pool).toString();
- }
-
- private Type parse(String sig) {
- this.sig = sig;
- sigp = 0;
-
- List typeParamTypes = null;
- if (sig.charAt(sigp) == '<')
- typeParamTypes = parseTypeParamTypes();
-
- if (sig.charAt(sigp) == '(') {
- List paramTypes = parseTypeSignatures(')');
- Type returnType = parseTypeSignature();
- List throwsTypes = null;
- while (sigp < sig.length() && sig.charAt(sigp) == '^') {
- sigp++;
- if (throwsTypes == null)
- throwsTypes = new ArrayList<>();
- throwsTypes.add(parseTypeSignature());
- }
- return new MethodType(typeParamTypes, paramTypes, returnType, throwsTypes);
- } else {
- Type t = parseTypeSignature();
- if (typeParamTypes == null && sigp == sig.length())
- return t;
- Type superclass = t;
- List superinterfaces = null;
- while (sigp < sig.length()) {
- if (superinterfaces == null)
- superinterfaces = new ArrayList<>();
- superinterfaces.add(parseTypeSignature());
- }
- return new ClassSigType(typeParamTypes, superclass, superinterfaces);
-
- }
- }
-
- private Type parseTypeSignature() {
- switch (sig.charAt(sigp)) {
- case 'B':
- sigp++;
- return new SimpleType("byte");
-
- case 'C':
- sigp++;
- return new SimpleType("char");
-
- case 'D':
- sigp++;
- return new SimpleType("double");
-
- case 'F':
- sigp++;
- return new SimpleType("float");
-
- case 'I':
- sigp++;
- return new SimpleType("int");
-
- case 'J':
- sigp++;
- return new SimpleType("long");
-
- case 'L':
- return parseClassTypeSignature();
-
- case 'S':
- sigp++;
- return new SimpleType("short");
-
- case 'T':
- return parseTypeVariableSignature();
-
- case 'V':
- sigp++;
- return new SimpleType("void");
-
- case 'Z':
- sigp++;
- return new SimpleType("boolean");
-
- case '[':
- sigp++;
- return new ArrayType(parseTypeSignature());
-
- case '*':
- sigp++;
- return new WildcardType();
-
- case '+':
- sigp++;
- return new WildcardType(WildcardType.Kind.EXTENDS, parseTypeSignature());
-
- case '-':
- sigp++;
- return new WildcardType(WildcardType.Kind.SUPER, parseTypeSignature());
-
- default:
- throw new IllegalStateException(debugInfo());
- }
- }
-
- private List parseTypeSignatures(char term) {
- sigp++;
- List types = new ArrayList<>();
- while (sig.charAt(sigp) != term)
- types.add(parseTypeSignature());
- sigp++;
- return types;
- }
-
- private Type parseClassTypeSignature() {
- assert sig.charAt(sigp) == 'L';
- sigp++;
- return parseClassTypeSignatureRest();
- }
-
- private Type parseClassTypeSignatureRest() {
- StringBuilder sb = new StringBuilder();
- List argTypes = null;
- ClassType t = null;
- char sigch ;
-
- do {
- switch (sigch = sig.charAt(sigp)) {
- case '<':
- argTypes = parseTypeSignatures('>');
- break;
-
- case '.':
- case ';':
- sigp++;
- t = new ClassType(t, sb.toString(), argTypes);
- sb.setLength(0);
- argTypes = null;
- break;
-
- default:
- sigp++;
- sb.append(sigch);
- break;
- }
- } while (sigch != ';');
-
- return t;
- }
-
- private List parseTypeParamTypes() {
- assert sig.charAt(sigp) == '<';
- sigp++;
- List types = new ArrayList<>();
- while (sig.charAt(sigp) != '>')
- types.add(parseTypeParamType());
- sigp++;
- return types;
- }
-
- private TypeParamType parseTypeParamType() {
- int sep = sig.indexOf(":", sigp);
- String name = sig.substring(sigp, sep);
- Type classBound = null;
- List interfaceBounds = null;
- sigp = sep + 1;
- if (sig.charAt(sigp) != ':')
- classBound = parseTypeSignature();
- while (sig.charAt(sigp) == ':') {
- sigp++;
- if (interfaceBounds == null)
- interfaceBounds = new ArrayList<>();
- interfaceBounds.add(parseTypeSignature());
- }
- return new TypeParamType(name, classBound, interfaceBounds);
- }
-
- private Type parseTypeVariableSignature() {
- sigp++;
- int sep = sig.indexOf(';', sigp);
- Type t = new SimpleType(sig.substring(sigp, sep));
- sigp = sep + 1;
- return t;
- }
-
- private String debugInfo() {
- return sig.substring(0, sigp) + "!" + sig.charAt(sigp) + "!" + sig.substring(sigp+1);
- }
-
- private String sig;
- private int sigp;
-
- private Type type;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Signature_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Signature_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.9.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class Signature_attribute extends Attribute {
- Signature_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- signature_index = cr.readUnsignedShort();
- }
-
- public Signature_attribute(ConstantPool constant_pool, int signature_index)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.Signature), signature_index);
- }
-
- public Signature_attribute(int name_index, int signature_index) {
- super(name_index, 2);
- this.signature_index = signature_index;
- }
-
- public String getSignature(ConstantPool constant_pool) throws ConstantPoolException {
- return constant_pool.getUTF8Value(signature_index);
- }
-
- public Signature getParsedSignature() {
- return new Signature(signature_index);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitSignature(this, data);
- }
-
- public final int signature_index;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.nio.charset.Charset;
-
-/**
- * See JVMS, section 4.8.15.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class SourceDebugExtension_attribute extends Attribute {
- private static final Charset UTF8 = Charset.forName("UTF-8");
-
- SourceDebugExtension_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- debug_extension = new byte[attribute_length];
- cr.readFully(debug_extension);
- }
-
- public SourceDebugExtension_attribute(ConstantPool constant_pool, byte[] debug_extension)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.SourceDebugExtension), debug_extension);
- }
-
- public SourceDebugExtension_attribute(int name_index, byte[] debug_extension) {
- super(name_index, debug_extension.length);
- this.debug_extension = debug_extension;
- }
-
- public String getValue() {
- return new String(debug_extension, UTF8);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitSourceDebugExtension(this, data);
- }
-
- public final byte[] debug_extension;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/SourceFile_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/SourceFile_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.10.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class SourceFile_attribute extends Attribute {
- SourceFile_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- sourcefile_index = cr.readUnsignedShort();
- }
-
- public SourceFile_attribute(ConstantPool constant_pool, int sourcefile_index)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.SourceFile), sourcefile_index);
- }
-
- public SourceFile_attribute(int name_index, int sourcefile_index) {
- super(name_index, 2);
- this.sourcefile_index = sourcefile_index;
- }
-
- public String getSourceFile(ConstantPool constant_pool) throws ConstantPoolException {
- return constant_pool.getUTF8Value(sourcefile_index);
- }
-
- public R accept(Visitor visitor, P p) {
- return visitor.visitSourceFile(this, p);
- }
-
- public final int sourcefile_index;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/SourceID_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/SourceID_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class SourceID_attribute extends Attribute {
-
- SourceID_attribute(ClassReader cr, int name_index, int length) throws IOException {
- super(name_index, length);
- sourceID_index = cr.readUnsignedShort();
- }
-
- public SourceID_attribute(ConstantPool constant_pool, int sourceID_index)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.SourceID), sourceID_index);
- }
-
- public SourceID_attribute(int name_index, int sourceID_index) {
- super(name_index, 2);
- this.sourceID_index = sourceID_index;
- }
-
- String getSourceID(ConstantPool constant_pool) throws ConstantPoolException {
- return constant_pool.getUTF8Value(sourceID_index);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitSourceID(this, data);
- }
-
- public final int sourceID_index;
-}
diff -r 43ddd58a5a56 -r 2b3f379840f0 langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/StackMapTable_attribute.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/StackMapTable_attribute.java Wed May 27 11:27:42 2015 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,380 +0,0 @@
-/*
- * Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.classfile;
-
-import java.io.IOException;
-
-/**
- * See JVMS, section 4.8.4.
- *
- * This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.
- */
-public class StackMapTable_attribute extends Attribute {
- static class InvalidStackMap extends AttributeException {
- private static final long serialVersionUID = -5659038410855089780L;
- InvalidStackMap(String msg) {
- super(msg);
- }
- }
-
- StackMapTable_attribute(ClassReader cr, int name_index, int length)
- throws IOException, InvalidStackMap {
- super(name_index, length);
- number_of_entries = cr.readUnsignedShort();
- entries = new stack_map_frame[number_of_entries];
- for (int i = 0; i < number_of_entries; i++)
- entries[i] = stack_map_frame.read(cr);
- }
-
- public StackMapTable_attribute(ConstantPool constant_pool, stack_map_frame[] entries)
- throws ConstantPoolException {
- this(constant_pool.getUTF8Index(Attribute.StackMapTable), entries);
- }
-
- public StackMapTable_attribute(int name_index, stack_map_frame[] entries) {
- super(name_index, length(entries));
- this.number_of_entries = entries.length;
- this.entries = entries;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visitStackMapTable(this, data);
- }
-
- static int length(stack_map_frame[] entries) {
- int n = 2;
- for (stack_map_frame entry: entries)
- n += entry.length();
- return n;
- }
-
- public final int number_of_entries;
- public final stack_map_frame entries[];
-
- public static abstract class stack_map_frame {
- static stack_map_frame read(ClassReader cr)
- throws IOException, InvalidStackMap {
- int frame_type = cr.readUnsignedByte();
- if (frame_type <= 63)
- return new same_frame(frame_type);
- else if (frame_type <= 127)
- return new same_locals_1_stack_item_frame(frame_type, cr);
- else if (frame_type <= 246)
- throw new Error("unknown frame_type " + frame_type);
- else if (frame_type == 247)
- return new same_locals_1_stack_item_frame_extended(frame_type, cr);
- else if (frame_type <= 250)
- return new chop_frame(frame_type, cr);
- else if (frame_type == 251)
- return new same_frame_extended(frame_type, cr);
- else if (frame_type <= 254)
- return new append_frame(frame_type, cr);
- else
- return new full_frame(frame_type, cr);
- }
-
- protected stack_map_frame(int frame_type) {
- this.frame_type = frame_type;
- }
-
- public int length() {
- return 1;
- }
-
- public abstract int getOffsetDelta();
-
- public abstract R accept(Visitor visitor, D data);
-
- public final int frame_type;
-
- public static interface Visitor {
- R visit_same_frame(same_frame frame, P p);
- R visit_same_locals_1_stack_item_frame(same_locals_1_stack_item_frame frame, P p);
- R visit_same_locals_1_stack_item_frame_extended(same_locals_1_stack_item_frame_extended frame, P p);
- R visit_chop_frame(chop_frame frame, P p);
- R visit_same_frame_extended(same_frame_extended frame, P p);
- R visit_append_frame(append_frame frame, P p);
- R visit_full_frame(full_frame frame, P p);
- }
- }
-
- public static class same_frame extends stack_map_frame {
- same_frame(int frame_type) {
- super(frame_type);
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visit_same_frame(this, data);
- }
-
- public int getOffsetDelta() {
- return frame_type;
- }
- }
-
- public static class same_locals_1_stack_item_frame extends stack_map_frame {
- same_locals_1_stack_item_frame(int frame_type, ClassReader cr)
- throws IOException, InvalidStackMap {
- super(frame_type);
- stack = new verification_type_info[1];
- stack[0] = verification_type_info.read(cr);
- }
-
- @Override
- public int length() {
- return super.length() + stack[0].length();
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visit_same_locals_1_stack_item_frame(this, data);
- }
-
- public int getOffsetDelta() {
- return frame_type - 64;
- }
-
- public final verification_type_info[] stack;
- }
-
- public static class same_locals_1_stack_item_frame_extended extends stack_map_frame {
- same_locals_1_stack_item_frame_extended(int frame_type, ClassReader cr)
- throws IOException, InvalidStackMap {
- super(frame_type);
- offset_delta = cr.readUnsignedShort();
- stack = new verification_type_info[1];
- stack[0] = verification_type_info.read(cr);
- }
-
- @Override
- public int length() {
- return super.length() + 2 + stack[0].length();
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visit_same_locals_1_stack_item_frame_extended(this, data);
- }
-
- public int getOffsetDelta() {
- return offset_delta;
- }
-
- public final int offset_delta;
- public final verification_type_info[] stack;
- }
-
- public static class chop_frame extends stack_map_frame {
- chop_frame(int frame_type, ClassReader cr) throws IOException {
- super(frame_type);
- offset_delta = cr.readUnsignedShort();
- }
-
- @Override
- public int length() {
- return super.length() + 2;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visit_chop_frame(this, data);
- }
-
- public int getOffsetDelta() {
- return offset_delta;
- }
-
- public final int offset_delta;
- }
-
- public static class same_frame_extended extends stack_map_frame {
- same_frame_extended(int frame_type, ClassReader cr) throws IOException {
- super(frame_type);
- offset_delta = cr.readUnsignedShort();
- }
-
- @Override
- public int length() {
- return super.length() + 2;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visit_same_frame_extended(this, data);
- }
-
- public int getOffsetDelta() {
- return offset_delta;
- }
-
- public final int offset_delta;
- }
-
- public static class append_frame extends stack_map_frame {
- append_frame(int frame_type, ClassReader cr)
- throws IOException, InvalidStackMap {
- super(frame_type);
- offset_delta = cr.readUnsignedShort();
- locals = new verification_type_info[frame_type - 251];
- for (int i = 0; i < locals.length; i++)
- locals[i] = verification_type_info.read(cr);
- }
-
- @Override
- public int length() {
- int n = super.length() + 2;
- for (verification_type_info local: locals)
- n += local.length();
- return n;
- }
-
- public R accept(Visitor visitor, D data) {
- return visitor.visit_append_frame(this, data);
- }
-
- public int getOffsetDelta() {
- return offset_delta;
- }
-
- public final int offset_delta;
- public final verification_type_info[] locals;
- }
-
- public static class full_frame extends stack_map_frame {
- full_frame(int frame_type, ClassReader cr)
- throws IOException, InvalidStackMap {
- super(frame_type);
- offset_delta = cr.readUnsignedShort();
- number_of_locals = cr.readUnsignedShort();
- locals = new verification_type_info[number_of_locals];
- for (int i = 0; i < locals.length; i++)
- locals[i] = verification_type_info.read(cr);
- number_of_stack_items = cr.readUnsignedShort();
- stack = new verification_type_info[number_of_stack_items];
- for (int i = 0; i < stack.length; i++)
- stack[i] = verification_type_info.read(cr);
- }
-
- @Override
- public int length() {
- int n = super.length() + 2;
- for (verification_type_info local: locals)
- n += local.length();
- n += 2;
- for (verification_type_info item: stack)
- n += item.length();
- return n;
- }
-
- public R accept(Visitor