Browse Source

More fixes for 1.9.2

- update to more recent JDT to pickup Nestmates fix
- bcel updated for NestMembers/NestHost attributes
- testcases for nestmates
tags/V1_9_2_RC2
Andy Clement 5 years ago
parent
commit
749b9cb3ca
31 changed files with 527 additions and 64 deletions
  1. 7
    3
      bcel-builder/src/org/aspectj/apache/bcel/Constants.java
  2. 5
    0
      bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java
  3. 4
    0
      bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java
  4. 118
    0
      bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java
  5. 131
    0
      bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java
  6. 69
    1
      bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java
  7. 109
    53
      bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java
  8. BIN
      lib/asm/asm-6.2.1.renamed.jar
  9. BIN
      lib/asm/asm-7.0-beta.20181001.jar
  10. BIN
      lib/asm/asm-7.0-beta.renamed.jar
  11. 2
    2
      lib/asm/build.xml
  12. BIN
      lib/bcel/bcel-src.zip
  13. BIN
      lib/bcel/bcel-verifier-src.zip
  14. BIN
      lib/bcel/bcel-verifier.jar
  15. BIN
      lib/bcel/bcel.jar
  16. 1
    1
      org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java
  17. BIN
      org.eclipse.jdt.core/jdtcore-for-aspectj-src.zip
  18. BIN
      org.eclipse.jdt.core/jdtcore-for-aspectj.jar
  19. 1
    1
      tests/bugs180/415957/MyAspect.aj
  20. 1
    1
      tests/bugs180/415957/MyClass.java
  21. 4
    0
      tests/bugs180/415957/Resource.java
  22. BIN
      tests/bugs192/535156/DemoApp.class
  23. BIN
      tests/bugs192/535156/X.class
  24. 9
    0
      tests/bugs192/nestmates/Outer.java
  25. BIN
      tests/bugs192/nestmates/Outer2$Inner2.class
  26. BIN
      tests/bugs192/nestmates/Outer2.class
  27. 21
    0
      tests/bugs192/nestmates/Outer2.java
  28. BIN
      tests/bugs192/nestmates/X.class
  29. 26
    0
      tests/src/org/aspectj/systemtest/ajc192/Ajc192Tests.java
  30. 17
    0
      tests/src/org/aspectj/systemtest/ajc192/ajc192.xml
  31. 2
    2
      weaver/src/org/aspectj/weaver/bcel/asm/StackMapAdder.java

+ 7
- 3
bcel-builder/src/org/aspectj/apache/bcel/Constants.java View File

@@ -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"
};

/**

+ 5
- 0
bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java View File

@@ -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);

}

+ 4
- 0
bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java View File

@@ -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);
}

+ 118
- 0
bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java View File

@@ -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();
}
}

+ 131
- 0
bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java View File

@@ -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()+")";
}
}

+ 69
- 1
bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java View File

@@ -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();
}
}

+ 109
- 53
bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java View File

@@ -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) { }
}

BIN
lib/asm/asm-6.2.1.renamed.jar View File


BIN
lib/asm/asm-7.0-beta.20181001.jar View File


BIN
lib/asm/asm-7.0-beta.renamed.jar View File


+ 2
- 2
lib/asm/build.xml View File

@@ -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>

BIN
lib/bcel/bcel-src.zip View File


BIN
lib/bcel/bcel-verifier-src.zip View File


BIN
lib/bcel/bcel-verifier.jar View File


BIN
lib/bcel/bcel.jar View File


+ 1
- 1
org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java View File

@@ -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:

BIN
org.eclipse.jdt.core/jdtcore-for-aspectj-src.zip View File


BIN
org.eclipse.jdt.core/jdtcore-for-aspectj.jar View File


+ 1
- 1
tests/bugs180/415957/MyAspect.aj View File

@@ -1,5 +1,5 @@
public aspect MyAspect {
pointcut all(): execution(@javax.annotation.Resource * *(..));
pointcut all(): execution(@Resource * *(..));


before(): all() {

+ 1
- 1
tests/bugs180/415957/MyClass.java View File

@@ -1,5 +1,5 @@
public class MyClass {
@javax.annotation.Resource
@Resource
public void method() {
}
}

+ 4
- 0
tests/bugs180/415957/Resource.java View File

@@ -0,0 +1,4 @@
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {}

BIN
tests/bugs192/535156/DemoApp.class View File


BIN
tests/bugs192/535156/X.class View File


+ 9
- 0
tests/bugs192/nestmates/Outer.java View File

@@ -0,0 +1,9 @@
public class Outer {
private int i = 0;
public class Inner {
public int i() {
return i;
}
}
}

BIN
tests/bugs192/nestmates/Outer2$Inner2.class View File


BIN
tests/bugs192/nestmates/Outer2.class View File


+ 21
- 0
tests/bugs192/nestmates/Outer2.java View File

@@ -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()");}
}

BIN
tests/bugs192/nestmates/X.class View File


+ 26
- 0
tests/src/org/aspectj/systemtest/ajc192/Ajc192Tests.java View File

@@ -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");
}

+ 17
- 0
tests/src/org/aspectj/systemtest/ajc192/ajc192.xml View File

@@ -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>

+ 2
- 2
weaver/src/org/aspectj/weaver/bcel/asm/StackMapAdder.java View File

@@ -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);
}
}

Loading…
Cancel
Save