aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Clement <aclement@pivotal.io>2018-10-01 16:10:02 -0700
committerAndy Clement <aclement@pivotal.io>2018-10-01 16:10:02 -0700
commit749b9cb3ca8e4680fca4252b0d782b7154eccb75 (patch)
treec2abf1231aac79a08469c92b319b4882991bf3b7
parentf6d9aaaf05eca3aaf06d3a769a83f302b0501dca (diff)
downloadaspectj-749b9cb3ca8e4680fca4252b0d782b7154eccb75.tar.gz
aspectj-749b9cb3ca8e4680fca4252b0d782b7154eccb75.zip
More fixes for 1.9.2V1_9_2_RC2
- update to more recent JDT to pickup Nestmates fix - bcel updated for NestMembers/NestHost attributes - testcases for nestmates
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/Constants.java10
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java5
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java4
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java118
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java131
-rw-r--r--bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java70
-rw-r--r--bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java162
-rw-r--r--lib/asm/asm-6.2.1.renamed.jarbin112951 -> 0 bytes
-rw-r--r--lib/asm/asm-7.0-beta.20181001.jarbin0 -> 113586 bytes
-rw-r--r--lib/asm/asm-7.0-beta.renamed.jarbin0 -> 113466 bytes
-rw-r--r--lib/asm/build.xml4
-rw-r--r--lib/bcel/bcel-src.zipbin342916 -> 347077 bytes
-rw-r--r--lib/bcel/bcel-verifier-src.zipbin183459 -> 183555 bytes
-rw-r--r--lib/bcel/bcel-verifier.jarbin167052 -> 167239 bytes
-rw-r--r--lib/bcel/bcel.jarbin321337 -> 324569 bytes
-rw-r--r--org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java2
-rw-r--r--org.eclipse.jdt.core/jdtcore-for-aspectj-src.zipbin5267868 -> 5264132 bytes
-rw-r--r--org.eclipse.jdt.core/jdtcore-for-aspectj.jarbin10690732 -> 10691581 bytes
-rw-r--r--tests/bugs180/415957/MyAspect.aj2
-rw-r--r--tests/bugs180/415957/MyClass.java2
-rw-r--r--tests/bugs180/415957/Resource.java4
-rw-r--r--tests/bugs192/535156/DemoApp.classbin0 -> 2210 bytes
-rw-r--r--tests/bugs192/535156/X.classbin0 -> 1732 bytes
-rw-r--r--tests/bugs192/nestmates/Outer.java9
-rw-r--r--tests/bugs192/nestmates/Outer2$Inner2.classbin0 -> 919 bytes
-rw-r--r--tests/bugs192/nestmates/Outer2.classbin0 -> 1381 bytes
-rw-r--r--tests/bugs192/nestmates/Outer2.java21
-rw-r--r--tests/bugs192/nestmates/X.classbin0 -> 2894 bytes
-rw-r--r--tests/src/org/aspectj/systemtest/ajc192/Ajc192Tests.java26
-rw-r--r--tests/src/org/aspectj/systemtest/ajc192/ajc192.xml17
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/asm/StackMapAdder.java4
31 files changed, 527 insertions, 64 deletions
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
+ * <http://www.apache.org/>.
+ */
+
+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
+ * <http://www.apache.org/>.
+ */
+
+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 3fc0688f6..000000000
--- a/lib/asm/asm-6.2.1.renamed.jar
+++ /dev/null
Binary files differ
diff --git a/lib/asm/asm-7.0-beta.20181001.jar b/lib/asm/asm-7.0-beta.20181001.jar
new file mode 100644
index 000000000..f5d937f45
--- /dev/null
+++ b/lib/asm/asm-7.0-beta.20181001.jar
Binary files differ
diff --git a/lib/asm/asm-7.0-beta.renamed.jar b/lib/asm/asm-7.0-beta.renamed.jar
new file mode 100644
index 000000000..cf9a107c1
--- /dev/null
+++ b/lib/asm/asm-7.0-beta.renamed.jar
Binary files differ
diff --git a/lib/asm/build.xml b/lib/asm/build.xml
index 2cd8eeba9..009345711 100644
--- a/lib/asm/build.xml
+++ b/lib/asm/build.xml
@@ -4,8 +4,8 @@
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"/>
<target name="package" description="Jarjar asm-NNN.jar and prefix package name with aj">
- <jarjar destfile="asm-6.2.1.renamed.jar">
- <zipfileset src="asm-6.2.1.jar" excludes="module-info.class"/>
+ <jarjar destfile="asm-7.0-beta.renamed.jar">
+ <zipfileset src="asm-7.0-beta.jar" excludes="module-info.class"/>
<rule pattern="org.objectweb.asm.**" result="aj.org.objectweb.asm.@1"/>
</jarjar>
</target>
diff --git a/lib/bcel/bcel-src.zip b/lib/bcel/bcel-src.zip
index 810c8a6fb..a6f847d75 100644
--- a/lib/bcel/bcel-src.zip
+++ b/lib/bcel/bcel-src.zip
Binary files differ
diff --git a/lib/bcel/bcel-verifier-src.zip b/lib/bcel/bcel-verifier-src.zip
index 93d200f67..916e947d0 100644
--- a/lib/bcel/bcel-verifier-src.zip
+++ b/lib/bcel/bcel-verifier-src.zip
Binary files differ
diff --git a/lib/bcel/bcel-verifier.jar b/lib/bcel/bcel-verifier.jar
index 2c3ef4bab..41471b198 100644
--- a/lib/bcel/bcel-verifier.jar
+++ b/lib/bcel/bcel-verifier.jar
Binary files differ
diff --git a/lib/bcel/bcel.jar b/lib/bcel/bcel.jar
index e4899e2c7..d5cbf14eb 100644
--- a/lib/bcel/bcel.jar
+++ b/lib/bcel/bcel.jar
Binary files differ
diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java
index 988b8a284..1384358a3 100644
--- a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java
+++ b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java
@@ -91,7 +91,7 @@ public class AjcTestCase extends TestCase {
+ File.separator
+ "bcel-verifier.jar"
- + File.pathSeparator + ".." + File.separator + "lib" + File.separator + "asm" + File.separator + "asm-6.2.1.renamed.jar"
+ + File.pathSeparator + ".." + File.separator + "lib" + File.separator + "asm" + File.separator + "asm-7.0-beta.renamed.jar"
// When the build machine executes the tests, it is using code built into jars rather than code build into
// bin directories. This means for the necessary types to be found we have to put these jars on the classpath:
diff --git a/org.eclipse.jdt.core/jdtcore-for-aspectj-src.zip b/org.eclipse.jdt.core/jdtcore-for-aspectj-src.zip
index 12e606286..0e70dcd20 100644
--- a/org.eclipse.jdt.core/jdtcore-for-aspectj-src.zip
+++ b/org.eclipse.jdt.core/jdtcore-for-aspectj-src.zip
Binary files differ
diff --git a/org.eclipse.jdt.core/jdtcore-for-aspectj.jar b/org.eclipse.jdt.core/jdtcore-for-aspectj.jar
index 019e8b3a9..3d73f19d9 100644
--- a/org.eclipse.jdt.core/jdtcore-for-aspectj.jar
+++ b/org.eclipse.jdt.core/jdtcore-for-aspectj.jar
Binary files differ
diff --git a/tests/bugs180/415957/MyAspect.aj b/tests/bugs180/415957/MyAspect.aj
index 673463a55..9d900ff2c 100644
--- a/tests/bugs180/415957/MyAspect.aj
+++ b/tests/bugs180/415957/MyAspect.aj
@@ -1,5 +1,5 @@
public aspect MyAspect {
- pointcut all(): execution(@javax.annotation.Resource * *(..));
+ pointcut all(): execution(@Resource * *(..));
before(): all() {
diff --git a/tests/bugs180/415957/MyClass.java b/tests/bugs180/415957/MyClass.java
index 7b596ffd0..b6ea71267 100644
--- a/tests/bugs180/415957/MyClass.java
+++ b/tests/bugs180/415957/MyClass.java
@@ -1,5 +1,5 @@
public class MyClass {
- @javax.annotation.Resource
+ @Resource
public void method() {
}
}
diff --git a/tests/bugs180/415957/Resource.java b/tests/bugs180/415957/Resource.java
new file mode 100644
index 000000000..e9ae957ac
--- /dev/null
+++ b/tests/bugs180/415957/Resource.java
@@ -0,0 +1,4 @@
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Resource {}
diff --git a/tests/bugs192/535156/DemoApp.class b/tests/bugs192/535156/DemoApp.class
new file mode 100644
index 000000000..0a2a5f3ae
--- /dev/null
+++ b/tests/bugs192/535156/DemoApp.class
Binary files differ
diff --git a/tests/bugs192/535156/X.class b/tests/bugs192/535156/X.class
new file mode 100644
index 000000000..fce34aedc
--- /dev/null
+++ b/tests/bugs192/535156/X.class
Binary files differ
diff --git a/tests/bugs192/nestmates/Outer.java b/tests/bugs192/nestmates/Outer.java
new file mode 100644
index 000000000..42a102c68
--- /dev/null
+++ b/tests/bugs192/nestmates/Outer.java
@@ -0,0 +1,9 @@
+public class Outer {
+ private int i = 0;
+
+ public class Inner {
+ public int i() {
+ return i;
+ }
+ }
+}
diff --git a/tests/bugs192/nestmates/Outer2$Inner2.class b/tests/bugs192/nestmates/Outer2$Inner2.class
new file mode 100644
index 000000000..cccfb99d3
--- /dev/null
+++ b/tests/bugs192/nestmates/Outer2$Inner2.class
Binary files differ
diff --git a/tests/bugs192/nestmates/Outer2.class b/tests/bugs192/nestmates/Outer2.class
new file mode 100644
index 000000000..15192992d
--- /dev/null
+++ b/tests/bugs192/nestmates/Outer2.class
Binary files differ
diff --git a/tests/bugs192/nestmates/Outer2.java b/tests/bugs192/nestmates/Outer2.java
new file mode 100644
index 000000000..de5dc10f6
--- /dev/null
+++ b/tests/bugs192/nestmates/Outer2.java
@@ -0,0 +1,21 @@
+public class Outer2 {
+ private int i = 0;
+
+ public static void main(String []argv) {
+ Outer2 o2 = new Outer2();
+ Inner2 i2 = o2.new Inner2();
+ System.out.println(i2.i());
+ }
+
+ public class Inner2 {
+ public int i() {
+ return i;
+ }
+ }
+
+}
+
+aspect X {
+before(): execution(* Outer2.main(..)) { System.out.println("Before main()");}
+before(): execution(* Outer2.Inner2.i(..)) { System.out.println("Before i()");}
+}
diff --git a/tests/bugs192/nestmates/X.class b/tests/bugs192/nestmates/X.class
new file mode 100644
index 000000000..a8887a54c
--- /dev/null
+++ b/tests/bugs192/nestmates/X.class
Binary files differ
diff --git a/tests/src/org/aspectj/systemtest/ajc192/Ajc192Tests.java b/tests/src/org/aspectj/systemtest/ajc192/Ajc192Tests.java
index 66bae0c9d..84e0f9d39 100644
--- a/tests/src/org/aspectj/systemtest/ajc192/Ajc192Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc192/Ajc192Tests.java
@@ -12,6 +12,9 @@ package org.aspectj.systemtest.ajc192;
import java.io.File;
+import org.aspectj.apache.bcel.classfile.JavaClass;
+import org.aspectj.apache.bcel.classfile.NestHost;
+import org.aspectj.apache.bcel.classfile.NestMembers;
import org.aspectj.testing.XMLBasedAjcTestCase;
import junit.framework.Test;
@@ -21,6 +24,29 @@ import junit.framework.Test;
*/
public class Ajc192Tests extends XMLBasedAjcTestCase {
+ public void testNestmates() throws Exception {
+ runTest("nestmates");
+ JavaClass outer = getClassFrom(ajc.getSandboxDirectory(), "Outer");
+ JavaClass inner = getClassFrom(ajc.getSandboxDirectory(), "Outer$Inner");
+ NestMembers nestMembers = (NestMembers) getAttributeStartsWith(outer.getAttributes(),"NestMembers");
+ assertEquals(1,nestMembers.getClasses().length);
+ assertEquals("Outer$Inner",nestMembers.getClassesNames()[0]);
+ NestHost nestHost = (NestHost) getAttributeStartsWith(inner.getAttributes(),"NestHost");
+ assertEquals("Outer",nestHost.getHostClassName());
+ }
+
+ // Verifying not destroyed on weaving
+ public void testNestmates2() throws Exception {
+ runTest("nestmates 2");
+ JavaClass outer = getClassFrom(ajc.getSandboxDirectory(), "Outer2");
+ JavaClass inner = getClassFrom(ajc.getSandboxDirectory(), "Outer2$Inner2");
+ NestMembers nestMembers = (NestMembers) getAttributeStartsWith(outer.getAttributes(),"NestMembers");
+ assertEquals(1,nestMembers.getClasses().length);
+ assertEquals("Outer2$Inner2",nestMembers.getClassesNames()[0]);
+ NestHost nestHost = (NestHost) getAttributeStartsWith(inner.getAttributes(),"NestHost");
+ assertEquals("Outer2",nestHost.getHostClassName());
+ }
+
public void testCflowFinal() {
runTest("no final on cflow elements");
}
diff --git a/tests/src/org/aspectj/systemtest/ajc192/ajc192.xml b/tests/src/org/aspectj/systemtest/ajc192/ajc192.xml
index 5eb7fcbbb..eb846e7cf 100644
--- a/tests/src/org/aspectj/systemtest/ajc192/ajc192.xml
+++ b/tests/src/org/aspectj/systemtest/ajc192/ajc192.xml
@@ -2,6 +2,23 @@
<suite>
+ <ajc-test dir="bugs192/nestmates" title="nestmates">
+ <compile files="Outer.java" options="-11">
+ </compile>
+ </ajc-test>
+
+
+ <ajc-test dir="bugs192/nestmates" title="nestmates 2">
+ <compile files="Outer2.java" options="-11">
+ </compile>
+ <run class="Outer2">
+ <stdout>
+ <line text="Before main()"/>
+ <line text="Before i"/>
+ <line text="0"/>
+ </stdout></run>
+ </ajc-test>
+
<ajc-test dir="bugs192/537825" title="no final on cflow elements">
<compile files="Code.java" options="-9">
</compile>
diff --git a/weaver/src/org/aspectj/weaver/bcel/asm/StackMapAdder.java b/weaver/src/org/aspectj/weaver/bcel/asm/StackMapAdder.java
index d7932c82d..dd3965b61 100644
--- a/weaver/src/org/aspectj/weaver/bcel/asm/StackMapAdder.java
+++ b/weaver/src/org/aspectj/weaver/bcel/asm/StackMapAdder.java
@@ -54,7 +54,7 @@ public class StackMapAdder {
private static class AspectJClassVisitor extends ClassVisitor {
public AspectJClassVisitor(ClassVisitor classwriter) {
- super(Opcodes.ASM5, classwriter);
+ super(Opcodes.ASM7, classwriter);
}
@Override
@@ -67,7 +67,7 @@ public class StackMapAdder {
// created by a ClassWriter (see top level class comment)
static class AJMethodVisitor extends MethodVisitor {
public AJMethodVisitor(MethodVisitor mv) {
- super(Opcodes.ASM5,mv);
+ super(Opcodes.ASM7,mv);
}
}