- update to more recent JDT to pickup Nestmates fix - bcel updated for NestMembers/NestHost attributes - testcases for nestmatestags/V1_9_2_RC2
public static final byte ATTR_MODULE = 23; | public static final byte ATTR_MODULE = 23; | ||||
public static final byte ATTR_MODULE_PACKAGES = 24; | public static final byte ATTR_MODULE_PACKAGES = 24; | ||||
public static final byte ATTR_MODULE_MAIN_CLASS = 25; | 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 = { | public static final String[] ATTRIBUTE_NAMES = { | ||||
"SourceFile", "ConstantValue", "Code", "Exceptions", "LineNumberTable", "LocalVariableTable", | "SourceFile", "ConstantValue", "Code", "Exceptions", "LineNumberTable", "LocalVariableTable", | ||||
"RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", "RuntimeVisibleParameterAnnotations", | "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", "RuntimeVisibleParameterAnnotations", | ||||
"RuntimeInvisibleParameterAnnotations", "LocalVariableTypeTable", "EnclosingMethod", | "RuntimeInvisibleParameterAnnotations", "LocalVariableTypeTable", "EnclosingMethod", | ||||
"AnnotationDefault","BootstrapMethods", "RuntimeVisibleTypeAnnotations", "RuntimeInvisibleTypeAnnotations", | "AnnotationDefault","BootstrapMethods", "RuntimeVisibleTypeAnnotations", "RuntimeInvisibleTypeAnnotations", | ||||
"MethodParameters", "Module", "ModulePackages", "ModuleMainClass" | |||||
"MethodParameters", "Module", "ModulePackages", "ModuleMainClass", "NestHost", "NestMembers" | |||||
}; | }; | ||||
/** | /** |
return new ModulePackages(idx, len, file, cpool); | return new ModulePackages(idx, len, file, cpool); | ||||
case Constants.ATTR_MODULE_MAIN_CLASS: | case Constants.ATTR_MODULE_MAIN_CLASS: | ||||
return new ModuleMainClass(idx, len, file, cpool); | 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: | default: | ||||
throw new IllegalStateException(); | throw new IllegalStateException(); | ||||
} | } | ||||
return Constants.ATTRIBUTE_NAMES[tag]; | return Constants.ATTRIBUTE_NAMES[tag]; | ||||
} | } | ||||
@Override | |||||
public abstract void accept(ClassVisitor v); | public abstract void accept(ClassVisitor v); | ||||
} | } |
public void visitModule(Module module); | public void visitModule(Module module); | ||||
public void visitModulePackages(ModulePackages modulePackage); | public void visitModulePackages(ModulePackages modulePackage); | ||||
public void visitModuleMainClass(ModuleMainClass moduleMainClass); | public void visitModuleMainClass(ModuleMainClass moduleMainClass); | ||||
// J11: | |||||
public void visitNestHost(NestHost nestHost); | |||||
public void visitNestMembers(NestMembers nestMembers); | |||||
} | } |
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(); | |||||
} | |||||
} |
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()+")"; | |||||
} | |||||
} |
import org.aspectj.apache.bcel.classfile.Attribute; | import org.aspectj.apache.bcel.classfile.Attribute; | ||||
import org.aspectj.apache.bcel.classfile.AttributeUtils; | import org.aspectj.apache.bcel.classfile.AttributeUtils; | ||||
import org.aspectj.apache.bcel.classfile.BootstrapMethods; | 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.Code; | ||||
import org.aspectj.apache.bcel.classfile.CodeException; | import org.aspectj.apache.bcel.classfile.CodeException; | ||||
import org.aspectj.apache.bcel.classfile.Constant; | import org.aspectj.apache.bcel.classfile.Constant; | ||||
import org.aspectj.apache.bcel.classfile.Module; | import org.aspectj.apache.bcel.classfile.Module; | ||||
import org.aspectj.apache.bcel.classfile.ModuleMainClass; | import org.aspectj.apache.bcel.classfile.ModuleMainClass; | ||||
import org.aspectj.apache.bcel.classfile.ModulePackages; | 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.Signature; | ||||
import org.aspectj.apache.bcel.classfile.SourceFile; | import org.aspectj.apache.bcel.classfile.SourceFile; | ||||
import org.aspectj.apache.bcel.classfile.StackMap; | import org.aspectj.apache.bcel.classfile.StackMap; | ||||
import org.aspectj.apache.bcel.classfile.StackMapEntry; | import org.aspectj.apache.bcel.classfile.StackMapEntry; | ||||
import org.aspectj.apache.bcel.classfile.Synthetic; | import org.aspectj.apache.bcel.classfile.Synthetic; | ||||
import org.aspectj.apache.bcel.classfile.Unknown; | 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.RuntimeInvisAnnos; | ||||
import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisParamAnnos; | import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisParamAnnos; | ||||
import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisTypeAnnos; | import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisTypeAnnos; | ||||
clazz.accept(this); | clazz.accept(this); | ||||
} | } | ||||
@Override | |||||
public void visitJavaClass(JavaClass clazz) { | public void visitJavaClass(JavaClass clazz) { | ||||
stack.push(clazz); | stack.push(clazz); | ||||
clazz.accept(visitor); | clazz.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitField(Field field) { | public void visitField(Field field) { | ||||
stack.push(field); | stack.push(field); | ||||
field.accept(visitor); | field.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantValue(ConstantValue cv) { | public void visitConstantValue(ConstantValue cv) { | ||||
stack.push(cv); | stack.push(cv); | ||||
cv.accept(visitor); | cv.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitMethod(Method method) { | public void visitMethod(Method method) { | ||||
stack.push(method); | stack.push(method); | ||||
method.accept(visitor); | method.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitExceptionTable(ExceptionTable table) { | public void visitExceptionTable(ExceptionTable table) { | ||||
stack.push(table); | stack.push(table); | ||||
table.accept(visitor); | table.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitCode(Code code) { | public void visitCode(Code code) { | ||||
stack.push(code); | stack.push(code); | ||||
code.accept(visitor); | code.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitCodeException(CodeException ce) { | public void visitCodeException(CodeException ce) { | ||||
stack.push(ce); | stack.push(ce); | ||||
ce.accept(visitor); | ce.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitLineNumberTable(LineNumberTable table) { | public void visitLineNumberTable(LineNumberTable table) { | ||||
stack.push(table); | stack.push(table); | ||||
table.accept(visitor); | table.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitLineNumber(LineNumber number) { | public void visitLineNumber(LineNumber number) { | ||||
stack.push(number); | stack.push(number); | ||||
number.accept(visitor); | number.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitLocalVariableTable(LocalVariableTable table) { | public void visitLocalVariableTable(LocalVariableTable table) { | ||||
stack.push(table); | stack.push(table); | ||||
table.accept(visitor); | table.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitStackMap(StackMap table) { | public void visitStackMap(StackMap table) { | ||||
stack.push(table); | stack.push(table); | ||||
table.accept(visitor); | table.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitStackMapEntry(StackMapEntry var) { | public void visitStackMapEntry(StackMapEntry var) { | ||||
stack.push(var); | stack.push(var); | ||||
var.accept(visitor); | var.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitLocalVariable(LocalVariable var) { | public void visitLocalVariable(LocalVariable var) { | ||||
stack.push(var); | stack.push(var); | ||||
var.accept(visitor); | var.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantPool(ConstantPool cp) { | public void visitConstantPool(ConstantPool cp) { | ||||
stack.push(cp); | stack.push(cp); | ||||
cp.accept(visitor); | cp.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantClass(ConstantClass constant) { | public void visitConstantClass(ConstantClass constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantDouble(ConstantDouble constant) { | public void visitConstantDouble(ConstantDouble constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantFieldref(ConstantFieldref constant) { | public void visitConstantFieldref(ConstantFieldref constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantFloat(ConstantFloat constant) { | public void visitConstantFloat(ConstantFloat constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantInteger(ConstantInteger constant) { | public void visitConstantInteger(ConstantInteger constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref constant) { | public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantLong(ConstantLong constant) { | public void visitConstantLong(ConstantLong constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantMethodref(ConstantMethodref constant) { | public void visitConstantMethodref(ConstantMethodref constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantMethodHandle(ConstantMethodHandle constant) { | public void visitConstantMethodHandle(ConstantMethodHandle constant) { | ||||
throw new IllegalStateException("nyi"); | throw new IllegalStateException("nyi"); | ||||
} | } | ||||
@Override | |||||
public void visitConstantMethodType(ConstantMethodType obj) { | public void visitConstantMethodType(ConstantMethodType obj) { | ||||
throw new IllegalStateException("nyi"); | throw new IllegalStateException("nyi"); | ||||
} | } | ||||
@Override | |||||
public void visitConstantInvokeDynamic(ConstantInvokeDynamic obj) { | public void visitConstantInvokeDynamic(ConstantInvokeDynamic obj) { | ||||
throw new IllegalStateException("nyi"); | throw new IllegalStateException("nyi"); | ||||
} | } | ||||
@Override | |||||
public void visitConstantDynamic(ConstantDynamic obj) { | public void visitConstantDynamic(ConstantDynamic obj) { | ||||
throw new IllegalStateException("nyi"); | throw new IllegalStateException("nyi"); | ||||
} | } | ||||
@Override | |||||
public void visitBootstrapMethods(BootstrapMethods obj) { | public void visitBootstrapMethods(BootstrapMethods obj) { | ||||
throw new IllegalStateException("nyi"); | throw new IllegalStateException("nyi"); | ||||
} | } | ||||
@Override | |||||
public void visitConstantNameAndType(ConstantNameAndType constant) { | public void visitConstantNameAndType(ConstantNameAndType constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantString(ConstantString constant) { | public void visitConstantString(ConstantString constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantModule(ConstantModule constant) { | public void visitConstantModule(ConstantModule constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantPackage(ConstantPackage constant) { | public void visitConstantPackage(ConstantPackage constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitConstantUtf8(ConstantUtf8 constant) { | public void visitConstantUtf8(ConstantUtf8 constant) { | ||||
stack.push(constant); | stack.push(constant); | ||||
constant.accept(visitor); | constant.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitInnerClasses(InnerClasses ic) { | public void visitInnerClasses(InnerClasses ic) { | ||||
stack.push(ic); | stack.push(ic); | ||||
ic.accept(visitor); | ic.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitInnerClass(InnerClass inner) { | public void visitInnerClass(InnerClass inner) { | ||||
stack.push(inner); | stack.push(inner); | ||||
inner.accept(visitor); | inner.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitDeprecated(Deprecated attribute) { | public void visitDeprecated(Deprecated attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitSignature(Signature attribute) { | public void visitSignature(Signature attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
} | } | ||||
// J5SUPPORT: | // J5SUPPORT: | ||||
@Override | |||||
public void visitEnclosingMethod(EnclosingMethod attribute) { | public void visitEnclosingMethod(EnclosingMethod attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitRuntimeVisibleAnnotations(RuntimeVisAnnos attribute) { | public void visitRuntimeVisibleAnnotations(RuntimeVisAnnos attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitRuntimeInvisibleAnnotations(RuntimeInvisAnnos attribute) { | public void visitRuntimeInvisibleAnnotations(RuntimeInvisAnnos attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitRuntimeVisibleParameterAnnotations(RuntimeVisParamAnnos attribute) { | public void visitRuntimeVisibleParameterAnnotations(RuntimeVisParamAnnos attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisParamAnnos attribute) { | public void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisParamAnnos attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitRuntimeVisibleTypeAnnotations(RuntimeVisTypeAnnos attribute) { | public void visitRuntimeVisibleTypeAnnotations(RuntimeVisTypeAnnos attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitMethodParameters(MethodParameters attribute) { | public void visitMethodParameters(MethodParameters attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisTypeAnnos attribute) { | public void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisTypeAnnos attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitAnnotationDefault(AnnotationDefault attribute) { | public void visitAnnotationDefault(AnnotationDefault attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitLocalVariableTypeTable(LocalVariableTypeTable table) { | public void visitLocalVariableTypeTable(LocalVariableTypeTable table) { | ||||
stack.push(table); | stack.push(table); | ||||
table.accept(visitor); | table.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitSourceFile(SourceFile attribute) { | public void visitSourceFile(SourceFile attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitSynthetic(Synthetic attribute) { | public void visitSynthetic(Synthetic attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitUnknown(Unknown attribute) { | public void visitUnknown(Unknown attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitModule(Module attribute) { | public void visitModule(Module attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitModulePackages(ModulePackages attribute) { | public void visitModulePackages(ModulePackages attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | stack.pop(); | ||||
} | } | ||||
@Override | |||||
public void visitModuleMainClass(ModuleMainClass attribute) { | public void visitModuleMainClass(ModuleMainClass attribute) { | ||||
stack.push(attribute); | stack.push(attribute); | ||||
attribute.accept(visitor); | attribute.accept(visitor); | ||||
stack.pop(); | 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(); | |||||
} | |||||
} | } |
import org.aspectj.apache.bcel.classfile.AnnotationDefault; | import org.aspectj.apache.bcel.classfile.AnnotationDefault; | ||||
import org.aspectj.apache.bcel.classfile.BootstrapMethods; | 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.Code; | ||||
import org.aspectj.apache.bcel.classfile.CodeException; | import org.aspectj.apache.bcel.classfile.CodeException; | ||||
import org.aspectj.apache.bcel.classfile.ConstantClass; | import org.aspectj.apache.bcel.classfile.ConstantClass; | ||||
import org.aspectj.apache.bcel.classfile.Module; | import org.aspectj.apache.bcel.classfile.Module; | ||||
import org.aspectj.apache.bcel.classfile.ModuleMainClass; | import org.aspectj.apache.bcel.classfile.ModuleMainClass; | ||||
import org.aspectj.apache.bcel.classfile.ModulePackages; | 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.Signature; | ||||
import org.aspectj.apache.bcel.classfile.SourceFile; | import org.aspectj.apache.bcel.classfile.SourceFile; | ||||
import org.aspectj.apache.bcel.classfile.StackMap; | import org.aspectj.apache.bcel.classfile.StackMap; | ||||
import org.aspectj.apache.bcel.classfile.StackMapEntry; | import org.aspectj.apache.bcel.classfile.StackMapEntry; | ||||
import org.aspectj.apache.bcel.classfile.Synthetic; | import org.aspectj.apache.bcel.classfile.Synthetic; | ||||
import org.aspectj.apache.bcel.classfile.Unknown; | 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.RuntimeInvisAnnos; | ||||
import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisParamAnnos; | import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisParamAnnos; | ||||
import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisTypeAnnos; | import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisTypeAnnos; | ||||
public class EmptyClassVisitor implements ClassVisitor { | public class EmptyClassVisitor implements ClassVisitor { | ||||
protected EmptyClassVisitor() { } | 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: | // 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: | // 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: | // 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) { } | |||||
} | } |
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"/> | <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"/> | ||||
<target name="package" description="Jarjar asm-NNN.jar and prefix package name with aj"> | <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"/> | <rule pattern="org.objectweb.asm.**" result="aj.org.objectweb.asm.@1"/> | ||||
</jarjar> | </jarjar> | ||||
</target> | </target> |
+ File.separator | + File.separator | ||||
+ "bcel-verifier.jar" | + "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 | // 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 directories. This means for the necessary types to be found we have to put these jars on the classpath: |
public aspect MyAspect { | public aspect MyAspect { | ||||
pointcut all(): execution(@javax.annotation.Resource * *(..)); | |||||
pointcut all(): execution(@Resource * *(..)); | |||||
before(): all() { | before(): all() { |
public class MyClass { | public class MyClass { | ||||
@javax.annotation.Resource | |||||
@Resource | |||||
public void method() { | public void method() { | ||||
} | } | ||||
} | } |
import java.lang.annotation.*; | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
public @interface Resource {} |
public class Outer { | |||||
private int i = 0; | |||||
public class Inner { | |||||
public int i() { | |||||
return i; | |||||
} | |||||
} | |||||
} |
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()");} | |||||
} |
import java.io.File; | 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 org.aspectj.testing.XMLBasedAjcTestCase; | ||||
import junit.framework.Test; | import junit.framework.Test; | ||||
*/ | */ | ||||
public class Ajc192Tests extends XMLBasedAjcTestCase { | 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() { | public void testCflowFinal() { | ||||
runTest("no final on cflow elements"); | runTest("no final on cflow elements"); | ||||
} | } |
<suite> | <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"> | <ajc-test dir="bugs192/537825" title="no final on cflow elements"> | ||||
<compile files="Code.java" options="-9"> | <compile files="Code.java" options="-9"> | ||||
</compile> | </compile> |
private static class AspectJClassVisitor extends ClassVisitor { | private static class AspectJClassVisitor extends ClassVisitor { | ||||
public AspectJClassVisitor(ClassVisitor classwriter) { | public AspectJClassVisitor(ClassVisitor classwriter) { | ||||
super(Opcodes.ASM5, classwriter); | |||||
super(Opcodes.ASM7, classwriter); | |||||
} | } | ||||
@Override | @Override | ||||
// created by a ClassWriter (see top level class comment) | // created by a ClassWriter (see top level class comment) | ||||
static class AJMethodVisitor extends MethodVisitor { | static class AJMethodVisitor extends MethodVisitor { | ||||
public AJMethodVisitor(MethodVisitor mv) { | public AJMethodVisitor(MethodVisitor mv) { | ||||
super(Opcodes.ASM5,mv); | |||||
super(Opcodes.ASM7,mv); | |||||
} | } | ||||
} | } | ||||