--- old/src/share/classes/jdk/internal/org/objectweb/asm/ClassWriter.java Thu Apr 25 10:08:40 2013 +++ new/src/share/classes/jdk/internal/org/objectweb/asm/ClassWriter.java Thu Apr 25 10:08:39 2013 @@ -95,12 +95,18 @@ public static final int COMPUTE_FRAMES = 2; /** - * Pseudo access flag to distinguish between the synthetic attribute and - * the synthetic access flag. + * Pseudo access flag to distinguish between the synthetic attribute and the + * synthetic access flag. */ static final int ACC_SYNTHETIC_ATTRIBUTE = 0x40000; /** + * Factor to convert from ACC_SYNTHETIC_ATTRIBUTE to Opcode.ACC_SYNTHETIC. + */ + static final int TO_ACC_SYNTHETIC = ACC_SYNTHETIC_ATTRIBUTE + / Opcodes.ACC_SYNTHETIC; + + /** * The type of instructions without any argument. */ static final int NOARG_INSN = 0; @@ -267,8 +273,8 @@ /** * The base value for all CONSTANT_MethodHandle constant pool items. - * Internally, ASM store the 9 variations of CONSTANT_MethodHandle into - * 9 different items. + * Internally, ASM store the 9 variations of CONSTANT_MethodHandle into 9 + * different items. */ static final int HANDLE_BASE = 20; @@ -295,9 +301,8 @@ static final int TYPE_MERGED = 32; /** - * The type of BootstrapMethods items. These items are stored in a - * special class attribute named BootstrapMethods and - * not in the constant pool. + * The type of BootstrapMethods items. These items are stored in a special + * class attribute named BootstrapMethods and not in the constant pool. */ static final int BSM = 33; @@ -356,10 +361,10 @@ * necessarily be stored in the constant pool. This type table is used by * the control flow and data flow analysis algorithm used to compute stack * map frames from scratch. This array associates to each index i - * the Item whose index is i. All Item objects stored in this - * array are also stored in the {@link #items} hash table. These two arrays - * allow to retrieve an Item from its index or, conversely, to get the index - * of an Item from its value. Each Item stores an internal name in its + * the Item whose index is i. All Item objects stored in this array + * are also stored in the {@link #items} hash table. These two arrays allow + * to retrieve an Item from its index or, conversely, to get the index of an + * Item from its value. Each Item stores an internal name in its * {@link Item#strVal1} field. */ Item[] typeTable; @@ -441,6 +446,16 @@ private AnnotationWriter ianns; /** + * The runtime visible type annotations of this class. + */ + private AnnotationWriter tanns; + + /** + * The runtime invisible type annotations of this class. + */ + private AnnotationWriter itanns; + + /** * The non standard attributes of this class. */ private Attribute attrs; @@ -468,8 +483,8 @@ /** * The fields of this class. These fields are stored in a linked list of * {@link FieldWriter} objects, linked to each other by their - * {@link FieldWriter#fv} field. This field stores the first element of - * this list. + * {@link FieldWriter#fv} field. This field stores the first element of this + * list. */ FieldWriter firstField; @@ -476,8 +491,8 @@ /** * The fields of this class. These fields are stored in a linked list of * {@link FieldWriter} objects, linked to each other by their - * {@link FieldWriter#fv} field. This field stores the last element of - * this list. + * {@link FieldWriter#fv} field. This field stores the last element of this + * list. */ FieldWriter lastField; @@ -492,8 +507,8 @@ /** * The methods of this class. These methods are stored in a linked list of * {@link MethodWriter} objects, linked to each other by their - * {@link MethodWriter#mv} field. This field stores the last element of - * this list. + * {@link MethodWriter#mv} field. This field stores the last element of this + * list. */ MethodWriter lastMethod; @@ -613,11 +628,13 @@ /** * Constructs a new {@link ClassWriter} object. * - * @param flags option flags that can be used to modify the default behavior - * of this class. See {@link #COMPUTE_MAXS}, {@link #COMPUTE_FRAMES}. + * @param flags + * option flags that can be used to modify the default behavior + * of this class. See {@link #COMPUTE_MAXS}, + * {@link #COMPUTE_FRAMES}. */ public ClassWriter(final int flags) { - super(Opcodes.ASM4); + super(Opcodes.ASM5); index = 1; pool = new ByteVector(); items = new Item[256]; @@ -635,26 +652,32 @@ * "mostly add" bytecode transformations. These optimizations are the * following: * - * + * * - * @param classReader the {@link ClassReader} used to read the original - * class. It will be used to copy the entire constant pool from the - * original class and also to copy other fragments of original - * bytecode where applicable. - * @param flags option flags that can be used to modify the default behavior - * of this class. These option flags do not affect methods that - * are copied as is in the new class. This means that the maximum - * stack size nor the stack frames will be computed for these - * methods. See {@link #COMPUTE_MAXS}, {@link #COMPUTE_FRAMES}. + * @param classReader + * the {@link ClassReader} used to read the original class. It + * will be used to copy the entire constant pool from the + * original class and also to copy other fragments of original + * bytecode where applicable. + * @param flags + * option flags that can be used to modify the default behavior + * of this class. These option flags do not affect methods + * that are copied as is in the new class. This means that the + * maximum stack size nor the stack frames will be computed for + * these methods. See {@link #COMPUTE_MAXS}, + * {@link #COMPUTE_FRAMES}. */ public ClassWriter(final ClassReader classReader, final int flags) { this(flags); @@ -667,14 +690,9 @@ // ------------------------------------------------------------------------ @Override - public final void visit( - final int version, - final int access, - final String name, - final String signature, - final String superName, - final String[] interfaces) - { + public final void visit(final int version, final int access, + final String name, final String signature, final String superName, + final String[] interfaces) { this.version = version; this.access = access; this.name = newClass(name); @@ -703,11 +721,8 @@ } @Override - public final void visitOuterClass( - final String owner, - final String name, - final String desc) - { + public final void visitOuterClass(final String owner, final String name, + final String desc) { enclosingMethodOwner = newClass(owner); if (name != null && desc != null) { enclosingMethod = newNameType(name, desc); @@ -715,10 +730,8 @@ } @Override - public final AnnotationVisitor visitAnnotation( - final String desc, - final boolean visible) - { + public final AnnotationVisitor visitAnnotation(final String desc, + final boolean visible) { if (!ClassReader.ANNOTATIONS) { return null; } @@ -737,6 +750,29 @@ } @Override + public final AnnotationVisitor visitTypeAnnotation(int typeRef, + TypePath typePath, final String desc, final boolean visible) { + if (!ClassReader.ANNOTATIONS) { + return null; + } + ByteVector bv = new ByteVector(); + // write target_type and target_info + AnnotationWriter.putTarget(typeRef, typePath, bv); + // write type, and reserve space for values count + bv.putShort(newUTF8(desc)).putShort(0); + AnnotationWriter aw = new AnnotationWriter(this, true, bv, bv, + bv.length - 2); + if (visible) { + aw.next = tanns; + tanns = aw; + } else { + aw.next = itanns; + itanns = aw; + } + return aw; + } + + @Override public final void visitAttribute(final Attribute attr) { attr.next = attrs; attrs = attr; @@ -743,12 +779,8 @@ } @Override - public final void visitInnerClass( - final String name, - final String outerName, - final String innerName, - final int access) - { + public final void visitInnerClass(final String name, + final String outerName, final String innerName, final int access) { if (innerClasses == null) { innerClasses = new ByteVector(); } @@ -760,32 +792,16 @@ } @Override - public final FieldVisitor visitField( - final int access, - final String name, - final String desc, - final String signature, - final Object value) - { + public final FieldVisitor visitField(final int access, final String name, + final String desc, final String signature, final Object value) { return new FieldWriter(this, access, name, desc, signature, value); } @Override - public final MethodVisitor visitMethod( - final int access, - final String name, - final String desc, - final String signature, - final String[] exceptions) - { - return new MethodWriter(this, - access, - name, - desc, - signature, - exceptions, - computeMaxs, - computeFrames); + public final MethodVisitor visitMethod(final int access, final String name, + final String desc, final String signature, final String[] exceptions) { + return new MethodWriter(this, access, name, desc, signature, + exceptions, computeMaxs, computeFrames); } @Override @@ -802,7 +818,7 @@ * @return the bytecode of the class that was build with this class writer. */ public byte[] toByteArray() { - if (index > Short.MAX_VALUE) { + if (index > 0xFFFF) { throw new RuntimeException("Class file too large!"); } // computes the real size of the bytecode of this class @@ -822,8 +838,9 @@ mb = (MethodWriter) mb.mv; } int attributeCount = 0; - if (bootstrapMethods != null) { // we put it as first argument in order - // to improve a bit ClassReader.copyBootstrapMethods + if (bootstrapMethods != null) { + // we put it as first attribute in order to improve a bit + // ClassReader.copyBootstrapMethods ++attributeCount; size += 8 + bootstrapMethods.length; newUTF8("BootstrapMethods"); @@ -853,12 +870,13 @@ size += 6; newUTF8("Deprecated"); } - if ((access & Opcodes.ACC_SYNTHETIC) != 0 - && ((version & 0xFFFF) < Opcodes.V1_5 || (access & ACC_SYNTHETIC_ATTRIBUTE) != 0)) - { - ++attributeCount; - size += 6; - newUTF8("Synthetic"); + if ((access & Opcodes.ACC_SYNTHETIC) != 0) { + if ((version & 0xFFFF) < Opcodes.V1_5 + || (access & ACC_SYNTHETIC_ATTRIBUTE) != 0) { + ++attributeCount; + size += 6; + newUTF8("Synthetic"); + } } if (innerClasses != null) { ++attributeCount; @@ -875,6 +893,16 @@ size += 8 + ianns.getSize(); newUTF8("RuntimeInvisibleAnnotations"); } + if (ClassReader.ANNOTATIONS && tanns != null) { + ++attributeCount; + size += 8 + tanns.getSize(); + newUTF8("RuntimeVisibleTypeAnnotations"); + } + if (ClassReader.ANNOTATIONS && itanns != null) { + ++attributeCount; + size += 8 + itanns.getSize(); + newUTF8("RuntimeInvisibleTypeAnnotations"); + } if (attrs != null) { attributeCount += attrs.getCount(); size += attrs.getSize(this, null, 0, -1, -1); @@ -885,9 +913,8 @@ ByteVector out = new ByteVector(size); out.putInt(0xCAFEBABE).putInt(version); out.putShort(index).putByteArray(pool.data, 0, pool.length); - int mask = Opcodes.ACC_DEPRECATED - | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE - | ((access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) / (ClassWriter.ACC_SYNTHETIC_ATTRIBUTE / Opcodes.ACC_SYNTHETIC)); + int mask = Opcodes.ACC_DEPRECATED | ACC_SYNTHETIC_ATTRIBUTE + | ((access & ACC_SYNTHETIC_ATTRIBUTE) / TO_ACC_SYNTHETIC); out.putShort(access & ~mask).putShort(name).putShort(superName); out.putShort(interfaceCount); for (int i = 0; i < interfaceCount; ++i) { @@ -906,9 +933,10 @@ mb = (MethodWriter) mb.mv; } out.putShort(attributeCount); - if (bootstrapMethods != null) { // should be the first class attribute ? + if (bootstrapMethods != null) { out.putShort(newUTF8("BootstrapMethods")); - out.putInt(bootstrapMethods.length + 2).putShort(bootstrapMethodsCount); + out.putInt(bootstrapMethods.length + 2).putShort( + bootstrapMethodsCount); out.putByteArray(bootstrapMethods.data, 0, bootstrapMethods.length); } if (ClassReader.SIGNATURES && signature != 0) { @@ -929,10 +957,11 @@ if ((access & Opcodes.ACC_DEPRECATED) != 0) { out.putShort(newUTF8("Deprecated")).putInt(0); } - if ((access & Opcodes.ACC_SYNTHETIC) != 0 - && ((version & 0xFFFF) < Opcodes.V1_5 || (access & ACC_SYNTHETIC_ATTRIBUTE) != 0)) - { - out.putShort(newUTF8("Synthetic")).putInt(0); + if ((access & Opcodes.ACC_SYNTHETIC) != 0) { + if ((version & 0xFFFF) < Opcodes.V1_5 + || (access & ACC_SYNTHETIC_ATTRIBUTE) != 0) { + out.putShort(newUTF8("Synthetic")).putInt(0); + } } if (innerClasses != null) { out.putShort(newUTF8("InnerClasses")); @@ -947,6 +976,14 @@ out.putShort(newUTF8("RuntimeInvisibleAnnotations")); ianns.put(out); } + if (ClassReader.ANNOTATIONS && tanns != null) { + out.putShort(newUTF8("RuntimeVisibleTypeAnnotations")); + tanns.put(out); + } + if (ClassReader.ANNOTATIONS && itanns != null) { + out.putShort(newUTF8("RuntimeInvisibleTypeAnnotations")); + itanns.put(out); + } if (attrs != null) { attrs.put(this, null, 0, -1, -1, out); } @@ -966,10 +1003,11 @@ * Adds a number or string constant to the constant pool of the class being * build. Does nothing if the constant pool already contains a similar item. * - * @param cst the value of the constant to be added to the constant pool. - * This parameter must be an {@link Integer}, a {@link Float}, a - * {@link Long}, a {@link Double}, a {@link String} or a - * {@link Type}. + * @param cst + * the value of the constant to be added to the constant pool. + * This parameter must be an {@link Integer}, a {@link Float}, a + * {@link Long}, a {@link Double}, a {@link String} or a + * {@link Type}. * @return a new or already existing constant item with the given value. */ Item newConstItem(final Object cst) { @@ -1002,12 +1040,12 @@ } else if (cst instanceof Type) { Type t = (Type) cst; int s = t.getSort(); - if (s == Type.ARRAY) { - return newClassItem(t.getDescriptor()); - } else if (s == Type.OBJECT) { + if (s == Type.OBJECT) { return newClassItem(t.getInternalName()); - } else { // s == Type.METHOD + } else if (s == Type.METHOD) { return newMethodTypeItem(t.getDescriptor()); + } else { // s == primitive type or array + return newClassItem(t.getDescriptor()); } } else if (cst instanceof Handle) { Handle h = (Handle) cst; @@ -1023,9 +1061,10 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param cst the value of the constant to be added to the constant pool. - * This parameter must be an {@link Integer}, a {@link Float}, a - * {@link Long}, a {@link Double} or a {@link String}. + * @param cst + * the value of the constant to be added to the constant pool. + * This parameter must be an {@link Integer}, a {@link Float}, a + * {@link Long}, a {@link Double} or a {@link String}. * @return the index of a new or already existing constant item with the * given value. */ @@ -1039,7 +1078,8 @@ * method is intended for {@link Attribute} sub classes, and is normally not * needed by class generators or adapters. * - * @param value the String value. + * @param value + * the String value. * @return the index of a new or already existing UTF8 item. */ public int newUTF8(final String value) { @@ -1059,7 +1099,8 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param value the internal name of the class. + * @param value + * the internal name of the class. * @return a new or already existing class reference item. */ Item newClassItem(final String value) { @@ -1079,7 +1120,8 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param value the internal name of the class. + * @param value + * the internal name of the class. * @return the index of a new or already existing class reference item. */ public int newClass(final String value) { @@ -1092,7 +1134,8 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param methodDesc method descriptor of the method type. + * @param methodDesc + * method descriptor of the method type. * @return a new or already existing method type reference item. */ Item newMethodTypeItem(final String methodDesc) { @@ -1112,7 +1155,8 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param methodDesc method descriptor of the method type. + * @param methodDesc + * method descriptor of the method type. * @return the index of a new or already existing method type reference * item. */ @@ -1126,23 +1170,24 @@ * intended for {@link Attribute} sub classes, and is normally not needed by * class generators or adapters. * - * @param tag the kind of this handle. Must be {@link Opcodes#H_GETFIELD}, - * {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD}, - * {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL}, - * {@link Opcodes#H_INVOKESTATIC}, {@link Opcodes#H_INVOKESPECIAL}, - * {@link Opcodes#H_NEWINVOKESPECIAL} or - * {@link Opcodes#H_INVOKEINTERFACE}. - * @param owner the internal name of the field or method owner class. - * @param name the name of the field or method. - * @param desc the descriptor of the field or method. + * @param tag + * the kind of this handle. Must be {@link Opcodes#H_GETFIELD}, + * {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD}, + * {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL}, + * {@link Opcodes#H_INVOKESTATIC}, + * {@link Opcodes#H_INVOKESPECIAL}, + * {@link Opcodes#H_NEWINVOKESPECIAL} or + * {@link Opcodes#H_INVOKEINTERFACE}. + * @param owner + * the internal name of the field or method owner class. + * @param name + * the name of the field or method. + * @param desc + * the descriptor of the field or method. * @return a new or an already existing method type reference item. */ - Item newHandleItem( - final int tag, - final String owner, - final String name, - final String desc) - { + Item newHandleItem(final int tag, final String owner, final String name, + final String desc) { key4.set(HANDLE_BASE + tag, owner, name, desc); Item result = get(key4); if (result == null) { @@ -1149,10 +1194,10 @@ if (tag <= Opcodes.H_PUTSTATIC) { put112(HANDLE, tag, newField(owner, name, desc)); } else { - put112(HANDLE, tag, newMethod(owner, - name, - desc, - tag == Opcodes.H_INVOKEINTERFACE)); + put112(HANDLE, + tag, + newMethod(owner, name, desc, + tag == Opcodes.H_INVOKEINTERFACE)); } result = new Item(index++, key4); put(result); @@ -1161,29 +1206,30 @@ } /** - * Adds a handle to the constant pool of the class being - * build. Does nothing if the constant pool already contains a similar item. - * This method is intended for {@link Attribute} sub classes, and is - * normally not needed by class generators or adapters. + * Adds a handle to the constant pool of the class being build. Does nothing + * if the constant pool already contains a similar item. This method is + * intended for {@link Attribute} sub classes, and is normally not needed by + * class generators or adapters. * - * @param tag the kind of this handle. Must be {@link Opcodes#H_GETFIELD}, - * {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD}, - * {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL}, - * {@link Opcodes#H_INVOKESTATIC}, {@link Opcodes#H_INVOKESPECIAL}, - * {@link Opcodes#H_NEWINVOKESPECIAL} or - * {@link Opcodes#H_INVOKEINTERFACE}. - * @param owner the internal name of the field or method owner class. - * @param name the name of the field or method. - * @param desc the descriptor of the field or method. + * @param tag + * the kind of this handle. Must be {@link Opcodes#H_GETFIELD}, + * {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD}, + * {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL}, + * {@link Opcodes#H_INVOKESTATIC}, + * {@link Opcodes#H_INVOKESPECIAL}, + * {@link Opcodes#H_NEWINVOKESPECIAL} or + * {@link Opcodes#H_INVOKEINTERFACE}. + * @param owner + * the internal name of the field or method owner class. + * @param name + * the name of the field or method. + * @param desc + * the descriptor of the field or method. * @return the index of a new or already existing method type reference * item. */ - public int newHandle( - final int tag, - final String owner, - final String name, - final String desc) - { + public int newHandle(final int tag, final String owner, final String name, + final String desc) { return newHandleItem(tag, owner, name, desc).index; } @@ -1193,19 +1239,19 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param name name of the invoked method. - * @param desc descriptor of the invoke method. - * @param bsm the bootstrap method. - * @param bsmArgs the bootstrap method constant arguments. + * @param name + * name of the invoked method. + * @param desc + * descriptor of the invoke method. + * @param bsm + * the bootstrap method. + * @param bsmArgs + * the bootstrap method constant arguments. * * @return a new or an already existing invokedynamic type reference item. */ - Item newInvokeDynamicItem( - final String name, - final String desc, - final Handle bsm, - final Object... bsmArgs) - { + Item newInvokeDynamicItem(final String name, final String desc, + final Handle bsm, final Object... bsmArgs) { // cache for performance ByteVector bootstrapMethods = this.bootstrapMethods; if (bootstrapMethods == null) { @@ -1215,9 +1261,7 @@ int position = bootstrapMethods.length; // record current position int hashCode = bsm.hashCode(); - bootstrapMethods.putShort(newHandle(bsm.tag, - bsm.owner, - bsm.name, + bootstrapMethods.putShort(newHandle(bsm.tag, bsm.owner, bsm.name, bsm.desc)); int argsLength = bsmArgs.length; @@ -1279,20 +1323,20 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param name name of the invoked method. - * @param desc descriptor of the invoke method. - * @param bsm the bootstrap method. - * @param bsmArgs the bootstrap method constant arguments. + * @param name + * name of the invoked method. + * @param desc + * descriptor of the invoke method. + * @param bsm + * the bootstrap method. + * @param bsmArgs + * the bootstrap method constant arguments. * - * @return the index of a new or already existing invokedynamic - * reference item. + * @return the index of a new or already existing invokedynamic reference + * item. */ - public int newInvokeDynamic( - final String name, - final String desc, - final Handle bsm, - final Object... bsmArgs) - { + public int newInvokeDynamic(final String name, final String desc, + final Handle bsm, final Object... bsmArgs) { return newInvokeDynamicItem(name, desc, bsm, bsmArgs).index; } @@ -1300,13 +1344,15 @@ * Adds a field reference to the constant pool of the class being build. * Does nothing if the constant pool already contains a similar item. * - * @param owner the internal name of the field's owner class. - * @param name the field's name. - * @param desc the field's descriptor. + * @param owner + * the internal name of the field's owner class. + * @param name + * the field's name. + * @param desc + * the field's descriptor. * @return a new or already existing field reference item. */ - Item newFieldItem(final String owner, final String name, final String desc) - { + Item newFieldItem(final String owner, final String name, final String desc) { key3.set(FIELD, owner, name, desc); Item result = get(key3); if (result == null) { @@ -1323,13 +1369,15 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param owner the internal name of the field's owner class. - * @param name the field's name. - * @param desc the field's descriptor. + * @param owner + * the internal name of the field's owner class. + * @param name + * the field's name. + * @param desc + * the field's descriptor. * @return the index of a new or already existing field reference item. */ - public int newField(final String owner, final String name, final String desc) - { + public int newField(final String owner, final String name, final String desc) { return newFieldItem(owner, name, desc).index; } @@ -1337,18 +1385,18 @@ * Adds a method reference to the constant pool of the class being build. * Does nothing if the constant pool already contains a similar item. * - * @param owner the internal name of the method's owner class. - * @param name the method's name. - * @param desc the method's descriptor. - * @param itf true if owner is an interface. + * @param owner + * the internal name of the method's owner class. + * @param name + * the method's name. + * @param desc + * the method's descriptor. + * @param itf + * true if owner is an interface. * @return a new or already existing method reference item. */ - Item newMethodItem( - final String owner, - final String name, - final String desc, - final boolean itf) - { + Item newMethodItem(final String owner, final String name, + final String desc, final boolean itf) { int type = itf ? IMETH : METH; key3.set(type, owner, name, desc); Item result = get(key3); @@ -1366,18 +1414,18 @@ * This method is intended for {@link Attribute} sub classes, and is * normally not needed by class generators or adapters. * - * @param owner the internal name of the method's owner class. - * @param name the method's name. - * @param desc the method's descriptor. - * @param itf true if owner is an interface. + * @param owner + * the internal name of the method's owner class. + * @param name + * the method's name. + * @param desc + * the method's descriptor. + * @param itf + * true if owner is an interface. * @return the index of a new or already existing method reference item. */ - public int newMethod( - final String owner, - final String name, - final String desc, - final boolean itf) - { + public int newMethod(final String owner, final String name, + final String desc, final boolean itf) { return newMethodItem(owner, name, desc, itf).index; } @@ -1385,7 +1433,8 @@ * Adds an integer to the constant pool of the class being build. Does * nothing if the constant pool already contains a similar item. * - * @param value the int value. + * @param value + * the int value. * @return a new or already existing int item. */ Item newInteger(final int value) { @@ -1403,7 +1452,8 @@ * Adds a float to the constant pool of the class being build. Does nothing * if the constant pool already contains a similar item. * - * @param value the float value. + * @param value + * the float value. * @return a new or already existing float item. */ Item newFloat(final float value) { @@ -1421,7 +1471,8 @@ * Adds a long to the constant pool of the class being build. Does nothing * if the constant pool already contains a similar item. * - * @param value the long value. + * @param value + * the long value. * @return a new or already existing long item. */ Item newLong(final long value) { @@ -1440,7 +1491,8 @@ * Adds a double to the constant pool of the class being build. Does nothing * if the constant pool already contains a similar item. * - * @param value the double value. + * @param value + * the double value. * @return a new or already existing double item. */ Item newDouble(final double value) { @@ -1459,7 +1511,8 @@ * Adds a string to the constant pool of the class being build. Does nothing * if the constant pool already contains a similar item. * - * @param value the String value. + * @param value + * the String value. * @return a new or already existing string item. */ private Item newString(final String value) { @@ -1479,8 +1532,10 @@ * method is intended for {@link Attribute} sub classes, and is normally not * needed by class generators or adapters. * - * @param name a name. - * @param desc a type descriptor. + * @param name + * a name. + * @param desc + * a type descriptor. * @return the index of a new or already existing name and type item. */ public int newNameType(final String name, final String desc) { @@ -1491,8 +1546,10 @@ * Adds a name and type to the constant pool of the class being build. Does * nothing if the constant pool already contains a similar item. * - * @param name a name. - * @param desc a type descriptor. + * @param name + * a name. + * @param desc + * a type descriptor. * @return a new or already existing name and type item. */ Item newNameTypeItem(final String name, final String desc) { @@ -1510,7 +1567,8 @@ * Adds the given internal name to {@link #typeTable} and returns its index. * Does nothing if the type table already contains this internal name. * - * @param type the internal name to be added to the type table. + * @param type + * the internal name to be added to the type table. * @return the index of this internal name in the type table. */ int addType(final String type) { @@ -1527,9 +1585,11 @@ * index. This method is used for UNINITIALIZED types, made of an internal * name and a bytecode offset. * - * @param type the internal name to be added to the type table. - * @param offset the bytecode offset of the NEW instruction that created - * this UNINITIALIZED type value. + * @param type + * the internal name to be added to the type table. + * @param offset + * the bytecode offset of the NEW instruction that created this + * UNINITIALIZED type value. * @return the index of this internal name in the type table. */ int addUninitializedType(final String type, final int offset) { @@ -1547,7 +1607,8 @@ /** * Adds the given Item to {@link #typeTable}. * - * @param item the value to be added to the type table. + * @param item + * the value to be added to the type table. * @return the added Item, which a new Item instance with the same value as * the given Item. */ @@ -1573,8 +1634,10 @@ * {@link #items} hash table to speedup future calls with the same * parameters. * - * @param type1 index of an internal name in {@link #typeTable}. - * @param type2 index of an internal name in {@link #typeTable}. + * @param type1 + * index of an internal name in {@link #typeTable}. + * @param type2 + * index of an internal name in {@link #typeTable}. * @return the index of the common super type of the two given types. */ int getMergedType(final int type1, final int type2) { @@ -1594,7 +1657,7 @@ /** * Returns the common super type of the two given types. The default - * implementation of this method loads the two given classes and uses + * implementation of this method loads the two given classes and uses * the java.lang.Class methods to find the common super class. It can be * overridden to compute this common super type in other ways, in particular * without actually loading any class, or to take into account the class @@ -1601,13 +1664,14 @@ * that is currently being generated by this ClassWriter, which can of * course not be loaded since it is under construction. * - * @param type1 the internal name of a class. - * @param type2 the internal name of another class. + * @param type1 + * the internal name of a class. + * @param type2 + * the internal name of another class. * @return the internal name of the common super class of the two given * classes. */ - protected String getCommonSuperClass(final String type1, final String type2) - { + protected String getCommonSuperClass(final String type1, final String type2) { Class c, d; ClassLoader classLoader = getClass().getClassLoader(); try { @@ -1636,7 +1700,8 @@ * Returns the constant pool's hash table item which is equal to the given * item. * - * @param key a constant pool item. + * @param key + * a constant pool item. * @return the constant pool's hash table item which is equal to the given * item, or null if there is no such item. */ @@ -1652,7 +1717,8 @@ * Puts the given item in the constant pool's hash table. The hash table * must not already contains this item. * - * @param i the item to be added to the constant pool's hash table. + * @param i + * the item to be added to the constant pool's hash table. */ private void put(final Item i) { if (index + typeCount > threshold) { @@ -1680,9 +1746,12 @@ /** * Puts one byte and two shorts into the constant pool. * - * @param b a byte. - * @param s1 a short. - * @param s2 another short. + * @param b + * a byte. + * @param s1 + * a short. + * @param s2 + * another short. */ private void put122(final int b, final int s1, final int s2) { pool.put12(b, s1).putShort(s2); @@ -1691,9 +1760,12 @@ /** * Puts two bytes and one short into the constant pool. * - * @param b1 a byte. - * @param b2 another byte. - * @param s a short. + * @param b1 + * a byte. + * @param b2 + * another byte. + * @param s + * a short. */ private void put112(final int b1, final int b2, final int s) { pool.put11(b1, b2).putShort(s);