From 749b9cb3ca8e4680fca4252b0d782b7154eccb75 Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Mon, 1 Oct 2018 16:10:02 -0700 Subject: [PATCH] More fixes for 1.9.2 - update to more recent JDT to pickup Nestmates fix - bcel updated for NestMembers/NestHost attributes - testcases for nestmates --- .../org/aspectj/apache/bcel/Constants.java | 10 +- .../apache/bcel/classfile/Attribute.java | 5 + .../apache/bcel/classfile/ClassVisitor.java | 4 + .../apache/bcel/classfile/NestHost.java | 118 +++++++++++++ .../apache/bcel/classfile/NestMembers.java | 131 ++++++++++++++ .../bcel/verifier/DescendingVisitor.java | 70 +++++++- .../bcel/verifier/EmptyClassVisitor.java | 162 ++++++++++++------ lib/asm/asm-6.2.1.renamed.jar | Bin 112951 -> 0 bytes lib/asm/asm-7.0-beta.20181001.jar | Bin 0 -> 113586 bytes lib/asm/asm-7.0-beta.renamed.jar | Bin 0 -> 113466 bytes lib/asm/build.xml | 4 +- lib/bcel/bcel-src.zip | Bin 342916 -> 347077 bytes lib/bcel/bcel-verifier-src.zip | Bin 183459 -> 183555 bytes lib/bcel/bcel-verifier.jar | Bin 167052 -> 167239 bytes lib/bcel/bcel.jar | Bin 321337 -> 324569 bytes .../org/aspectj/tools/ajc/AjcTestCase.java | 2 +- .../jdtcore-for-aspectj-src.zip | Bin 5267868 -> 5264132 bytes org.eclipse.jdt.core/jdtcore-for-aspectj.jar | Bin 10690732 -> 10691581 bytes tests/bugs180/415957/MyAspect.aj | 2 +- tests/bugs180/415957/MyClass.java | 2 +- tests/bugs180/415957/Resource.java | 4 + tests/bugs192/535156/DemoApp.class | Bin 0 -> 2210 bytes tests/bugs192/535156/X.class | Bin 0 -> 1732 bytes tests/bugs192/nestmates/Outer.java | 9 + tests/bugs192/nestmates/Outer2$Inner2.class | Bin 0 -> 919 bytes tests/bugs192/nestmates/Outer2.class | Bin 0 -> 1381 bytes tests/bugs192/nestmates/Outer2.java | 21 +++ tests/bugs192/nestmates/X.class | Bin 0 -> 2894 bytes .../systemtest/ajc192/Ajc192Tests.java | 26 +++ .../org/aspectj/systemtest/ajc192/ajc192.xml | 17 ++ .../weaver/bcel/asm/StackMapAdder.java | 4 +- 31 files changed, 527 insertions(+), 64 deletions(-) create mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java create mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java delete mode 100644 lib/asm/asm-6.2.1.renamed.jar create mode 100644 lib/asm/asm-7.0-beta.20181001.jar create mode 100644 lib/asm/asm-7.0-beta.renamed.jar create mode 100644 tests/bugs180/415957/Resource.java create mode 100644 tests/bugs192/535156/DemoApp.class create mode 100644 tests/bugs192/535156/X.class create mode 100644 tests/bugs192/nestmates/Outer.java create mode 100644 tests/bugs192/nestmates/Outer2$Inner2.class create mode 100644 tests/bugs192/nestmates/Outer2.class create mode 100644 tests/bugs192/nestmates/Outer2.java create mode 100644 tests/bugs192/nestmates/X.class diff --git a/bcel-builder/src/org/aspectj/apache/bcel/Constants.java b/bcel-builder/src/org/aspectj/apache/bcel/Constants.java index 9ef04f4ff..c75496527 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/Constants.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/Constants.java @@ -651,8 +651,12 @@ public interface Constants { public static final byte ATTR_MODULE = 23; public static final byte ATTR_MODULE_PACKAGES = 24; public static final byte ATTR_MODULE_MAIN_CLASS = 25; - - public static final short KNOWN_ATTRIBUTES = 26; + + // J11: + public static final byte ATTR_NEST_HOST = 26; + public static final byte ATTR_NEST_MEMBERS = 27; + + public static final short KNOWN_ATTRIBUTES = 28; public static final String[] ATTRIBUTE_NAMES = { "SourceFile", "ConstantValue", "Code", "Exceptions", "LineNumberTable", "LocalVariableTable", @@ -660,7 +664,7 @@ public interface Constants { "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", "RuntimeVisibleParameterAnnotations", "RuntimeInvisibleParameterAnnotations", "LocalVariableTypeTable", "EnclosingMethod", "AnnotationDefault","BootstrapMethods", "RuntimeVisibleTypeAnnotations", "RuntimeInvisibleTypeAnnotations", - "MethodParameters", "Module", "ModulePackages", "ModuleMainClass" + "MethodParameters", "Module", "ModulePackages", "ModuleMainClass", "NestHost", "NestMembers" }; /** diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java index edc8d22c9..daeb59a38 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java @@ -173,6 +173,10 @@ public abstract class Attribute implements Cloneable, Node, Serializable { return new ModulePackages(idx, len, file, cpool); case Constants.ATTR_MODULE_MAIN_CLASS: return new ModuleMainClass(idx, len, file, cpool); + case Constants.ATTR_NEST_HOST: + return new NestHost(idx, len, file, cpool); + case Constants.ATTR_NEST_MEMBERS: + return new NestMembers(idx, len, file, cpool); default: throw new IllegalStateException(); } @@ -203,6 +207,7 @@ public abstract class Attribute implements Cloneable, Node, Serializable { return Constants.ATTRIBUTE_NAMES[tag]; } + @Override public abstract void accept(ClassVisitor v); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java index 654cd8146..5c60f818f 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java @@ -173,4 +173,8 @@ public interface ClassVisitor { public void visitModule(Module module); public void visitModulePackages(ModulePackages modulePackage); public void visitModuleMainClass(ModuleMainClass moduleMainClass); + + // J11: + public void visitNestHost(NestHost nestHost); + public void visitNestMembers(NestMembers nestMembers); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java new file mode 100644 index 000000000..52d312659 --- /dev/null +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java @@ -0,0 +1,118 @@ +package org.aspectj.apache.bcel.classfile; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache BCEL" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache BCEL", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.aspectj.apache.bcel.Constants; + +/** + * https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-4.html#jvms-4.7.28 + * + * @see Attribute + */ +public final class NestHost extends Attribute { + private int hostClassIndex; + + public NestHost(NestHost c) { + this(c.getNameIndex(), c.getLength(), c.getHostClassIndex(), c.getConstantPool()); + } + + public NestHost(int nameIndex, int length, int hostClassIndex, ConstantPool cp) { + super(Constants.ATTR_NEST_MEMBERS, nameIndex, length, cp); + this.hostClassIndex = hostClassIndex; + } + + NestHost(int nameIndex, int length, DataInputStream file, ConstantPool constant_pool) throws IOException { + this(nameIndex, length, 0, constant_pool); + hostClassIndex = file.readUnsignedShort(); + } + + @Override + public void accept(ClassVisitor v) { + v.visitNestHost(this); + } + + @Override + public final void dump(DataOutputStream file) throws IOException { + super.dump(file); + file.writeShort(hostClassIndex); + } + + public final int getHostClassIndex() { + return hostClassIndex; + } + + public final void setHostClassIndex(int hostClassIndex) { + this.hostClassIndex = hostClassIndex; + } + + public final String getHostClassName() { + ConstantClass constantClass = (ConstantClass)cpool.getConstant(hostClassIndex,Constants.CONSTANT_Class); + return constantClass.getClassname(cpool); + } + + @Override + public final String toString() { + StringBuffer buf = new StringBuffer(); + buf.append("NestHost("); + ConstantClass constantClass = (ConstantClass)cpool.getConstant(hostClassIndex,Constants.CONSTANT_Class); + buf.append(constantClass.getClassname(cpool)); + buf.append(")"); + return buf.toString(); + } +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java new file mode 100644 index 000000000..9d273966f --- /dev/null +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java @@ -0,0 +1,131 @@ +package org.aspectj.apache.bcel.classfile; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache BCEL" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache BCEL", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.aspectj.apache.bcel.Constants; + +/** + * https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-4.html#jvms-4.7.29 + * + * @see Attribute + */ +public final class NestMembers extends Attribute { + private int numberOfClasses; + private int[] classes; // CONSTANT_Class_info references + + public NestMembers(NestMembers c) { + this(c.getNameIndex(), c.getLength(), c.getClasses(), c.getConstantPool()); + } + + public NestMembers(int nameIndex, int length, int[] classes, ConstantPool cp) { + super(Constants.ATTR_NEST_MEMBERS, nameIndex, length, cp); + setClasses(classes); + } + + NestMembers(int nameIndex, int length, DataInputStream file, ConstantPool constant_pool) throws IOException { + this(nameIndex, length, (int[]) null, constant_pool); + numberOfClasses = file.readUnsignedShort(); + classes = new int[numberOfClasses]; + for (int i = 0; i < numberOfClasses; i++) { + classes[i] = file.readUnsignedShort(); + } + } + + @Override + public void accept(ClassVisitor v) { + v.visitNestMembers(this); + } + + @Override + public final void dump(DataOutputStream file) throws IOException { + super.dump(file); + file.writeShort(numberOfClasses); + for (int i = 0; i < numberOfClasses; i++) { + file.writeShort(classes[i]); + } + } + + public final int[] getClasses() { + return classes; + } + + public final void setClasses(int[] inner_classes) { + this.classes = inner_classes; + numberOfClasses = (inner_classes == null) ? 0 : inner_classes.length; + } + + public final String[] getClassesNames() { + String[] result = new String[numberOfClasses]; + for (int i = 0; i < numberOfClasses; i++) { + ConstantClass constantClass = (ConstantClass)cpool.getConstant(classes[i],Constants.CONSTANT_Class); + result[i] = constantClass.getClassname(cpool); + } + return result; + } + + @Override + public final String toString() { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < numberOfClasses; i++) { + ConstantClass constantClass = (ConstantClass)cpool.getConstant(classes[i],Constants.CONSTANT_Class); + buf.append(constantClass.getClassname(cpool)).append(" "); + } + return "NestMembers("+buf.toString().trim()+")"; + } +} diff --git a/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java index 6dc3eae46..3335f1ea8 100644 --- a/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java @@ -59,6 +59,7 @@ import org.aspectj.apache.bcel.classfile.AnnotationDefault; import org.aspectj.apache.bcel.classfile.Attribute; import org.aspectj.apache.bcel.classfile.AttributeUtils; import org.aspectj.apache.bcel.classfile.BootstrapMethods; +import org.aspectj.apache.bcel.classfile.ClassVisitor; import org.aspectj.apache.bcel.classfile.Code; import org.aspectj.apache.bcel.classfile.CodeException; import org.aspectj.apache.bcel.classfile.Constant; @@ -98,13 +99,14 @@ import org.aspectj.apache.bcel.classfile.MethodParameters; import org.aspectj.apache.bcel.classfile.Module; import org.aspectj.apache.bcel.classfile.ModuleMainClass; import org.aspectj.apache.bcel.classfile.ModulePackages; +import org.aspectj.apache.bcel.classfile.NestHost; +import org.aspectj.apache.bcel.classfile.NestMembers; import org.aspectj.apache.bcel.classfile.Signature; import org.aspectj.apache.bcel.classfile.SourceFile; import org.aspectj.apache.bcel.classfile.StackMap; import org.aspectj.apache.bcel.classfile.StackMapEntry; import org.aspectj.apache.bcel.classfile.Synthetic; import org.aspectj.apache.bcel.classfile.Unknown; -import org.aspectj.apache.bcel.classfile.ClassVisitor; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisAnnos; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisParamAnnos; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisTypeAnnos; @@ -171,6 +173,7 @@ public class DescendingVisitor implements ClassVisitor { clazz.accept(this); } + @Override public void visitJavaClass(JavaClass clazz) { stack.push(clazz); clazz.accept(visitor); @@ -189,6 +192,7 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitField(Field field) { stack.push(field); field.accept(visitor); @@ -197,12 +201,14 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitConstantValue(ConstantValue cv) { stack.push(cv); cv.accept(visitor); stack.pop(); } + @Override public void visitMethod(Method method) { stack.push(method); method.accept(visitor); @@ -210,12 +216,14 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitExceptionTable(ExceptionTable table) { stack.push(table); table.accept(visitor); stack.pop(); } + @Override public void visitCode(Code code) { stack.push(code); code.accept(visitor); @@ -230,12 +238,14 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitCodeException(CodeException ce) { stack.push(ce); ce.accept(visitor); stack.pop(); } + @Override public void visitLineNumberTable(LineNumberTable table) { stack.push(table); table.accept(visitor); @@ -246,12 +256,14 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitLineNumber(LineNumber number) { stack.push(number); number.accept(visitor); stack.pop(); } + @Override public void visitLocalVariableTable(LocalVariableTable table) { stack.push(table); table.accept(visitor); @@ -262,6 +274,7 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitStackMap(StackMap table) { stack.push(table); table.accept(visitor); @@ -273,18 +286,21 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitStackMapEntry(StackMapEntry var) { stack.push(var); var.accept(visitor); stack.pop(); } + @Override public void visitLocalVariable(LocalVariable var) { stack.push(var); var.accept(visitor); stack.pop(); } + @Override public void visitConstantPool(ConstantPool cp) { stack.push(cp); cp.accept(visitor); @@ -298,104 +314,123 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitConstantClass(ConstantClass constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantDouble(ConstantDouble constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantFieldref(ConstantFieldref constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantFloat(ConstantFloat constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantInteger(ConstantInteger constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantLong(ConstantLong constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantMethodref(ConstantMethodref constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantMethodHandle(ConstantMethodHandle constant) { throw new IllegalStateException("nyi"); } + @Override public void visitConstantMethodType(ConstantMethodType obj) { throw new IllegalStateException("nyi"); } + @Override public void visitConstantInvokeDynamic(ConstantInvokeDynamic obj) { throw new IllegalStateException("nyi"); } + @Override public void visitConstantDynamic(ConstantDynamic obj) { throw new IllegalStateException("nyi"); } + @Override public void visitBootstrapMethods(BootstrapMethods obj) { throw new IllegalStateException("nyi"); } + @Override public void visitConstantNameAndType(ConstantNameAndType constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantString(ConstantString constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantModule(ConstantModule constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantPackage(ConstantPackage constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitConstantUtf8(ConstantUtf8 constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } + @Override public void visitInnerClasses(InnerClasses ic) { stack.push(ic); ic.accept(visitor); @@ -406,18 +441,21 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitInnerClass(InnerClass inner) { stack.push(inner); inner.accept(visitor); stack.pop(); } + @Override public void visitDeprecated(Deprecated attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitSignature(Signature attribute) { stack.push(attribute); attribute.accept(visitor); @@ -425,60 +463,70 @@ public class DescendingVisitor implements ClassVisitor { } // J5SUPPORT: + @Override public void visitEnclosingMethod(EnclosingMethod attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitRuntimeVisibleAnnotations(RuntimeVisAnnos attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitRuntimeInvisibleAnnotations(RuntimeInvisAnnos attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitRuntimeVisibleParameterAnnotations(RuntimeVisParamAnnos attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisParamAnnos attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitRuntimeVisibleTypeAnnotations(RuntimeVisTypeAnnos attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitMethodParameters(MethodParameters attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisTypeAnnos attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitAnnotationDefault(AnnotationDefault attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitLocalVariableTypeTable(LocalVariableTypeTable table) { stack.push(table); table.accept(visitor); @@ -489,39 +537,59 @@ public class DescendingVisitor implements ClassVisitor { stack.pop(); } + @Override public void visitSourceFile(SourceFile attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitSynthetic(Synthetic attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitUnknown(Unknown attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitModule(Module attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitModulePackages(ModulePackages attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + @Override public void visitModuleMainClass(ModuleMainClass attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } + + @Override + public void visitNestHost(NestHost attribute) { + stack.push(attribute); + attribute.accept(visitor); + stack.pop(); + } + + @Override + public void visitNestMembers(NestMembers attribute) { + stack.push(attribute); + attribute.accept(visitor); + stack.pop(); + } } diff --git a/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java index aca992fbf..1ca901650 100644 --- a/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java @@ -55,6 +55,7 @@ package org.aspectj.apache.bcel.verifier; import org.aspectj.apache.bcel.classfile.AnnotationDefault; import org.aspectj.apache.bcel.classfile.BootstrapMethods; +import org.aspectj.apache.bcel.classfile.ClassVisitor; import org.aspectj.apache.bcel.classfile.Code; import org.aspectj.apache.bcel.classfile.CodeException; import org.aspectj.apache.bcel.classfile.ConstantClass; @@ -93,13 +94,14 @@ import org.aspectj.apache.bcel.classfile.MethodParameters; import org.aspectj.apache.bcel.classfile.Module; import org.aspectj.apache.bcel.classfile.ModuleMainClass; import org.aspectj.apache.bcel.classfile.ModulePackages; +import org.aspectj.apache.bcel.classfile.NestHost; +import org.aspectj.apache.bcel.classfile.NestMembers; import org.aspectj.apache.bcel.classfile.Signature; import org.aspectj.apache.bcel.classfile.SourceFile; import org.aspectj.apache.bcel.classfile.StackMap; import org.aspectj.apache.bcel.classfile.StackMapEntry; import org.aspectj.apache.bcel.classfile.Synthetic; import org.aspectj.apache.bcel.classfile.Unknown; -import org.aspectj.apache.bcel.classfile.ClassVisitor; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisAnnos; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisParamAnnos; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisTypeAnnos; @@ -120,64 +122,118 @@ import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisTypeAnnos; public class EmptyClassVisitor implements ClassVisitor { protected EmptyClassVisitor() { } - public void visitCode(Code obj) {} - public void visitCodeException(CodeException obj) {} - public void visitConstantClass(ConstantClass obj) {} - public void visitConstantDouble(ConstantDouble obj) {} - public void visitConstantFieldref(ConstantFieldref obj) {} - public void visitConstantFloat(ConstantFloat obj) {} - public void visitConstantInteger(ConstantInteger obj) {} - public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj) {} - public void visitConstantLong(ConstantLong obj) {} - public void visitConstantMethodref(ConstantMethodref obj) {} - public void visitConstantMethodHandle(ConstantMethodHandle obj) {} - public void visitConstantMethodType(ConstantMethodType obj) {} - public void visitConstantInvokeDynamic(ConstantInvokeDynamic obj) {} - public void visitConstantNameAndType(ConstantNameAndType obj) {} - public void visitConstantPool(ConstantPool obj) {} - public void visitConstantString(ConstantString obj) {} - public void visitConstantModule(ConstantModule obj) {} - public void visitConstantPackage(ConstantPackage obj) {} - public void visitConstantUtf8(ConstantUtf8 obj) {} - public void visitConstantValue(ConstantValue obj) {} - public void visitDeprecated(Deprecated obj) {} - public void visitExceptionTable(ExceptionTable obj) {} - public void visitField(Field obj) {} - public void visitInnerClass(InnerClass obj) {} - public void visitInnerClasses(InnerClasses obj) {} - public void visitJavaClass(JavaClass obj) {} - public void visitLineNumber(LineNumber obj) {} - public void visitBootstrapMethods(BootstrapMethods obj) {} - public void visitLineNumberTable(LineNumberTable obj) {} - public void visitLocalVariable(LocalVariable obj) {} - public void visitLocalVariableTable(LocalVariableTable obj) {} - public void visitMethod(Method obj) {} - public void visitSignature(Signature obj) {} - public void visitSourceFile(SourceFile obj) {} - public void visitSynthetic(Synthetic obj) {} - public void visitUnknown(Unknown obj) {} - public void visitStackMap(StackMap obj) {} - public void visitStackMapEntry(StackMapEntry obj) {} + @Override +public void visitCode(Code obj) {} + @Override +public void visitCodeException(CodeException obj) {} + @Override +public void visitConstantClass(ConstantClass obj) {} + @Override +public void visitConstantDouble(ConstantDouble obj) {} + @Override +public void visitConstantFieldref(ConstantFieldref obj) {} + @Override +public void visitConstantFloat(ConstantFloat obj) {} + @Override +public void visitConstantInteger(ConstantInteger obj) {} + @Override +public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj) {} + @Override +public void visitConstantLong(ConstantLong obj) {} + @Override +public void visitConstantMethodref(ConstantMethodref obj) {} + @Override +public void visitConstantMethodHandle(ConstantMethodHandle obj) {} + @Override +public void visitConstantMethodType(ConstantMethodType obj) {} + @Override +public void visitConstantInvokeDynamic(ConstantInvokeDynamic obj) {} + @Override +public void visitConstantNameAndType(ConstantNameAndType obj) {} + @Override +public void visitConstantPool(ConstantPool obj) {} + @Override +public void visitConstantString(ConstantString obj) {} + @Override +public void visitConstantModule(ConstantModule obj) {} + @Override +public void visitConstantPackage(ConstantPackage obj) {} + @Override +public void visitConstantUtf8(ConstantUtf8 obj) {} + @Override +public void visitConstantValue(ConstantValue obj) {} + @Override +public void visitDeprecated(Deprecated obj) {} + @Override +public void visitExceptionTable(ExceptionTable obj) {} + @Override +public void visitField(Field obj) {} + @Override +public void visitInnerClass(InnerClass obj) {} + @Override +public void visitInnerClasses(InnerClasses obj) {} + @Override +public void visitJavaClass(JavaClass obj) {} + @Override +public void visitLineNumber(LineNumber obj) {} + @Override +public void visitBootstrapMethods(BootstrapMethods obj) {} + @Override +public void visitLineNumberTable(LineNumberTable obj) {} + @Override +public void visitLocalVariable(LocalVariable obj) {} + @Override +public void visitLocalVariableTable(LocalVariableTable obj) {} + @Override +public void visitMethod(Method obj) {} + @Override +public void visitSignature(Signature obj) {} + @Override +public void visitSourceFile(SourceFile obj) {} + @Override +public void visitSynthetic(Synthetic obj) {} + @Override +public void visitUnknown(Unknown obj) {} + @Override +public void visitStackMap(StackMap obj) {} + @Override +public void visitStackMapEntry(StackMapEntry obj) {} // J5: - public void visitEnclosingMethod(EnclosingMethod obj) {} - public void visitRuntimeVisibleAnnotations(RuntimeVisAnnos attribute) {} - public void visitRuntimeInvisibleAnnotations(RuntimeInvisAnnos attribute) {} - public void visitRuntimeVisibleParameterAnnotations(RuntimeVisParamAnnos attribute) {} - public void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisParamAnnos attribute) {} - public void visitAnnotationDefault(AnnotationDefault attribute) {} - public void visitLocalVariableTypeTable(LocalVariableTypeTable obj) {} + @Override +public void visitEnclosingMethod(EnclosingMethod obj) {} + @Override +public void visitRuntimeVisibleAnnotations(RuntimeVisAnnos attribute) {} + @Override +public void visitRuntimeInvisibleAnnotations(RuntimeInvisAnnos attribute) {} + @Override +public void visitRuntimeVisibleParameterAnnotations(RuntimeVisParamAnnos attribute) {} + @Override +public void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisParamAnnos attribute) {} + @Override +public void visitAnnotationDefault(AnnotationDefault attribute) {} + @Override +public void visitLocalVariableTypeTable(LocalVariableTypeTable obj) {} // J8: - public void visitRuntimeVisibleTypeAnnotations(RuntimeVisTypeAnnos attribute) {} - public void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisTypeAnnos attribute) {} - public void visitMethodParameters(MethodParameters attribute) {} + @Override +public void visitRuntimeVisibleTypeAnnotations(RuntimeVisTypeAnnos attribute) {} + @Override +public void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisTypeAnnos attribute) {} + @Override +public void visitMethodParameters(MethodParameters attribute) {} // J9: - public void visitModule(Module attribute) {} - public void visitModulePackages(ModulePackages attribute) {} - public void visitModuleMainClass(ModuleMainClass attribute) {} + @Override +public void visitModule(Module attribute) {} + @Override +public void visitModulePackages(ModulePackages attribute) {} + @Override +public void visitModuleMainClass(ModuleMainClass attribute) {} - public void visitConstantDynamic(ConstantDynamic obj) {} + // J11: + @Override public void visitConstantDynamic(ConstantDynamic attribute) {} + @Override public void visitNestHost(NestHost attribute) { } + @Override public void visitNestMembers(NestMembers attribute) { } } diff --git a/lib/asm/asm-6.2.1.renamed.jar b/lib/asm/asm-6.2.1.renamed.jar deleted file mode 100644 index 3fc0688f60507be8d5e86af9242f130e269d7a55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112951 zcmagFW0Y=BaOgd@ZQJ&ov2EM7ZQC=?*tT)TwrzXnjCJ0BR+5|K%}wrJyTAQv?W*ck zySlo%6=gudV1R(2fPhpZ*yMoz(*q3z1|%n@Dnu_OFV6Tg2?V70ZzvRy%0DR9Z@`J# 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