From 3294a35d1bfb49772a188d71777f109819faa8bf Mon Sep 17 00:00:00 2001 From: aclement Date: Thu, 26 Oct 2006 10:17:19 +0000 Subject: [PATCH] removing asm for the moment --- lib/asm/{asm-aj.jar => asm-aj.jar.unused} | Bin .../ajc152/SynchronizationTransformTests.java | 1 - weaver/.classpath | 1 - weaver/src/org/aspectj/weaver/World.java | 24 +- .../aspectj/weaver/asm/AjASMAttribute.java | 64 -- .../org/aspectj/weaver/asm/AnnVisitor.java | 79 --- .../weaver/asm/ArrayAnnotationVisitor.java | 76 --- .../org/aspectj/weaver/asm/AsmConstants.java | 39 -- .../org/aspectj/weaver/asm/AsmDelegate.java | 605 ------------------ .../src/org/aspectj/weaver/asm/AsmField.java | 110 ---- .../src/org/aspectj/weaver/asm/AsmMethod.java | 272 -------- .../org/aspectj/weaver/asm/EmptyVisitor.java | 28 - .../src/org/aspectj/weaver/asm/FdVisitor.java | 38 -- .../org/aspectj/weaver/asm/MethVisitor.java | 72 --- .../org/aspectj/weaver/asm/TypeVisitor.java | 222 ------- .../org/aspectj/weaver/bcel/BcelWorld.java | 69 +- .../tools/IsAtAspectAnnotationVisitor.java | 148 ----- .../aspectj/weaver/tools/WeavingAdaptor.java | 36 +- .../aspectj/weaver/bcel/AsmDelegateTests.java | 486 -------------- .../org/aspectj/weaver/bcel/BcelTests.java | 3 +- .../testsrc/org/aspectj/weaver/bcel/Perf.java | 146 ----- .../aspectj/weaver/bcel/UtilityTestCase.java | 2 +- .../aspectj/weaver/bcel/WeaveTestCase.java | 2 +- .../org/aspectj/weaver/AllWeaver5Tests.java | 2 - .../weaver/bcel/AsmDelegateTests5.java | 147 ----- 25 files changed, 68 insertions(+), 2604 deletions(-) rename lib/asm/{asm-aj.jar => asm-aj.jar.unused} (100%) delete mode 100644 weaver/src/org/aspectj/weaver/asm/AjASMAttribute.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/AnnVisitor.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/ArrayAnnotationVisitor.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/AsmConstants.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/AsmDelegate.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/AsmField.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/AsmMethod.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/EmptyVisitor.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/FdVisitor.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/MethVisitor.java delete mode 100644 weaver/src/org/aspectj/weaver/asm/TypeVisitor.java delete mode 100644 weaver/src/org/aspectj/weaver/tools/IsAtAspectAnnotationVisitor.java delete mode 100644 weaver/testsrc/org/aspectj/weaver/bcel/AsmDelegateTests.java delete mode 100644 weaver/testsrc/org/aspectj/weaver/bcel/Perf.java delete mode 100644 weaver5/java5-testsrc/org/aspectj/weaver/bcel/AsmDelegateTests5.java diff --git a/lib/asm/asm-aj.jar b/lib/asm/asm-aj.jar.unused similarity index 100% rename from lib/asm/asm-aj.jar rename to lib/asm/asm-aj.jar.unused diff --git a/tests/src/org/aspectj/systemtest/ajc152/SynchronizationTransformTests.java b/tests/src/org/aspectj/systemtest/ajc152/SynchronizationTransformTests.java index 92785bfef..d9f09d4b4 100644 --- a/tests/src/org/aspectj/systemtest/ajc152/SynchronizationTransformTests.java +++ b/tests/src/org/aspectj/systemtest/ajc152/SynchronizationTransformTests.java @@ -236,7 +236,6 @@ public class SynchronizationTransformTests extends XMLBasedAjcTestCase { world = new BcelWorld( getSandboxDirectory()+File.pathSeparator+ System.getProperty("java.class.path")); - world.setFastDelegateSupport(false); } } diff --git a/weaver/.classpath b/weaver/.classpath index 1cceb2d3a..8c543d4c9 100644 --- a/weaver/.classpath +++ b/weaver/.classpath @@ -10,7 +10,6 @@ - diff --git a/weaver/src/org/aspectj/weaver/World.java b/weaver/src/org/aspectj/weaver/World.java index da29f249b..6c8aafd0a 100644 --- a/weaver/src/org/aspectj/weaver/World.java +++ b/weaver/src/org/aspectj/weaver/World.java @@ -117,19 +117,20 @@ public abstract class World implements Dump.INode { private static Trace trace = TraceFactory.getTraceFactory().getTrace(World.class); // Records whether ASM is around ... so we might use it for delegates - protected static boolean isASMAround; + protected static boolean isASMAround = false; private long errorThreshold; private long warningThreshold; - static { - try { - Class c = Class.forName("org.aspectj.org.objectweb.asm.ClassVisitor"); - isASMAround = true; - } catch (ClassNotFoundException cnfe) { - isASMAround = false; - } - } + +// static { +// try { +// Class c = Class.forName("org.aspectj.org.objectweb.asm.ClassVisitor"); +// isASMAround = true; +// } catch (ClassNotFoundException cnfe) { +// isASMAround = false; +// } +// } /** * A list of RuntimeExceptions containing full stack information for every @@ -1229,8 +1230,9 @@ public abstract class World implements Dump.INode { } public boolean isFastDelegateSupportEnabled() { - ensureAdvancedConfigurationProcessed(); - return fastDelegateSupportEnabled; + return false; // ASM not currently being used +// ensureAdvancedConfigurationProcessed(); +// return fastDelegateSupportEnabled; } public void setIncrementalCompileCouldFollow(boolean b) {incrementalCompileCouldFollow = b;} diff --git a/weaver/src/org/aspectj/weaver/asm/AjASMAttribute.java b/weaver/src/org/aspectj/weaver/asm/AjASMAttribute.java deleted file mode 100644 index 444ac9a10..000000000 --- a/weaver/src/org/aspectj/weaver/asm/AjASMAttribute.java +++ /dev/null @@ -1,64 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import org.aspectj.weaver.AjAttribute; -import org.aspectj.weaver.BCException; -import org.aspectj.org.objectweb.asm.Attribute; -import org.aspectj.org.objectweb.asm.ByteVector; -import org.aspectj.org.objectweb.asm.ClassReader; -import org.aspectj.org.objectweb.asm.ClassWriter; -import org.aspectj.org.objectweb.asm.Label; - -class AjASMAttribute extends Attribute { - - private boolean unpacked = false; - private byte[] data; - - protected AjASMAttribute(String type) { - super(type); - } - - protected AjASMAttribute(String type,byte[] data) { - super(type); - this.data=data; - } - - /** - * Initial read of the attribute is super lightweight - no unpacking - */ - protected Attribute read(ClassReader cr, int off, int len, char[] buf, - int codeOff, Label[] labels) { - byte[] data = new byte[len]; - System.arraycopy(cr.b, off, data, 0, len); - return new AjASMAttribute(this.type, data); - } - - /** - * These attributes are read only, an attempt to write them violates this fundamental assumption. - */ - protected ByteVector write(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals) { - throw new BCException("Attempt to write out the AjASMAttribute for "+this.type); - // return new ByteVector().putByteArray(data, 0, data.length); - } - - public boolean isUnknown() { return false; } - - // --- - - public AjAttribute unpack(AsmDelegate relatedDelegate) { - if (unpacked) throw new BCException("Don't unpack an attribute twice!"); - AjAttribute attr = AjAttribute.read(relatedDelegate.weaverVersion,type,data,relatedDelegate.getSourceContext(),relatedDelegate.getWorld()); - unpacked=true; - return attr; - } -} \ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/asm/AnnVisitor.java b/weaver/src/org/aspectj/weaver/asm/AnnVisitor.java deleted file mode 100644 index 9717d50ad..000000000 --- a/weaver/src/org/aspectj/weaver/asm/AnnVisitor.java +++ /dev/null @@ -1,79 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import org.aspectj.weaver.AnnotationAJ; -import org.aspectj.weaver.AnnotationAnnotationValue; -import org.aspectj.weaver.AnnotationNameValuePair; -import org.aspectj.weaver.AnnotationValue; -import org.aspectj.weaver.ArrayAnnotationValue; -import org.aspectj.weaver.BCException; -import org.aspectj.weaver.ClassAnnotationValue; -import org.aspectj.weaver.EnumAnnotationValue; -import org.aspectj.weaver.SimpleAnnotationValue; -import org.aspectj.org.objectweb.asm.AnnotationVisitor; -import org.aspectj.org.objectweb.asm.Type; - - -/** - * Constructed with an annotation to 'fill in' with the values we encounter whilst visting it. - */ -class AnnVisitor implements AnnotationVisitor { - private AnnotationAJ a; - - public AnnVisitor(AnnotationAJ annotationToPopulate) { - a = annotationToPopulate; - } - - public void visitEnum(String name, String type, String value) { - AnnotationValue val = new EnumAnnotationValue(type,value); - a.addNameValuePair(new AnnotationNameValuePair(name,val)); - } - - public void visit(String name, Object value) { - AnnotationValue val = null; - if (value instanceof Integer) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_INT,value); - if (value instanceof Boolean) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_BOOLEAN,value); - if (value instanceof Long) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_LONG,value); - if (value instanceof Short) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_SHORT,value); - if (value instanceof Double) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_DOUBLE,value); - if (value instanceof Float) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_FLOAT,value); - if (value instanceof Character) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_CHAR,value); - if (value instanceof Byte) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_BYTE,value); - if (value instanceof String) val = new SimpleAnnotationValue(AnnotationValue.STRING,value); - - if (val==null && value instanceof Type) { - String classSignature = ((Type)value).getDescriptor(); - val = new ClassAnnotationValue(classSignature); - } - if (val!=null) { - a.addNameValuePair(new AnnotationNameValuePair(name,val)); - } else { - throw new BCException("Annotation visitor choked on "+name+" = "+value); - } - } - - public AnnotationVisitor visitAnnotation(String name, String desc) { - AnnotationAJ annotation = new AnnotationAJ(desc,a.isRuntimeVisible()); - AnnotationValue val = new AnnotationAnnotationValue(annotation); - a.addNameValuePair(new AnnotationNameValuePair(name,val)); - return new AnnVisitor(annotation); - } - - public AnnotationVisitor visitArray(String name) { - ArrayAnnotationValue val = new ArrayAnnotationValue(); - a.addNameValuePair(new AnnotationNameValuePair(name,val)); - return new ArrayAnnotationVisitor(val,a.isRuntimeVisible()); - } - - public void visitEnd() {} -} \ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/asm/ArrayAnnotationVisitor.java b/weaver/src/org/aspectj/weaver/asm/ArrayAnnotationVisitor.java deleted file mode 100644 index 778f44807..000000000 --- a/weaver/src/org/aspectj/weaver/asm/ArrayAnnotationVisitor.java +++ /dev/null @@ -1,76 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import java.util.ArrayList; -import java.util.List; - -import org.aspectj.weaver.AnnotationAJ; -import org.aspectj.weaver.AnnotationAnnotationValue; -import org.aspectj.weaver.AnnotationValue; -import org.aspectj.weaver.ArrayAnnotationValue; -import org.aspectj.weaver.BCException; -import org.aspectj.weaver.ClassAnnotationValue; -import org.aspectj.weaver.EnumAnnotationValue; -import org.aspectj.weaver.SimpleAnnotationValue; -import org.aspectj.org.objectweb.asm.AnnotationVisitor; -import org.aspectj.org.objectweb.asm.Type; - - -class ArrayAnnotationVisitor implements AnnotationVisitor { - List arrayValues = new ArrayList(); - boolean vis; - ArrayAnnotationValue val; - - public ArrayAnnotationVisitor(ArrayAnnotationValue val,boolean visibility) {this.val = val;this.vis = visibility;} - - public void visit(String name, Object value) { - AnnotationValue val = null; - if (value instanceof Integer) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_INT,value); - if (value instanceof Boolean) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_BOOLEAN,value); - if (value instanceof String) val = new SimpleAnnotationValue(AnnotationValue.STRING,value); - if (value instanceof Long) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_LONG,value); - if (value instanceof Short) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_SHORT,value); - if (value instanceof Double) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_DOUBLE,value); - if (value instanceof Float) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_FLOAT,value); - if (value instanceof Character) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_CHAR,value); - if (value instanceof Byte) val = new SimpleAnnotationValue(AnnotationValue.PRIMITIVE_BYTE,value); - if (val==null && value instanceof Type) { - String classSignature = ((Type)value).getDescriptor(); - val = new ClassAnnotationValue(classSignature); - } - if (val!=null) { - arrayValues.add(val); - } else { - throw new BCException("ArrayAnnotationVisitor choking on "+name+" = "+value); - } - } - - public void visitEnum(String name, String type, String value) { - AnnotationValue val = new EnumAnnotationValue(type,value); - arrayValues.add(val);//new AnnotationNameValuePair(name,val)); - } - public AnnotationVisitor visitAnnotation(String name, String desc) { - AnnotationAJ annotation = new AnnotationAJ(desc,vis); - AnnotationValue val = new AnnotationAnnotationValue(annotation); - arrayValues.add(val); - return new AnnVisitor(annotation); - } - public AnnotationVisitor visitArray(String arg0) { - ArrayAnnotationValue val = new ArrayAnnotationValue(); - arrayValues.add(val); - return new ArrayAnnotationVisitor(val,vis); - } - public void visitEnd() { - val.setValues((AnnotationValue[])arrayValues.toArray(new AnnotationValue[]{})); - } -} \ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/asm/AsmConstants.java b/weaver/src/org/aspectj/weaver/asm/AsmConstants.java deleted file mode 100644 index 483e9205a..000000000 --- a/weaver/src/org/aspectj/weaver/asm/AsmConstants.java +++ /dev/null @@ -1,39 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import org.aspectj.weaver.AjAttribute.Aspect; -import org.aspectj.weaver.AjAttribute.WeaverVersionInfo; -import org.aspectj.org.objectweb.asm.Attribute; - -public class AsmConstants { - - public static Attribute[] ajAttributes; // attributes ASM needs to know about - - static { - ajAttributes = new Attribute[]{ - new AjASMAttribute(Aspect.AttributeName), - new AjASMAttribute(WeaverVersionInfo.AttributeName), - new AjASMAttribute("org.aspectj.weaver.WeaverState"), - new AjASMAttribute("org.aspectj.weaver.PointcutDeclaration"), - new AjASMAttribute("org.aspectj.weaver.Declare"), - new AjASMAttribute("org.aspectj.weaver.TypeMunger"), - new AjASMAttribute("org.aspectj.weaver.Privileged"), - new AjASMAttribute("org.aspectj.weaver.MethodDeclarationLineNumber"), - new AjASMAttribute("org.aspectj.weaver.SourceContext"), - new AjASMAttribute("org.aspectj.weaver.Advice"), - new AjASMAttribute("org.aspectj.weaver.EffectiveSignature"), - new AjASMAttribute("org.aspectj.weaver.AjSynthetic") - }; - } - -} diff --git a/weaver/src/org/aspectj/weaver/asm/AsmDelegate.java b/weaver/src/org/aspectj/weaver/asm/AsmDelegate.java deleted file mode 100644 index 4403cd36c..000000000 --- a/weaver/src/org/aspectj/weaver/asm/AsmDelegate.java +++ /dev/null @@ -1,605 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import org.aspectj.apache.bcel.classfile.GenericSignatureParser; -import org.aspectj.apache.bcel.classfile.Signature; -import org.aspectj.org.objectweb.asm.Attribute; -import org.aspectj.org.objectweb.asm.ClassReader; -import org.aspectj.org.objectweb.asm.Opcodes; -import org.aspectj.weaver.AbstractReferenceTypeDelegate; -import org.aspectj.weaver.AjAttribute; -import org.aspectj.weaver.AnnotationAJ; -import org.aspectj.weaver.AnnotationTargetKind; -import org.aspectj.weaver.AnnotationX; -import org.aspectj.weaver.ISourceContext; -import org.aspectj.weaver.ReferenceType; -import org.aspectj.weaver.ResolvedMember; -import org.aspectj.weaver.ResolvedMemberImpl; -import org.aspectj.weaver.ResolvedPointcutDefinition; -import org.aspectj.weaver.ResolvedType; -import org.aspectj.weaver.SourceContextImpl; -import org.aspectj.weaver.TypeVariable; -import org.aspectj.weaver.UnresolvedType; -import org.aspectj.weaver.WeaverStateInfo; -import org.aspectj.weaver.World; -import org.aspectj.weaver.AjAttribute.DeclareAttribute; -import org.aspectj.weaver.AjAttribute.PointcutDeclarationAttribute; -import org.aspectj.weaver.AjAttribute.PrivilegedAttribute; -import org.aspectj.weaver.AjAttribute.SourceContextAttribute; -import org.aspectj.weaver.AjAttribute.TypeMunger; -import org.aspectj.weaver.AjAttribute.WeaverState; -import org.aspectj.weaver.AjAttribute.WeaverVersionInfo; -import org.aspectj.weaver.bcel.BcelGenericSignatureToTypeXConverter; -import org.aspectj.weaver.bcel.BcelGenericSignatureToTypeXConverter.GenericSignatureFormatException; -import org.aspectj.weaver.patterns.PerClause; - -/** - * A lightweight fast delegate that is an alternative to a BCEL delegate. - * The type being represented is being referenced during a compile - * or weave but is not exposed to the weaver, for example java.lang.String. - * Unnecessary information is not processed - for example the linenumbertable. - * - * What might need visiting that currently isnt? - * - methods so we can get their annotations - * - * Implementation: - * The state in this type is populated by an ASM ClassVisitor, attributes and - * annotations are mostly unpacked lazily. - * - * @author AndyClement - */ -public class AsmDelegate extends AbstractReferenceTypeDelegate { - - public static boolean careAboutMemberAnnotationsAndAttributes = true; - - private World w; - - int classModifiers; - - ResolvedPointcutDefinition[] pointcuts = null; - TypeVariable[] typeVariables; // filled in when signature is parsed - - ResolvedType[] annotationTypes; - AnnotationX[] annotationXs; - List annotations = Collections.EMPTY_LIST; - - ResolvedMember[] methods; - ResolvedMember[] fields; - List attributes = Collections.EMPTY_LIST; - Collection /*of Declare*/ declares = null; - Collection /*of ConcreteTypeMunger*/ typeMungers = null; - Collection /*of ResolvedMember*/ privilegedAccesses = null; - - private int bitflag = 0; // see below for the relevant bits - - private final static int DISCOVERED_POINTCUTS = 0x0001;// guard for lazy initialization of pointcuts - private final static int DISCOVERED_DECLARES = 0x0002;// guard for lazy initialization of declares - private final static int DISCOVERED_TYPEMUNGERS = 0x0004;// guard for lazy initialization of type mungers - private final static int DISCOVERED_PRIVILEGEDACCESSES = 0x0008;// guard for lazy initialization of privileged access list - private final static int DISCOVERED_SOURCECONTEXT = 0x0010;// Sourcecontext is actually held in supertype - private final static int DISCOVERED_WEAVERSTATEINFO = 0x0020; - private final static int SIGNATURE_UNPACKED = 0x0040; - private final static int ANNOTATION_TYPES_CORRECT = 0x0080; - private final static int ANNOTATIONX_CORRECT = 0x0100; - private final static int SUPERSET = 0x0200; - private final static int FIELDSFIXEDUP = 0x0400; - private final static int METHODSFIXEDUP = 0x0800; - - private ResolvedType superclassType = null; - String superclassName = null; - - private ResolvedType[] interfaceTypes = null; - String[] interfaceNames = null; - - // For the fields below, which are set based on attribute or annotation values, - // some are 'eager' and set as the visitor goes through the type. Some are - // lazy and only set when someone requests their value - - // eager: populated from the 'Aspect' attribute - boolean isAspect = false; - PerClause perClause = null; - - // eager: populated from the 'WeaverVersionInfo' attribute - WeaverVersionInfo weaverVersion = AjAttribute.WeaverVersionInfo.UNKNOWN; - - // lazy: populated from the 'WeaverStateInfo' attribute - WeaverStateInfo weaverStateInfo = null; - - // eager: populated from the visitInnerClass method in the TypeVisitor - boolean isAnonymous = false; - boolean isNested = false; - - // eager: populated from the visit method in the TypeVisitor - boolean isGenericType = false; - String declaredSignature = null; - - // eager: populated from the 'Retention' annotation - boolean isRuntimeRetention = false; - String retentionPolicy = null; - - // eager: populated from the 'Target' annotation - boolean canAnnotationTargetType = true; // true unless we learn otherwise - AnnotationTargetKind[] targetKinds = null; - - // ----- - - public AsmDelegate(ReferenceType rt,InputStream inputStream) { - super(rt,false); - w = rt.getWorld(); - try { - new ClassReader(inputStream).accept(new TypeVisitor(this),AsmConstants.ajAttributes,true); - inputStream.close(); - // why-o-why-o-why ? - if ((classModifiers&4096)>0) classModifiers-=4096; // remove SYNTHETIC - if ((classModifiers&131072)>0) classModifiers-=131072; // remove DEPRECATED - } catch (IOException ioe) { - ioe.printStackTrace(); - } - setSourceContext(new SourceContextImpl(this)); - } - - - public boolean isAnnotationStyleAspect() { - return false; - } - - - public boolean canAnnotationTargetType() { - return canAnnotationTargetType; - } - - public AnnotationTargetKind[] getAnnotationTargetKinds() { - return targetKinds; - } - - public boolean isGeneric() { - return isGenericType; - } - - public boolean isAnonymous() { - return isAnonymous; - } - - public boolean isNested() { - return isNested; - } - - public boolean hasAnnotation(UnresolvedType ofType) { - ensureAnnotationsUnpacked(); - for (int i = 0; i < annotationTypes.length; i++) { - if (annotationTypes[i].equals(ofType)) return true; - } - return false; - } - - public AnnotationX[] getAnnotations() { - ensureAnnotationXsUnpacked(); - return annotationXs; - } - - public ResolvedType[] getAnnotationTypes() { - ensureAnnotationsUnpacked(); - return annotationTypes; - } - - private void ensureAnnotationXsUnpacked() { - if ( (bitflag&ANNOTATION_TYPES_CORRECT)!=0 && (bitflag&ANNOTATIONX_CORRECT)!=0) return; - ensureAnnotationsUnpacked(); - if (annotations.size()==0) { - annotationXs = AnnotationX.NONE; - } else { - annotationXs = new AnnotationX[annotations.size()]; - int pos = 0; - for (Iterator iter = annotations.iterator(); iter.hasNext();) { - AnnotationAJ element = (AnnotationAJ) iter.next(); - annotationXs[pos++] = new AnnotationX(element,w); - } - annotations = null; // dont need them any more! - } - bitflag|=ANNOTATIONX_CORRECT; - } - - private void ensureAnnotationsUnpacked() { - if ((bitflag&ANNOTATION_TYPES_CORRECT)!=0) return; - if (annotations.size()==0) { - annotationTypes = ResolvedType.NONE; - } else { - annotationTypes = new ResolvedType[annotations.size()]; - int pos = 0; - for (Iterator iter = annotations.iterator(); iter.hasNext();) { - AnnotationAJ element = (AnnotationAJ) iter.next(); - annotationTypes[pos++] = w.resolve(UnresolvedType.forSignature(element.getTypeSignature())); - } - } - bitflag|=ANNOTATION_TYPES_CORRECT; - } - - public Signature.FormalTypeParameter[] getAllFormals() { - ensureSignatureUnpacked(); - if (formalsForResolution == null) { - return new Signature.FormalTypeParameter[0]; - } else { - return formalsForResolution; - } - } - - // for testing - if we have this attribute, return it - will return null if it doesnt know anything - public AjAttribute[] getAttributes(String name) { - List results = new ArrayList(); - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Attribute element = (Attribute) iter.next(); - if (element.type.equals(name) && (element instanceof AjASMAttribute)) { - results.add(((AjASMAttribute)element).unpack(this)); - } - } - if (results.size()>0) { - return (AjAttribute[])results.toArray(new AjAttribute[]{}); - } - return null; - } - - // for testing - use with the method above - public String[] getAttributeNames() { - String[] strs = new String[attributes.size()]; - int i = 0; - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Attribute element = (Attribute) iter.next(); - strs[i++] = element.type; - } - return strs; - } - - - - public ISourceContext getSourceContext() { - if ((bitflag&DISCOVERED_SOURCECONTEXT)==0) { - bitflag|=DISCOVERED_SOURCECONTEXT; - Attribute foundIt = null; - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Object o = iter.next(); - if (o instanceof AjASMAttribute) { - AjASMAttribute element = (AjASMAttribute) o; - if (element.type.equals(AjAttribute.SourceContextAttribute.AttributeName)) { - foundIt = element; - SourceContextAttribute sca = (SourceContextAttribute)((AjASMAttribute)element).unpack(this); - if (super.getSourceContext()==SourceContextImpl.UNKNOWN_SOURCE_CONTEXT) { - super.setSourceContext(new SourceContextImpl(this)); - } - ((SourceContextImpl)super.getSourceContext()).configureFromAttribute(sca.getSourceFileName(),sca.getLineBreaks()); - break; - } - } - } - if (foundIt!=null) attributes.remove(foundIt); // Save space - } - return super.getSourceContext(); - } - - public WeaverStateInfo getWeaverState() { - if ((bitflag&DISCOVERED_WEAVERSTATEINFO)==0) { - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Object o = iter.next(); - if (o instanceof AjASMAttribute) { - AjASMAttribute element = (AjASMAttribute) o; - if (element.type.equals(AjAttribute.WeaverState.AttributeName)) { - WeaverState wsInfo = (WeaverState)((AjASMAttribute)element).unpack(this); - weaverStateInfo = wsInfo.reify(); - break; - } - } - } - bitflag|=DISCOVERED_WEAVERSTATEINFO; - } - return weaverStateInfo; - } - - public String getDeclaredGenericSignature() { - return declaredSignature; - } - - - public Collection getTypeMungers() { - if ((bitflag&DISCOVERED_TYPEMUNGERS)==0) { - typeMungers = new ArrayList(); - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Object o = iter.next(); - if (o instanceof AjASMAttribute) { - AjASMAttribute element = (AjASMAttribute) o; - if (element.type.equals(AjAttribute.TypeMunger.AttributeName)) { - TypeMunger typeMunger = (TypeMunger)((AjASMAttribute)element).unpack(this); - typeMungers.add(typeMunger.reify(w,getResolvedTypeX())); - } - } - } - bitflag|=DISCOVERED_TYPEMUNGERS; - } - return typeMungers; - } - - public Collection getPrivilegedAccesses() { - if ((bitflag&DISCOVERED_PRIVILEGEDACCESSES)==0) { - privilegedAccesses = new ArrayList(); - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Object o = iter.next(); - if (o instanceof AjASMAttribute) { - AjASMAttribute element = (AjASMAttribute) o; - if (element.type.equals(AjAttribute.PrivilegedAttribute.AttributeName)) { - PrivilegedAttribute privilegedAttribute = (PrivilegedAttribute)((AjASMAttribute)element).unpack(this); - ResolvedMember[] pas =privilegedAttribute.getAccessedMembers(); - for (int i = 0; i < pas.length; i++) { - privilegedAccesses.add(pas[i]); - } - } - } - } - bitflag|=DISCOVERED_PRIVILEGEDACCESSES; - } - return privilegedAccesses; - } - - public TypeVariable[] getTypeVariables() { - ensureSignatureUnpacked(); - return typeVariables; - } - - private Signature.FormalTypeParameter[] formalsForResolution = null; - - private void ensureSignatureUnpacked() { - if ((bitflag&SIGNATURE_UNPACKED)!=0) return; - typeVariables=TypeVariable.NONE; - if (!getResolvedTypeX().getWorld().isInJava5Mode()) { - bitflag|=SIGNATURE_UNPACKED; - return; - } - if (declaredSignature!=null) { - GenericSignatureParser parser = new GenericSignatureParser(); - Signature.ClassSignature cSig = parser.parseAsClassSignature(declaredSignature); - typeVariables = new TypeVariable[cSig.formalTypeParameters.length]; - for (int i = 0; i < typeVariables.length; i++) { - Signature.FormalTypeParameter ftp = cSig.formalTypeParameters[i]; - try { - typeVariables[i] = BcelGenericSignatureToTypeXConverter.formalTypeParameter2TypeVariable( - ftp, - cSig.formalTypeParameters, - getResolvedTypeX().getWorld()); - } catch (GenericSignatureFormatException e) { - // this is a development bug, so fail fast with good info - throw new IllegalStateException( - "While getting the type variables for type " + this.toString() - + " with generic signature " + cSig + - " the following error condition was detected: " + e.getMessage()); - } - } - if (cSig != null) { - formalsForResolution = cSig.formalTypeParameters; - if (isNested()) { - // we have to find any type variables from the outer type before proceeding with resolution. - Signature.FormalTypeParameter[] extraFormals = getFormalTypeParametersFromOuterClass(); - if (extraFormals.length > 0) { - List allFormals = new ArrayList(); - for (int i = 0; i < formalsForResolution.length; i++) { - allFormals.add(formalsForResolution[i]); - } - for (int i = 0; i < extraFormals.length; i++) { - allFormals.add(extraFormals[i]); - } - formalsForResolution = new Signature.FormalTypeParameter[allFormals.size()]; - allFormals.toArray(formalsForResolution); - } - } - Signature.ClassTypeSignature superSig = cSig.superclassSignature; - try { - this.superclassType = - BcelGenericSignatureToTypeXConverter.classTypeSignature2TypeX( - superSig, formalsForResolution, getResolvedTypeX().getWorld()); - bitflag|=SUPERSET; - } catch (GenericSignatureFormatException e) { - // development bug, fail fast with good info - throw new IllegalStateException( - "While determing the generic superclass of " + getResolvedTypeX() - + " with generic signature " + declaredSignature + " the following error was detected: " - + e.getMessage()); - } - this.interfaceTypes = new ResolvedType[cSig.superInterfaceSignatures.length]; - for (int i = 0; i < cSig.superInterfaceSignatures.length; i++) { - try { - this.interfaceTypes[i] = - BcelGenericSignatureToTypeXConverter.classTypeSignature2TypeX( - cSig.superInterfaceSignatures[i], - formalsForResolution, - getResolvedTypeX().getWorld()); - - } catch (GenericSignatureFormatException e) { - // development bug, fail fast with good info - throw new IllegalStateException( - "While determing the generic superinterfaces of " + getResolvedTypeX() - + " with generic signature " + declaredSignature + " the following error was detected: " - + e.getMessage()); - } - } - if (isGeneric()) { - // update resolved typex to point at generic type not raw type. - ReferenceType genericType = (ReferenceType) this.resolvedTypeX.getGenericType(); - //genericType.setSourceContext(this.resolvedTypeX.getSourceContext()); - genericType.setStartPos(this.resolvedTypeX.getStartPos()); - this.resolvedTypeX = genericType; - } - } - - } - bitflag|=SIGNATURE_UNPACKED; - } - - - public ResolvedType getOuterClass() { - if (!isNested()) throw new IllegalStateException("Can't get the outer class of a non-nested type"); - int lastDollar = getResolvedTypeX().getName().lastIndexOf('$'); - String superClassName = getResolvedTypeX().getName().substring(0,lastDollar); - UnresolvedType outer = UnresolvedType.forName(superClassName); - return (ReferenceType) outer.resolve(getResolvedTypeX().getWorld()); - } - - - - public boolean isInterface() { - return (classModifiers & Opcodes.ACC_INTERFACE)!=0; - } - - public String getRetentionPolicy() { - return retentionPolicy; - } - - public boolean isAnnotationWithRuntimeRetention() { - return isRuntimeRetention; - } - - public boolean isAnnotation() { - return (classModifiers & Opcodes.ACC_ANNOTATION)!=0; - } - - public boolean isEnum() { - return(classModifiers & Opcodes.ACC_ENUM)!=0; - } - - public int getModifiers() { - return classModifiers; - } - - - public ResolvedMember[] getDeclaredFields() { - ensureSignatureUnpacked(); - if ((bitflag&FIELDSFIXEDUP)==0) { - for (int i = 0; i < fields.length; i++) { - ((ResolvedMemberImpl)fields[i]).setDeclaringType(getResolvedTypeX()); - } - bitflag|=FIELDSFIXEDUP; - } - return fields; - } - - public ResolvedType[] getDeclaredInterfaces() { - if (interfaceTypes == null) { - if (interfaceNames==null || interfaceNames.length==0) { - interfaceTypes = new ResolvedType[0]; - } else { - interfaceTypes = new ResolvedType[interfaceNames.length]; - for (int i = 0; i < interfaceNames.length; i++) { - interfaceTypes[i] = w.resolve(interfaceNames[i].replace('/','.')); - } - } - interfaceNames=null; - ensureSignatureUnpacked(); - } - return interfaceTypes; - } - - - - public ResolvedMember[] getDeclaredMethods() { - ensureSignatureUnpacked(); - if ((bitflag&METHODSFIXEDUP)==0) { - for (int i = 0; i < methods.length; i++) { - ((ResolvedMemberImpl)methods[i]).setDeclaringType(getResolvedTypeX()); - } - bitflag|=METHODSFIXEDUP; - } - return methods; - } - - public ResolvedMember[] getDeclaredPointcuts() { - if ((bitflag & DISCOVERED_POINTCUTS)==0) { - List pcts = new ArrayList(); - List forRemoval = new ArrayList(); - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Object o = iter.next(); - if (o instanceof AjASMAttribute) { - AjASMAttribute element = (AjASMAttribute) o; - if (element.type.equals(AjAttribute.PointcutDeclarationAttribute.AttributeName)) { - PointcutDeclarationAttribute pointcut = (PointcutDeclarationAttribute)((AjASMAttribute)element).unpack(this); - pcts.add(pointcut.reify()); - forRemoval.add(element); - } - } - } - pointcuts = (ResolvedPointcutDefinition[])pcts.toArray(new ResolvedPointcutDefinition[]{}); - attributes.removeAll(forRemoval); - bitflag|=DISCOVERED_POINTCUTS; - } - return pointcuts; - } - - public Collection getDeclares() { - if ((bitflag & DISCOVERED_DECLARES)==0) { - declares = new ArrayList(); - List forRemoval = new ArrayList(); - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Object o = iter.next(); - if (o instanceof AjASMAttribute) { - AjASMAttribute element = (AjASMAttribute) o; - if (element.type.equals(AjAttribute.DeclareAttribute.AttributeName)) { - DeclareAttribute declare = (DeclareAttribute)((AjASMAttribute)element).unpack(this); - declares.add(declare.getDeclare()); - forRemoval.add(element); - } - } - } - attributes.removeAll(forRemoval); - bitflag|=DISCOVERED_DECLARES;//discoveredDeclares=true; - } - return declares; - } - - public ResolvedType getSuperclass() { - if ((bitflag&SUPERSET)==0) { - if (superclassName == null) { - // this type must be jlObject - superclassType = null; - } else { - superclassType = w.resolve(superclassName.replace('/','.')); - } - ensureSignatureUnpacked(); - superclassName=null; - bitflag|=SUPERSET; - } - return superclassType; - } - - public PerClause getPerClause() { - return perClause; - } - - public boolean isAspect() { - return isAspect; - } - - World getWorld() { return w; } - - // --- - // 14-Feb-06 the AsmDelegate is only for types that won't be 'woven', so they can't be a target - // to have new annotations added - public void addAnnotation(AnnotationX annotationX) { /* this method left blank on purpose*/ } - - public void ensureDelegateConsistent() { - // doesnt need to do anything until methods like addAnnotation() are implemented (i.e. methods that - // modify the delegate such that it differs from the on-disk contents) - } - -} diff --git a/weaver/src/org/aspectj/weaver/asm/AsmField.java b/weaver/src/org/aspectj/weaver/asm/AsmField.java deleted file mode 100644 index d841a170a..000000000 --- a/weaver/src/org/aspectj/weaver/asm/AsmField.java +++ /dev/null @@ -1,110 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - - -import org.aspectj.apache.bcel.classfile.GenericSignatureParser; -import org.aspectj.apache.bcel.classfile.Signature; -import org.aspectj.weaver.AnnotationAJ; -import org.aspectj.weaver.AnnotationX; -import org.aspectj.weaver.AnnotationsForMemberHolder; -import org.aspectj.weaver.ResolvedMemberImpl; -import org.aspectj.weaver.ResolvedType; -import org.aspectj.weaver.UnresolvedType; -import org.aspectj.weaver.bcel.BcelGenericSignatureToTypeXConverter; -import org.aspectj.weaver.bcel.BcelGenericSignatureToTypeXConverter.GenericSignatureFormatException; - -public class AsmField extends ResolvedMemberImpl { - - private AsmDelegate classDelegate; - private AnnotationsForMemberHolder annos; - - private String genericSignature = null; - private boolean unpackedGenericSignature = false; - private UnresolvedType genericFieldType = null; - - public void setClassDelegate(AsmDelegate del) { classDelegate = del;} - public void setGenericSignature(String sig) { genericSignature = sig; } - - public AsmField(Kind kind, UnresolvedType declaringType,int modifiers,String name,String signature) { - super(kind,declaringType,modifiers,name,signature); - } - - public UnresolvedType getGenericReturnType() { - unpackGenericSignature(); - return genericFieldType; - } - - private void unpackGenericSignature() { - if (unpackedGenericSignature) { return; } - if (!classDelegate.getWorld().isInJava5Mode()) { - this.genericFieldType = getReturnType(); - return; - } - unpackedGenericSignature = true; - String gSig = genericSignature; - if (gSig != null) { - // get from generic - Signature.FieldTypeSignature fts = new GenericSignatureParser().parseAsFieldSignature(gSig); -// Signature.ClassSignature genericTypeSig = classDelegate.getGenericClassTypeSignature(); -// -// Signature.ClassSignature cSig = parser.parseAsClassSignature(declaredSignature); - - Signature.FormalTypeParameter[] parentFormals = classDelegate.getAllFormals(); - Signature.FormalTypeParameter[] typeVars = - ((parentFormals == null) ? new Signature.FormalTypeParameter[0] : parentFormals);//.formalTypeParameters); - Signature.FormalTypeParameter[] formals = - new Signature.FormalTypeParameter[parentFormals.length + typeVars.length]; - // put method formal in front of type formals for overriding in - // lookup - System.arraycopy(typeVars, 0, formals, 0, typeVars.length); - System.arraycopy(parentFormals, 0, formals, typeVars.length,parentFormals.length); - - try { - genericFieldType = BcelGenericSignatureToTypeXConverter - .fieldTypeSignature2TypeX(fts, formals, classDelegate.getWorld()); - } catch (GenericSignatureFormatException e) { - // development bug, fail fast with good info - throw new IllegalStateException( - "While determing the generic field type of " - + this.toString() + " with generic signature " - + gSig + " the following error was detected: " - + e.getMessage()); - } - } else { - genericFieldType = getReturnType(); - } - } - - - // --- - // annotation manipulation - public void addAnAnnotation(AnnotationAJ oneAnnotation) { - if (annos==null) annos = new AnnotationsForMemberHolder(classDelegate.getWorld()); - annos.addAnnotation(oneAnnotation); - } - - public AnnotationX[] getAnnotations() { - if (annos==null) return AnnotationX.NONE; - return annos.getAnnotations(); - } - - public ResolvedType[] getAnnotationTypes() { - if (annos==null) return ResolvedType.NONE; - return annos.getAnnotationTypes(); - } - - public boolean hasAnnotation(UnresolvedType ofType) { - if (annos==null) return false; - return annos.hasAnnotation(ofType); - } -} diff --git a/weaver/src/org/aspectj/weaver/asm/AsmMethod.java b/weaver/src/org/aspectj/weaver/asm/AsmMethod.java deleted file mode 100644 index 896e8d3f8..000000000 --- a/weaver/src/org/aspectj/weaver/asm/AsmMethod.java +++ /dev/null @@ -1,272 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import org.aspectj.apache.bcel.classfile.GenericSignatureParser; -import org.aspectj.apache.bcel.classfile.Signature; -import org.aspectj.apache.bcel.classfile.Signature.TypeVariableSignature; -import org.aspectj.weaver.AjAttribute; -import org.aspectj.weaver.AnnotationAJ; -import org.aspectj.weaver.AnnotationX; -import org.aspectj.weaver.AnnotationsForMemberHolder; -import org.aspectj.weaver.ISourceContext; -import org.aspectj.weaver.ResolvedMemberImpl; -import org.aspectj.weaver.ResolvedType; -import org.aspectj.weaver.ShadowMunger; -import org.aspectj.weaver.TypeVariable; -import org.aspectj.weaver.UnresolvedType; -import org.aspectj.weaver.World; -import org.aspectj.weaver.AjAttribute.AdviceAttribute; -import org.aspectj.weaver.AjAttribute.EffectiveSignatureAttribute; -import org.aspectj.weaver.AjAttribute.MethodDeclarationLineNumberAttribute; -import org.aspectj.weaver.bcel.BcelGenericSignatureToTypeXConverter; -import org.aspectj.weaver.bcel.Utility; -import org.aspectj.weaver.bcel.BcelGenericSignatureToTypeXConverter.GenericSignatureFormatException; -import org.aspectj.org.objectweb.asm.Attribute; - -public class AsmMethod extends ResolvedMemberImpl { - - // genericized version of return and parameter types - private boolean unpackedGenericSignature = false; - private String genericSignature = null; - private UnresolvedType genericReturnType = null; - private UnresolvedType[] genericParameterTypes = null; - private boolean canBeParameterized = false; - - private AnnotationsForMemberHolder annos; - - private EffectiveSignatureAttribute esAttribute = null; - private MethodDeclarationLineNumberAttribute mdlnAttribute = null; - private ShadowMunger shadowMunger = null; - private AsmDelegate classDelegate; - public List /*Attribute*/ attributes = Collections.EMPTY_LIST; - private boolean unpackedAspectJAttributes = false; - - - public AsmMethod(Kind kind, UnresolvedType declaringType,int modifiers,String name,String signature) { - super(kind,declaringType,modifiers,name,signature); - } - - public void setClassDelegate(AsmDelegate del) { classDelegate = del;} - public void setGenericSignature(String sig) { genericSignature = sig; } - - public boolean canBeParameterized() { - unpackGenericSignature(); - return canBeParameterized; - } - - public UnresolvedType[] getGenericParameterTypes() { - unpackGenericSignature(); - return genericParameterTypes; - } - - public UnresolvedType getGenericReturnType() { - unpackGenericSignature(); - return genericReturnType; - } - - - public World getWorld() { - return classDelegate.getWorld(); - } - - - private void unpackGenericSignature() { - if (unpackedGenericSignature) return; - if (!getWorld().isInJava5Mode()) { - this.genericReturnType = getReturnType(); - this.genericParameterTypes = getParameterTypes(); - return; - } - // ok, we have work to do... - unpackedGenericSignature = true; - String gSig = genericSignature; - if (gSig != null) { - Signature.MethodTypeSignature mSig = new GenericSignatureParser().parseAsMethodSignature(gSig); - if (mSig.formalTypeParameters.length > 0) { - // generic method declaration - canBeParameterized = true; - } - Signature.FormalTypeParameter[] parentFormals = classDelegate.getAllFormals(); - Signature.FormalTypeParameter[] formals = new - Signature.FormalTypeParameter[parentFormals.length + mSig.formalTypeParameters.length]; - // put method formal in front of type formals for overriding in lookup - System.arraycopy(mSig.formalTypeParameters,0,formals,0,mSig.formalTypeParameters.length); - System.arraycopy(parentFormals,0,formals,mSig.formalTypeParameters.length,parentFormals.length); - - typeVariables = new TypeVariable[mSig.formalTypeParameters.length]; - for (int i = 0; i < typeVariables.length; i++) { - Signature.FormalTypeParameter methodFtp = mSig.formalTypeParameters[i]; - try { - typeVariables[i] = BcelGenericSignatureToTypeXConverter.formalTypeParameter2TypeVariable( - methodFtp, - mSig.formalTypeParameters, - getWorld()); - } catch (GenericSignatureFormatException e) { - // this is a development bug, so fail fast with good info - throw new IllegalStateException( - "While getting the type variables for method " + this.toString() - + " with generic signature " + mSig + - " the following error condition was detected: " + e.getMessage()); - } - } - - - - Signature.TypeSignature returnTypeSignature = mSig.returnType; - try { - genericReturnType = BcelGenericSignatureToTypeXConverter.typeSignature2TypeX( - returnTypeSignature, formals, - getWorld()); - } catch (GenericSignatureFormatException e) { -// development bug, fail fast with good info - throw new IllegalStateException( - "While determing the generic return type of " + this.toString() - + " with generic signature " + gSig + " the following error was detected: " - + e.getMessage()); - } - Signature.TypeSignature[] paramTypeSigs = mSig.parameters; - genericParameterTypes = new UnresolvedType[paramTypeSigs.length]; - for (int i = 0; i < paramTypeSigs.length; i++) { - try { - genericParameterTypes[i] = - BcelGenericSignatureToTypeXConverter.typeSignature2TypeX( - paramTypeSigs[i],formals,getWorld()); - } catch (GenericSignatureFormatException e) { -// development bug, fail fast with good info - throw new IllegalStateException( - "While determining the generic parameter types of " + this.toString() - + " with generic signature " + gSig + " the following error was detected: " - + e.getMessage()); - } - if (paramTypeSigs[i] instanceof TypeVariableSignature) { - canBeParameterized = true; - } - } - } else { - genericReturnType = getReturnType(); - genericParameterTypes = getParameterTypes(); - } - } - - public EffectiveSignatureAttribute getEffectiveSignature() { - unpackAspectJAttributes(); - return esAttribute; - } - - public ShadowMunger getAssociatedShadowMunger() { - unpackAspectJAttributes(); - return shadowMunger; - } - - public int getDeclarationLineNumber() { - unpackAspectJAttributes(); - if (mdlnAttribute==null) return -1; - else return (mdlnAttribute.getLineNumber()); - } - - public boolean isAjSynthetic() { - unpackAspectJAttributes(); - return super.isAjSynthetic(); - } - - private void unpackAspectJAttributes() { - if (unpackedAspectJAttributes) return; - List forRemoval = new ArrayList(); - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Attribute element = (Attribute) iter.next(); - if (element instanceof AjASMAttribute) { - if (element.type.equals(AjAttribute.AjSynthetic.AttributeName)) { - setAjSynthetic(true); - forRemoval.add(element); - } - if (element.type.equals(AjAttribute.MethodDeclarationLineNumberAttribute.AttributeName)) { - mdlnAttribute = (MethodDeclarationLineNumberAttribute)((AjASMAttribute)element).unpack(classDelegate); - forRemoval.add(element); - } - if (element.type.equals(AjAttribute.AdviceAttribute.AttributeName)) { - shadowMunger = ((AdviceAttribute)((AjASMAttribute)element).unpack(classDelegate)).reify(this,getWorld()); - forRemoval.add(element); - } - if (element.type.equals(AjAttribute.EffectiveSignatureAttribute.AttributeName)) { - esAttribute = (EffectiveSignatureAttribute)((AjASMAttribute)element).unpack(classDelegate); - forRemoval.add(element); - } - } - } - attributes.remove(forRemoval); - unpackedAspectJAttributes = true; - } - - // for testing - if we have this attribute, return it - public AjAttribute[] getAttributes(String name) { - List results = new ArrayList(); - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Attribute element = (Attribute) iter.next(); - if (element.type.equals(name) && (element instanceof AjASMAttribute)) { - results.add(((AjASMAttribute)element).unpack(this.classDelegate)); - } - } - return (AjAttribute[])results.toArray(new AjAttribute[]{}); - } - - // for testing - use with the method above - public String[] getAttributeNames(boolean onlyIncludeAjOnes) { - List strs = new ArrayList(); - int i = 0; - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Attribute element = (Attribute) iter.next(); - if (!onlyIncludeAjOnes || (element.type.startsWith(AjAttribute.AttributePrefix) && element instanceof AjASMAttribute)) - strs.add(element.type); - } - return (String[])strs.toArray(new String[]{}); - } - - public String[] getParameterNames() { - if (super.getParameterNames()==null) setParameterNames(Utility.makeArgNames(getArity())); - return super.getParameterNames(); - } - - public ISourceContext getSourceContext() { - return classDelegate.getSourceContext(); - } - - // --- - // annotation manipulation - - public void addAnAnnotation(AnnotationAJ oneAnnotation) { - if (annos==null) annos = new AnnotationsForMemberHolder(getWorld()); - annos.addAnnotation(oneAnnotation); - } - - public AnnotationX[] getAnnotations() { - if (annos==null) return AnnotationX.NONE; - return annos.getAnnotations(); - } - - public ResolvedType[] getAnnotationTypes() { - if (annos==null) return ResolvedType.NONE; - return annos.getAnnotationTypes(); - } - - public boolean hasAnnotation(UnresolvedType ofType) { - if (annos==null) return false; - return annos.hasAnnotation(ofType); - } - // --- - -} diff --git a/weaver/src/org/aspectj/weaver/asm/EmptyVisitor.java b/weaver/src/org/aspectj/weaver/asm/EmptyVisitor.java deleted file mode 100644 index 89776027e..000000000 --- a/weaver/src/org/aspectj/weaver/asm/EmptyVisitor.java +++ /dev/null @@ -1,28 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import org.aspectj.org.objectweb.asm.AnnotationVisitor; - -class EmptyVisitor implements AnnotationVisitor { - - public void visit(String arg0, Object arg1) {} - - public void visitEnum(String arg0, String arg1, String arg2) {} - - public AnnotationVisitor visitAnnotation(String arg0, String arg1) {return this;} - - public AnnotationVisitor visitArray(String arg0) {return this;} - - public void visitEnd() {} - -} \ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/asm/FdVisitor.java b/weaver/src/org/aspectj/weaver/asm/FdVisitor.java deleted file mode 100644 index 7263f0297..000000000 --- a/weaver/src/org/aspectj/weaver/asm/FdVisitor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - - -import org.aspectj.org.objectweb.asm.AnnotationVisitor; -import org.aspectj.org.objectweb.asm.Attribute; -import org.aspectj.org.objectweb.asm.FieldVisitor; -import org.aspectj.weaver.AnnotationAJ; - -/** - * Constructed with an AsmField to 'fill in' with attributes and annotations - */ -class FdVisitor implements FieldVisitor { - AsmField field; - public FdVisitor(AsmField rm) { field = rm;} - - public AnnotationVisitor visitAnnotation(String desc, boolean isVisible) { - AnnotationAJ annotation = new AnnotationAJ(desc,isVisible); - field.addAnAnnotation(annotation); -// if (am.annotations==null) am.annotations = new ArrayList(); -// am.annotations.add(annotation); - return new AnnVisitor(annotation); - } - - public void visitAttribute(Attribute arg0) {} - public void visitEnd() {} - -} \ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/asm/MethVisitor.java b/weaver/src/org/aspectj/weaver/asm/MethVisitor.java deleted file mode 100644 index 74a510716..000000000 --- a/weaver/src/org/aspectj/weaver/asm/MethVisitor.java +++ /dev/null @@ -1,72 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import java.util.ArrayList; -import java.util.Collections; - -import org.aspectj.weaver.AnnotationAJ; -import org.aspectj.org.objectweb.asm.AnnotationVisitor; -import org.aspectj.org.objectweb.asm.Attribute; -import org.aspectj.org.objectweb.asm.Label; -import org.aspectj.org.objectweb.asm.MethodVisitor; - -/** - * Constructed with an AsmMethod to 'fill in' with attributes and annotations. - * Bit of a shame we can't "terminate" before visiting the code as we know - * we aren't interested in any of it. - */ -class MethVisitor implements MethodVisitor { - AsmMethod am; - - public MethVisitor(AsmMethod rm) { am = rm;} - - public AnnotationVisitor visitAnnotationDefault() { - return new EmptyVisitor(); // means we are ignoring default values - is that a problem? - } - - public AnnotationVisitor visitAnnotation(String desc, boolean isVisible) { - AnnotationAJ annotation = new AnnotationAJ(desc,isVisible); - am.addAnAnnotation(annotation); - return new AnnVisitor(annotation); - } - - public void visitAttribute(Attribute attr) { - if (am.attributes==Collections.EMPTY_LIST) am.attributes = new ArrayList(); - am.attributes.add(attr); - } - - public AnnotationVisitor visitParameterAnnotation(int arg0, String arg1, boolean arg2) { - return null; // AJ doesnt support these yet - } - - public void visitCode() {} - public void visitInsn(int arg0) {} - public void visitIntInsn(int arg0, int arg1) {} - public void visitVarInsn(int arg0, int arg1) {} - public void visitTypeInsn(int arg0, String arg1) {} - public void visitFieldInsn(int arg0, String arg1, String arg2, String arg3) {} - public void visitMethodInsn(int arg0, String arg1, String arg2, String arg3) {} - public void visitJumpInsn(int arg0, Label arg1) {} - public void visitLabel(Label arg0) {} - public void visitLdcInsn(Object arg0) {} - public void visitIincInsn(int arg0, int arg1) {} - public void visitTableSwitchInsn(int arg0, int arg1, Label arg2, Label[] arg3) {} - public void visitLookupSwitchInsn(Label arg0, int[] arg1, Label[] arg2) {} - public void visitMultiANewArrayInsn(String arg0, int arg1) {} - public void visitTryCatchBlock(Label arg0, Label arg1, Label arg2, String arg3) {} - public void visitLocalVariable(String arg0, String arg1, String arg2, Label arg3, Label arg4, int arg5) {} - public void visitLineNumber(int arg0, Label arg1) {} - public void visitMaxs(int arg0, int arg1) {} - public void visitEnd() {} - -} \ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/asm/TypeVisitor.java b/weaver/src/org/aspectj/weaver/asm/TypeVisitor.java deleted file mode 100644 index 31cac4ded..000000000 --- a/weaver/src/org/aspectj/weaver/asm/TypeVisitor.java +++ /dev/null @@ -1,222 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.asm; - -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.aspectj.weaver.AnnotationAJ; -import org.aspectj.weaver.AnnotationNameValuePair; -import org.aspectj.weaver.AnnotationTargetKind; -import org.aspectj.weaver.AnnotationValue; -import org.aspectj.weaver.ArrayAnnotationValue; -import org.aspectj.weaver.ResolvedMember; -import org.aspectj.weaver.UnresolvedType; -import org.aspectj.weaver.AjAttribute.Aspect; -import org.aspectj.weaver.AjAttribute.WeaverVersionInfo; -import org.aspectj.org.objectweb.asm.AnnotationVisitor; -import org.aspectj.org.objectweb.asm.Attribute; -import org.aspectj.org.objectweb.asm.ClassVisitor; -import org.aspectj.org.objectweb.asm.FieldVisitor; -import org.aspectj.org.objectweb.asm.MethodVisitor; - - -public class TypeVisitor implements ClassVisitor { - - private final AsmDelegate relatedDelegate; - - // Populated as we go along, then dealt with at the end of the visit - setting - // state on the relatedDelegate as appropriate - private List methodsList = new ArrayList(); - private List fieldsList = new ArrayList(); - private List attributes = new ArrayList(); - protected List annotations = new ArrayList(); - - private String name = null; - - TypeVisitor(AsmDelegate delegate) { - relatedDelegate = delegate; - } - - public void visit(int version, int mods, String name, String signature, String superclassname, String[] interfacenames) { - relatedDelegate.superclassName = superclassname; - relatedDelegate.interfaceNames = interfacenames; - relatedDelegate.classModifiers = mods; - relatedDelegate.declaredSignature = signature; // Ljava/lang/Object;Ljava/util/Collection; - relatedDelegate.isGenericType = (signature!=null && signature.charAt(0)=='<'); -// relatedDelegate.erasureSignature=name; // java/util/List; - this.name = name; - } - - public AnnotationVisitor visitAnnotation(String typeSignature, boolean vis) { - AnnotationAJ annotation = new AnnotationAJ(typeSignature,vis); - annotations.add(annotation); - return new AnnVisitor(annotation); - } - - /** - * Store up the attributes - the only one to look out for is the version one, - * as it will tell us the format of all the others. - */ - public void visitAttribute(Attribute attr) { -// System.err.println("encountered attribute "+attr.type); - if (attr.type.equals(WeaverVersionInfo.AttributeName)) { - WeaverVersionInfo wv = (WeaverVersionInfo)((AjASMAttribute)attr).unpack(relatedDelegate); - relatedDelegate.weaverVersion = wv; - } else { - attributes.add(attr); - } - } - - public void visitInnerClass(String name, String outer, String inner, int access) { - if (name.equals(this.name)) { - relatedDelegate.isNested=true; - relatedDelegate.isAnonymous = (inner==null); - } - } - - public FieldVisitor visitField(int modifiers, String name, String descType, String signature, Object value) { - AsmField rm = new AsmField(ResolvedMember.FIELD,this.relatedDelegate.getResolvedTypeX(),modifiers,name,descType); - rm.setGenericSignature(signature); - rm.setClassDelegate(relatedDelegate); - fieldsList.add(rm); - if (AsmDelegate.careAboutMemberAnnotationsAndAttributes) { - return new FdVisitor(rm); - } else { - return null; - } - } - - public MethodVisitor visitMethod(int modifiers, String name, String desc, String signature, String[] exceptions) { - if (Modifier.isInterface(relatedDelegate.getModifiers()) && Modifier.isAbstract(modifiers)) // wtf? (see testIterator in WorldTestCase) - modifiers = modifiers | Modifier.INTERFACE; - AsmMethod rm = new AsmMethod(ResolvedMember.METHOD,this.relatedDelegate.getResolvedTypeX(),modifiers,name,desc); - rm.setGenericSignature(signature); - rm.setClassDelegate(relatedDelegate); - if (exceptions!=null && exceptions.length!=0) { - UnresolvedType[] excs = new UnresolvedType[exceptions.length]; - for (int i = 0; i < exceptions.length; i++) { - excs[i]=UnresolvedType.forSignature("L"+exceptions[i]+";"); - } - rm.setCheckedExceptions(excs); - } - methodsList.add(rm); - if (AsmDelegate.careAboutMemberAnnotationsAndAttributes) { - return new MethVisitor(rm); - } else { - return null; - } - } - - public void visitSource(String sourcefilename, String debug) { - relatedDelegate.setSourcefilename(sourcefilename); - } - - public void visitOuterClass(String arg0, String arg1, String arg2) {/*DeliberatelyBlank*/} - - // --- - - /** - * Pick through what we learned whilst visiting the type - and set what we need to on the - * related delegate. Discard what we can now. - */ - public void visitEnd() { - relatedDelegate.methods = (ResolvedMember[])methodsList.toArray(new ResolvedMember[]{}); - methodsList.clear(); - relatedDelegate.fields = (ResolvedMember[])fieldsList.toArray(new ResolvedMember[]{}); - fieldsList.clear(); - // Fast pass of the attributes, unpacking lightweight ones. Fast ones are: - // Aspect - if (attributes.size()>0) { - relatedDelegate.attributes = new ArrayList(); - for (Iterator iter = attributes.iterator(); iter.hasNext();) { - Attribute element = (Attribute) iter.next(); - //System.err.println("Processing:"+element); - if (element instanceof AjASMAttribute) { - // Aspect - if (element.type.equals(Aspect.AttributeName)) { - Aspect aspectAttribute = (Aspect)((AjASMAttribute)element).unpack(relatedDelegate); - relatedDelegate.perClause = aspectAttribute.reify(null); // param not used - relatedDelegate.isAspect = true; - continue; - } - } - relatedDelegate.attributes.add(element); - } - } - - // Similar thing for annotations, unpacking lightweight/common ones. These are: - // Retention - // For annotations, retention policy should default to CLASS if not set. - boolean retentionPolicySet = false; - if (annotations.size()>0) relatedDelegate.annotations = new ArrayList(); - for (Iterator iter = annotations.iterator(); iter.hasNext();) { - AnnotationAJ element = (AnnotationAJ) iter.next(); - - // Retention - if (element.getTypeSignature().equals(AnnotationRetention)) { - relatedDelegate.retentionPolicy = element.getStringValueOf("value"); - relatedDelegate.isRuntimeRetention = relatedDelegate.retentionPolicy.equals("RUNTIME"); - retentionPolicySet=true; -// continue; // possible optimization - dont store them, we've pulled out all the relevant stuff - } - - // Target - if (element.getTypeSignature().equals(AnnotationTarget)) { - setDelegateFieldsForAnnotationTarget(element.getNameValuePairs()); -// continue; // possible optimization - dont store them, we've pulled out all the relevant stuff - } - - relatedDelegate.annotations.add(element); - } - if (relatedDelegate.isAnnotation() && !retentionPolicySet) { relatedDelegate.retentionPolicy="CLASS"; relatedDelegate.isRuntimeRetention=false;} - } - - private void setDelegateFieldsForAnnotationTarget(List/*AnnotationNameValuePair*/ nvpairs) { - // Should only be one nvpair, thats the value - if (nvpairs.size()>0) { - boolean canTargetType = false; - ArrayAnnotationValue targetsArray = (ArrayAnnotationValue)((AnnotationNameValuePair)nvpairs.get(0)).getValue(); - AnnotationValue[] targets = targetsArray.getValues(); - List targetKinds = new ArrayList(); - for (int i = 0; i < targets.length; i++) { - String targetKind = targets[i].stringify(); - if (targetKind.equals("ANNOTATION_TYPE")) { - targetKinds.add(AnnotationTargetKind.ANNOTATION_TYPE); - } else if (targetKind.equals("CONSTRUCTOR")) { - targetKinds.add(AnnotationTargetKind.CONSTRUCTOR); - } else if (targetKind.equals("FIELD")) { - targetKinds.add(AnnotationTargetKind.FIELD); - } else if (targetKind.equals("LOCAL_VARIABLE")) { - targetKinds.add(AnnotationTargetKind.LOCAL_VARIABLE); - } else if (targetKind.equals("METHOD")) { - targetKinds.add(AnnotationTargetKind.METHOD); - } else if (targetKind.equals("PACKAGE")) { - targetKinds.add(AnnotationTargetKind.PACKAGE); - } else if (targetKind.equals("PARAMETER")) { - targetKinds.add(AnnotationTargetKind.PARAMETER); - } else if (targetKind.equals("TYPE")) { - targetKinds.add(AnnotationTargetKind.TYPE); canTargetType = true; - } - } - relatedDelegate.targetKinds = (AnnotationTargetKind[])targetKinds.toArray(new AnnotationTargetKind[]{}); - relatedDelegate.canAnnotationTargetType = canTargetType; - } - } - - // --- - private static final String AnnotationRetention = "Ljava/lang/annotation/Retention;"; - private static final String AnnotationTarget = "Ljava/lang/annotation/Target;"; - -} \ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java index bee6f126e..a5ac53aef 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java @@ -71,7 +71,6 @@ import org.aspectj.weaver.ResolvedTypeMunger; import org.aspectj.weaver.UnresolvedType; import org.aspectj.weaver.World; import org.aspectj.weaver.AjAttribute.Aspect; -import org.aspectj.weaver.asm.AsmDelegate; import org.aspectj.weaver.patterns.DeclareAnnotation; import org.aspectj.weaver.patterns.DeclareParents; import org.aspectj.weaver.patterns.FormalBinding; @@ -312,29 +311,29 @@ public class BcelWorld extends World implements Repository { ensureAdvancedConfigurationProcessed(); //UnwovenClassFile classFile = (UnwovenClassFile)sourceJavaClasses.get(name); //if (classFile != null) jc = classFile.getJavaClass(); - if (isFastDelegateSupportEnabled() && classPath!=null && !ty.needsModifiableDelegate() && isNotOnPackageRestrictedList(name)) { - ClassPathManager.ClassFile cf = classPath.find(ty); - if (cf==null) { - return null; - } else { - ReferenceTypeDelegate delegate = buildAsmDelegate(ty,cf); - if (fallbackToLoadingBcelDelegatesForAspects && delegate.isAspect()) { - // bugger - pr135001 - we can't inline around advice from an aspect because we don't load the instructions. - // fixing this quick to get AJDT upgraded with a good 1.5.2dev build. - // other fixes would be: - // 1. record that we are loading the superclass for an aspect, so we know to make it a BCEL delegate - // - // the 'fix' here is only reasonable because there are many less aspects than classes! - - // Create a BCEL delegate - if (jc == null) jc = lookupJavaClass(classPath, name); - if (jc == null) return delegate; // worrying situation ?!? - else return buildBcelDelegate(ty, jc, false); - } else { - return delegate; - } - } - } else { +// if (isFastDelegateSupportEnabled() && classPath!=null && !ty.needsModifiableDelegate() && isNotOnPackageRestrictedList(name)) { +// ClassPathManager.ClassFile cf = classPath.find(ty); +// if (cf==null) { +// return null; +// } else { +// ReferenceTypeDelegate delegate = buildAsmDelegate(ty,cf); +// if (fallbackToLoadingBcelDelegatesForAspects && delegate.isAspect()) { +// // bugger - pr135001 - we can't inline around advice from an aspect because we don't load the instructions. +// // fixing this quick to get AJDT upgraded with a good 1.5.2dev build. +// // other fixes would be: +// // 1. record that we are loading the superclass for an aspect, so we know to make it a BCEL delegate +// // +// // the 'fix' here is only reasonable because there are many less aspects than classes! +// +// // Create a BCEL delegate +// if (jc == null) jc = lookupJavaClass(classPath, name); +// if (jc == null) return delegate; // worrying situation ?!? +// else return buildBcelDelegate(ty, jc, false); +// } else { +// return delegate; +// } +// } +// } else { if (jc == null) { jc = lookupJavaClass(classPath, name); } @@ -343,19 +342,19 @@ public class BcelWorld extends World implements Repository { } else { return buildBcelDelegate(ty, jc, false); } - } +// } } - private ReferenceTypeDelegate buildAsmDelegate(ReferenceType type,ClassPathManager.ClassFile t) { - AsmDelegate asmDelegate; - try { - asmDelegate = new AsmDelegate(type,t.getInputStream()); - } catch (IOException e) { - e.printStackTrace(); - return null; - } - return asmDelegate; - } +// private ReferenceTypeDelegate buildAsmDelegate(ReferenceType type,ClassPathManager.ClassFile t) { +// AsmDelegate asmDelegate; +// try { +// asmDelegate = new AsmDelegate(type,t.getInputStream()); +// } catch (IOException e) { +// e.printStackTrace(); +// return null; +// } +// return asmDelegate; +// } public BcelObjectType buildBcelDelegate(ReferenceType resolvedTypeX, JavaClass jc, boolean exposedToWeaver) { BcelObjectType ret = new BcelObjectType(resolvedTypeX, jc, exposedToWeaver); diff --git a/weaver/src/org/aspectj/weaver/tools/IsAtAspectAnnotationVisitor.java b/weaver/src/org/aspectj/weaver/tools/IsAtAspectAnnotationVisitor.java deleted file mode 100644 index d15c2f8d8..000000000 --- a/weaver/src/org/aspectj/weaver/tools/IsAtAspectAnnotationVisitor.java +++ /dev/null @@ -1,148 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Eugene Kuleshov, Ron Bodkin initial implementation - * ******************************************************************/ -package org.aspectj.weaver.tools; - -import org.aspectj.org.objectweb.asm.AnnotationVisitor; -import org.aspectj.org.objectweb.asm.Attribute; -import org.aspectj.org.objectweb.asm.ClassVisitor; -import org.aspectj.org.objectweb.asm.FieldVisitor; -import org.aspectj.org.objectweb.asm.Label; -import org.aspectj.org.objectweb.asm.MethodVisitor; - -// should extend EmptyVisitor but it's not currently included with AspectJ's ASM... -public class IsAtAspectAnnotationVisitor implements ClassVisitor, FieldVisitor, - MethodVisitor, AnnotationVisitor { - private boolean isAspect = false; - - public AnnotationVisitor visitAnnotation(String desc, boolean visible) { - if ("Lorg/aspectj/lang/annotation/Aspect;".equals(desc)) { - isAspect = true; - } - return this; - } - - public FieldVisitor visitField(int access, String name, String desc, - String signature, Object value) { - return null; - } - - public MethodVisitor visitMethod(int access, String name, String desc, - String signature, String[] exceptions) { - return null; - } - - public boolean isAspect() { - return isAspect; - } - - public void visit(int version, int access, String name, String signature, - String superName, String[] interfaces) { - } - - public void visitSource(String source, String debug) { - } - - public void visitOuterClass(String owner, String name, String desc) { - } - - public void visitAttribute(Attribute attr) { - } - - public void visitInnerClass(String name, String outerName, - String innerName, int access) { - } - - public void visitEnd() { - } - - public AnnotationVisitor visitAnnotationDefault() { - return this; - } - - public AnnotationVisitor visitParameterAnnotation(int parameter, - String desc, boolean visible) { - return this; - } - - public void visitCode() { - } - - public void visitInsn(int opcode) { - } - - public void visitIntInsn(int opcode, int operand) { - } - - public void visitVarInsn(int opcode, int var) { - } - - public void visitTypeInsn(int opcode, String desc) { - } - - public void visitFieldInsn(int opcode, String owner, String name, - String desc) { - } - - public void visitMethodInsn(int opcode, String owner, String name, - String desc) { - } - - public void visitJumpInsn(int opcode, Label label) { - } - - public void visitLabel(Label label) { - } - - public void visitLdcInsn(Object cst) { - } - - public void visitIincInsn(int var, int increment) { - } - - public void visitTableSwitchInsn(int min, int max, Label dflt, - Label labels[]) { - } - - public void visitLookupSwitchInsn(Label dflt, int keys[], Label labels[]) { - } - - public void visitMultiANewArrayInsn(String desc, int dims) { - } - - public void visitTryCatchBlock(Label start, Label end, Label handler, - String type) { - } - - public void visitLocalVariable(String name, String desc, String signature, - Label start, Label end, int index) { - } - - public void visitLineNumber(int line, Label start) { - } - - public void visitMaxs(int maxStack, int maxLocals) { - } - - public void visit(String name, Object value) { - } - - public void visitEnum(String name, String desc, String value) { - } - - public AnnotationVisitor visitAnnotation(String name, String desc) { - return this; - } - - public AnnotationVisitor visitArray(String name) { - return this; - } -} diff --git a/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java b/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java index 0d0420132..4916a10ab 100644 --- a/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java +++ b/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java @@ -39,7 +39,6 @@ import org.aspectj.bridge.MessageWriter; import org.aspectj.bridge.Version; import org.aspectj.bridge.WeaveMessage; import org.aspectj.bridge.IMessage.Kind; -import org.aspectj.org.objectweb.asm.ClassReader; import org.aspectj.util.FileUtil; import org.aspectj.util.LangUtil; import org.aspectj.weaver.IClassFileProvider; @@ -308,27 +307,28 @@ public class WeavingAdaptor implements IMessageContext { */ private boolean shouldWeaveAnnotationStyleAspect(String name, byte[] bytes) { if (delegateForCurrentClass==null) { - if (weaver.getWorld().isASMAround()) return asmCheckAnnotationStyleAspect(bytes); - else ensureDelegateInitialized(name, bytes); +// if (weaver.getWorld().isASMAround()) return asmCheckAnnotationStyleAspect(bytes); +// else + ensureDelegateInitialized(name, bytes); } return (delegateForCurrentClass.isAnnotationStyleAspect()); } - private boolean asmCheckAnnotationStyleAspect(byte[] bytes) { - IsAtAspectAnnotationVisitor detector = new IsAtAspectAnnotationVisitor(); - - ClassReader cr = new ClassReader(bytes); - try { - cr.accept(detector, true);//, ClassReader.SKIP_DEBUG | ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES); - } catch (Exception spe) { - // if anything goes wrong, e.g., an NPE, then assume it's NOT an @AspectJ aspect... - System.err.println("Unexpected problem parsing bytes to discover @Aspect annotation"); - spe.printStackTrace(); - return false; - } - - return detector.isAspect(); - } +// private boolean asmCheckAnnotationStyleAspect(byte[] bytes) { +// IsAtAspectAnnotationVisitor detector = new IsAtAspectAnnotationVisitor(); +// +// ClassReader cr = new ClassReader(bytes); +// try { +// cr.accept(detector, true);//, ClassReader.SKIP_DEBUG | ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES); +// } catch (Exception spe) { +// // if anything goes wrong, e.g., an NPE, then assume it's NOT an @AspectJ aspect... +// System.err.println("Unexpected problem parsing bytes to discover @Aspect annotation"); +// spe.printStackTrace(); +// return false; +// } +// +// return detector.isAspect(); +// } protected void ensureDelegateInitialized(String name,byte[] bytes) { if (delegateForCurrentClass==null) diff --git a/weaver/testsrc/org/aspectj/weaver/bcel/AsmDelegateTests.java b/weaver/testsrc/org/aspectj/weaver/bcel/AsmDelegateTests.java deleted file mode 100644 index 58918b778..000000000 --- a/weaver/testsrc/org/aspectj/weaver/bcel/AsmDelegateTests.java +++ /dev/null @@ -1,486 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement initial implementation - * ******************************************************************/ - - -package org.aspectj.weaver.bcel; - -import java.io.File; -import java.io.IOException; -import java.util.Enumeration; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import org.aspectj.weaver.AbstractReferenceTypeDelegate; -import org.aspectj.weaver.AbstractWorldTestCase; -import org.aspectj.weaver.AjAttribute; -import org.aspectj.weaver.AnnotationX; -import org.aspectj.weaver.BcweaverTests; -import org.aspectj.weaver.ReferenceType; -import org.aspectj.weaver.ReferenceTypeDelegate; -import org.aspectj.weaver.ResolvedMember; -import org.aspectj.weaver.ResolvedMemberImpl; -import org.aspectj.weaver.ResolvedType; -import org.aspectj.weaver.ShadowMunger; -import org.aspectj.weaver.TypeVariable; -import org.aspectj.weaver.World; -import org.aspectj.weaver.AjAttribute.EffectiveSignatureAttribute; -import org.aspectj.weaver.asm.AsmDelegate; -import org.aspectj.weaver.asm.AsmField; -import org.aspectj.weaver.asm.AsmMethod; - - -/** - * This is a test case for the nameType parts of worlds. - */ -public class AsmDelegateTests extends AbstractWorldTestCase { - - private final BcelWorld world = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - - public AsmDelegateTests(String name) { - super(name); - } - - protected World getWorld() { - return world; - } - - // --- testcode - - public void testWeDontGoBang() { - world.fallbackToLoadingBcelDelegatesForAspects = false; - ResolvedType rt = world.resolve("SimpleAspect"); - ReferenceTypeDelegate delegate = ((ReferenceType)rt).getDelegate(); - - assertTrue("Should be an ASM delegate but is "+delegate.getClass(), - delegate.getClass().toString().equals("class org.aspectj.weaver.asm.AsmDelegate")); - } - - public void testDifferentiatingBetweenAspectAndClass() { - ReferenceType rtAspect = (ReferenceType)world.resolve("SimpleAspect"); - ReferenceType rtString = (ReferenceType)world.resolve("java.lang.String"); - assertTrue("SimpleAspect should be an aspect",rtAspect.isAspect()); - assertTrue("String should not be an aspect",!rtString.isAspect()); - assertTrue("Should be a persingleton "+rtAspect.getPerClause(),rtAspect.getPerClause().toString().startsWith("persingleton")); - } - - public void testRecognizingDifferentTypes() { - ResolvedType rtAnnotation = world.resolve("SimpleAnnotation"); - ResolvedType rtEnum = world.resolve("SimpleEnum"); - ResolvedType rtString = world.resolve("java.lang.String"); - assertTrue("Should be an annotation type",rtAnnotation.isAnnotation()); - assertTrue("Should be an enum type",rtEnum.isEnum()); - assertTrue("Should not be an annotation or enum type",!(rtString.isAnnotation() || rtString.isEnum())); - } - - public void testAnnotationsBehaving() { - ReferenceType rtAnnotation = (ReferenceType)world.resolve("SimpleAnnotation"); - assertTrue("Should be SOURCE but is "+rtAnnotation.getRetentionPolicy(),rtAnnotation.getRetentionPolicy().equals("SOURCE")); - ReferenceType rtAnnotation2 = (ReferenceType)world.resolve("SimpleAnnotation2"); - assertTrue("Should be CLASS but is "+rtAnnotation2.getRetentionPolicy(),rtAnnotation2.getRetentionPolicy().equals("CLASS")); - ReferenceType rtAnnotation3 = (ReferenceType)world.resolve("SimpleAnnotation3"); - assertTrue("Should be RUNTIME but is "+rtAnnotation3.getRetentionPolicy(),rtAnnotation3.getRetentionPolicy().equals("RUNTIME")); - ReferenceType rtAnnotation4 = (ReferenceType)world.resolve("SimpleAnnotation4"); - assertTrue("Should be CLASS but is "+rtAnnotation4.getRetentionPolicy(),rtAnnotation4.getRetentionPolicy().equals("CLASS")); - } - - public void testInterfaceflag() { - ReferenceType rtString = (ReferenceType)world.resolve("java.lang.String"); - assertTrue("String should not be an interface",!rtString.isInterface()); - ReferenceType rtSerializable = (ReferenceType)world.resolve("java.io.Serializable"); - assertTrue("Serializable should be an interface",rtSerializable.isInterface()); - } - - public void testCompareDelegates() { - BcelWorld slowWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - - ReferenceType bcelList = (ReferenceType)slowWorld.resolve("java.util.List"); - ReferenceType asmList = (ReferenceType)fastWorld.resolve("java.util.List"); - - assertTrue("Should be a bcel delegate? "+bcelList.getDelegate().getClass(), - bcelList.getDelegate().getClass().toString().equals("class org.aspectj.weaver.bcel.BcelObjectType")); - assertTrue("Should be an asm delegate? "+asmList.getDelegate().getClass(), - asmList.getDelegate().getClass().toString().equals("class org.aspectj.weaver.asm.AsmDelegate")); - - TypeVariable[] bcelTVars = bcelList.getTypeVariables(); - - TypeVariable[] asmTVars = asmList.getTypeVariables(); - for (int i = 0; i < asmTVars.length; i++) { - TypeVariable variable = asmTVars[i]; - } - - String bcelsig = bcelList.getSignature(); - String asmsig = asmList.getSignature(); - - assertTrue("Signatures should be the same but "+bcelsig+"!="+asmsig,bcelsig.equals(asmsig)); - - String bcelerasuresig = bcelList.getErasureSignature(); - String asmerasuresig = asmList.getErasureSignature(); - assertTrue("Erasure Signatures should be the same but "+bcelerasuresig+"!="+asmerasuresig,bcelerasuresig.equals(asmerasuresig)); - - ResolvedMember[] bcelfields = bcelList.getDeclaredFields(); - ResolvedMember[] asmfields = asmList.getDeclaredFields(); - if (bcelfields.length!=asmfields.length) { - fail("Dont have the same number of fields? bcel="+bcelfields.length+" asm="+asmfields.length); - } - for (int i = 0; i < asmfields.length; i++) { - ResolvedMember member = asmfields[i]; - if (!bcelfields[i].equals(asmfields[i])) { - fail("Differing fields: "+bcelfields[i]+" and "+asmfields[i]); - } - } - } - - public void testCompareDelegatesComplex() { - BcelWorld slowWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - - ReferenceType bComplex = (ReferenceType)slowWorld.resolve("Complex"); - ReferenceType aComplex = (ReferenceType)fastWorld.resolve("Complex"); - - checkEquivalent("",(AbstractReferenceTypeDelegate)aComplex.getDelegate(),(AbstractReferenceTypeDelegate)bComplex.getDelegate()); - } - - public void testCompareDelegatesMonster() { - BcelWorld slowWorld = new BcelWorld("../lib/aspectj/lib/aspectjtools.jar");slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld("../lib/aspectj/lib/aspectjtools.jar"); - - ResolvedMemberImpl.showParameterNames=false; - try { - File f = new File("../lib/aspectj/lib/aspectjtools.jar"); - assertTrue("Couldnt find aspectjtools to test. Tried: "+f.getAbsolutePath(),f.exists()); - ZipFile zf = new ZipFile(f); - int i = 0; - Enumeration entries = zf.entries(); - while (entries.hasMoreElements()) { - ZipEntry zfe = (ZipEntry)entries.nextElement(); - String classfileName = zfe.getName(); - if (classfileName.endsWith(".class")) { - String clazzname = classfileName.substring(0,classfileName.length()-6).replace('/','.'); - ReferenceType b = (ReferenceType)slowWorld.resolve(clazzname); - ReferenceType a = (ReferenceType)fastWorld.resolve(clazzname); - checkEquivalent("Comparison number #"+(i++)+" ",(AbstractReferenceTypeDelegate)a.getDelegate(),(AbstractReferenceTypeDelegate)b.getDelegate()); - } - } - //System.err.println();("Successfully compared "+i+" entries!!"); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - public void testCompareDelegatesLoadingPerformance() { - BcelWorld slowWorld = new BcelWorld("../lib/aspectj/lib/aspectjtools.jar");slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld("../lib/aspectj/lib/aspectjtools.jar"); - - ResolvedMemberImpl.showParameterNames=false; - try { - File f = new File("../lib/aspectj/lib/aspectjtools.jar"); - assertTrue("Couldnt find aspectjtools to test. Tried: "+f.getAbsolutePath(),f.exists()); - ZipFile zf = new ZipFile(f); - int i = 0; - long stime = System.currentTimeMillis(); - Enumeration entries = zf.entries(); - while (entries.hasMoreElements()) { - ZipEntry zfe = (ZipEntry)entries.nextElement(); - String classfileName = zfe.getName(); - if (classfileName.endsWith(".class")) { - String clazzname = classfileName.substring(0,classfileName.length()-6).replace('/','.'); - ReferenceType b = (ReferenceType)slowWorld.resolve(clazzname); - i++; - } - } - long etime = System.currentTimeMillis(); - System.err.println("Time taken to load "+i+" entries with BCEL="+(etime-stime)+"ms"); - //System.err.println();("Successfully compared "+i+" entries!!"); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - - try { - File f = new File("../lib/aspectj/lib/aspectjtools.jar"); - assertTrue("Couldnt find aspectjtools to test. Tried: "+f.getAbsolutePath(),f.exists()); - ZipFile zf = new ZipFile(f); - int i = 0; - long stime = System.currentTimeMillis(); - Enumeration entries = zf.entries(); - while (entries.hasMoreElements()) { - ZipEntry zfe = (ZipEntry)entries.nextElement(); - String classfileName = zfe.getName(); - if (classfileName.endsWith(".class")) { - String clazzname = classfileName.substring(0,classfileName.length()-6).replace('/','.'); - ReferenceType b = (ReferenceType)fastWorld.resolve(clazzname); - i++; - } - } - long etime = System.currentTimeMillis(); - System.err.println("Time taken to load "+i+" entries with ASM="+(etime-stime)+"ms"); - //System.err.println();("Successfully compared "+i+" entries!!"); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - private void checkEquivalent(String prefix,AbstractReferenceTypeDelegate asmType,AbstractReferenceTypeDelegate bcelType) { - assertTrue("Should be a bcel delegate? "+bcelType.getClass(), - bcelType.getClass().toString().equals("class org.aspectj.weaver.bcel.BcelObjectType")); - assertTrue("Should be an asm delegate? "+asmType.getClass(), - asmType.getClass().toString().equals("class org.aspectj.weaver.asm.AsmDelegate")); - - String asmString = asmType.stringifyDelegate(); - String bcelString= bcelType.stringifyDelegate(); - - if (!asmString.equals(bcelString)) { - fail(prefix+"Delegates don't match for "+bcelType.getResolvedTypeX()+"\n ASM=\n"+asmString+"\n BCEL=\n"+bcelString); - } - } - - private void compareAnnotations(String n,World bcelWorld,World asmWorld) { - ReferenceType bcelT = (ReferenceType)bcelWorld.resolve(n); - ReferenceType asmT = (ReferenceType)asmWorld.resolve(n); - ensureTheSame(bcelT.getAnnotations(),asmT.getAnnotations()); - } - - private void ensureTheSame(AnnotationX[] bcelSet,AnnotationX[] asmSet) { - String bcelString = stringify(bcelSet); - String asmString = stringify(asmSet); - if (bcelSet.length!=asmSet.length) { - fail("Lengths are different!!! Not a good start. \nBcel reports: \n"+bcelString+" Asm reports: \n"+asmString); - } - assertTrue("Different answers. \nBcel reports: \n"+bcelString+" Asm reports: \n"+asmString,bcelString.equals(asmString)); - } - - public String stringify(AnnotationX[] annotations) { - if (annotations==null) return ""; - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < annotations.length; i++) { - AnnotationX annotationX = annotations[i]; - sb.append(i+") "+annotationX.toString()); - sb.append("\n"); - } - return sb.toString(); - } - - public void testDifferentAnnotationKinds() { - BcelWorld slowWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar");slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - compareAnnotations("AnnotatedClass",slowWorld,fastWorld); - compareAnnotations("AnnotatedFields",slowWorld,fastWorld); - compareAnnotations("AnnotatedMethods",slowWorld,fastWorld); - compareAnnotations("AnnotatedWithClassClass",slowWorld,fastWorld); - compareAnnotations("AnnotatedWithCombinedAnnotation",slowWorld,fastWorld); - compareAnnotations("AnnotatedWithEnumClass",slowWorld,fastWorld); - compareAnnotations("AnnotationClassElement",slowWorld,fastWorld); - compareAnnotations("AnnotationEnumElement",slowWorld,fastWorld); - compareAnnotations("ComplexAnnotation",slowWorld,fastWorld); - compareAnnotations("CombinedAnnotation",slowWorld,fastWorld); - compareAnnotations("ComplexAnnotatedClass",slowWorld,fastWorld); - } - - /** - * Load up the AspectFromHell and take it apart... - */ - public void testLoadingAttributesForTypes() { - BcelWorld slowWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - fastWorld.fallbackToLoadingBcelDelegatesForAspects = false; - - ReferenceType bcelT = (ReferenceType)slowWorld.resolve("AspectFromHell"); - ReferenceType asmT = (ReferenceType)fastWorld.resolve("AspectFromHell"); - - AsmDelegate asmD = (AsmDelegate)asmT.getDelegate(); - String [] asmAttributeNames = asmD.getAttributeNames(); - BcelObjectType bcelD = (BcelObjectType)bcelT.getDelegate(); - String [] bcelAttributeNames = bcelD.getAttributeNames(); - - // Won't be exactly the same number as ASM currently processes some and then discards them - effectively those stored in the delegate - // are the 'not yet processed' ones - - // should be 6 type mungers - AjAttribute[] asmTypeMungers = asmD.getAttributes("org.aspectj.weaver.TypeMunger"); - AjAttribute[] bcelTypeMungers = bcelD.getAttributes("org.aspectj.weaver.TypeMunger"); - assertTrue("Should be 6 type mungers but asm="+asmTypeMungers.length+" bcel="+bcelTypeMungers.length,asmTypeMungers.length==6 && bcelTypeMungers.length==6); - } - - public void testLoadingAttributesForMethods() { - boolean debug = false; - BcelWorld slowWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar");slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - fastWorld.fallbackToLoadingBcelDelegatesForAspects = false; - - ReferenceType bcelT = (ReferenceType)slowWorld.resolve("AspectFromHell"); - ReferenceType asmT = (ReferenceType)fastWorld.resolve("AspectFromHell"); - - ResolvedMember[] bcelMethods = bcelT.getDeclaredMethods(); - ResolvedMember[] asmMethods = asmT.getDeclaredMethods(); - for (int i = 0; i < bcelMethods.length; i++) { - BcelMethod bmember = (BcelMethod)bcelMethods[i]; - AsmMethod amember = (AsmMethod)asmMethods[i]; - assertTrue("Seem to be in a muddle. a="+amember.getName()+" b="+bmember.getName(), - amember.getName().equals(bmember.getName())); - if (debug) System.err.println("Looking at "+bmember); - String[] bcelMemberAttributes = bmember.getAttributeNames(true); - String[] asmMemberAttributes = amember.getAttributeNames(true); -// System.err.println("BCEL=>\n"+stringifyStringArray(bcelMemberAttributes)); -// System.err.println(" ASM=>\n"+stringifyStringArray(asmMemberAttributes)); - compareAttributeNames(bcelMemberAttributes,asmMemberAttributes); - - // Let's check the member ones of interest: - - // org.aspectj.weaver.AjSynthetic - if (bmember.isAjSynthetic()) { - assertTrue("Why isnt the ASM method ajsynthetic? "+amember.toDebugString(),amember.isAjSynthetic()); - } else { - assertTrue("Why is the ASM method ajsynthetic? "+amember.toDebugString(),!amember.isAjSynthetic()); - } - - // org.aspectj.weaver.EffectiveSignature - EffectiveSignatureAttribute bcelEsa = bmember.getEffectiveSignature(); - EffectiveSignatureAttribute asmEsa = amember.getEffectiveSignature(); - if (bcelEsa==null) { - assertTrue("Why isnt the ASM effective signature null? "+asmEsa,asmEsa==null); - } else { - if (asmEsa==null) fail("ASM effective signature is null, when BCEL effective signature is "+bcelEsa.toString()); - assertTrue("Should be the same?? b="+bcelEsa.toString()+" a="+asmEsa.toString(),bcelEsa.toString().equals(asmEsa.toString())); - } - - // org.aspectj.weaver.MethodDeclarationLineNumber - int bLine = bmember.getDeclarationLineNumber(); - int aLine = amember.getDeclarationLineNumber(); - assertTrue("Should be the same number: "+bLine+" "+aLine,bLine==aLine); - - - // org.aspectj.weaver.Advice - ShadowMunger bcelSM = bmember.getAssociatedShadowMunger(); - ShadowMunger asmSM = amember.getAssociatedShadowMunger(); - if (bcelSM==null) { - assertTrue("Why isnt the ASM effective signature null? "+asmSM,asmSM==null); - } else { - if (asmSM==null) fail("ASM effective signature is null, when BCEL effective signature is "+bcelSM.toString()); - assertTrue("Should be the same?? b="+bcelSM.toString()+" a="+asmSM.toString(),bcelSM.toString().equals(asmSM.toString())); - } -// new AjASMAttribute("org.aspectj.weaver.SourceContext"), - } - - } - - // @SimpleAnnotation(id=1) int i; - // @SimpleAnnotation(id=2) String s; - public void testLoadingAnnotationsForFields() { - boolean debug = false; - BcelWorld slowWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar");slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - - ReferenceType bcelT = (ReferenceType)slowWorld.resolve("AnnotatedFields"); - ReferenceType asmT = (ReferenceType)fastWorld.resolve("AnnotatedFields"); - - ResolvedMember[] bcelFields = bcelT.getDeclaredFields(); - ResolvedMember[] asmFields = asmT.getDeclaredFields(); - for (int i = 0; i < bcelFields.length; i++) { - BcelField bmember = (BcelField)bcelFields[i]; - AsmField amember = (AsmField)asmFields[i]; - assertTrue("Seem to be in a muddle. a="+amember.getName()+" b="+bmember.getName(), - amember.getName().equals(bmember.getName())); - if (debug) System.err.println("Looking at "+bmember); - - ResolvedType[] bAnns = bmember.getAnnotationTypes(); - ResolvedType[] aAnns = amember.getAnnotationTypes(); - assertTrue("Should have found an annotation on the bcel field?",bAnns!=null && bAnns.length==1); - assertTrue("Should have found an annotation on the asm field?",aAnns!=null && aAnns.length==1); - - assertTrue("BCEL annotation should be 'SimpleAnnotation3' but is "+bAnns[0].toString(),bAnns[0].toString().equals("SimpleAnnotation3")); - assertTrue("ASM annotation should be 'SimpleAnnotation3' but is "+aAnns[0].toString(),aAnns[0].toString().equals("SimpleAnnotation3")); - - AnnotationX[] bXs = bmember.getAnnotations(); - AnnotationX[] aXs = amember.getAnnotations(); - assertTrue("Should have found an annotation on the bcel field?",bXs!=null && bXs.length==1); - assertTrue("Should have found an annotation on the asm field?",aXs!=null && aXs.length==1); - - String exp = null; - if (i==0) exp = "ANNOTATION [LSimpleAnnotation3;] [runtimeVisible] [id=1]"; - else if (i==1) exp="ANNOTATION [LSimpleAnnotation3;] [runtimeVisible] [id=2]"; - assertTrue("BCEL annotation should be '"+exp+"' but is "+bXs[0].toString(),bXs[0].toString().equals(exp)); - assertTrue("ASM annotation should be '"+exp+"' but is "+aXs[0].toString(),aXs[0].toString().equals(exp)); - } - } - - // @SimpleAnnotation(id=1) - // public void method1() { } - // - // @SimpleAnnotation(id=2) - // public void method2() { } - public void testLoadingAnnotationsForMethods() { - - boolean debug = false; - BcelWorld slowWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar");slowWorld.setFastDelegateSupport(false); - BcelWorld fastWorld = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - - ReferenceType bcelT = (ReferenceType)slowWorld.resolve("AnnotatedMethods"); - ReferenceType asmT = (ReferenceType)fastWorld.resolve("AnnotatedMethods"); - - ResolvedMember[] bcelMethods = bcelT.getDeclaredMethods(); - ResolvedMember[] asmMethods = asmT.getDeclaredMethods(); - for (int i = 0; i < bcelMethods.length; i++) { - - BcelMethod bmember = (BcelMethod)bcelMethods[i]; - AsmMethod amember = (AsmMethod)asmMethods[i]; - if (!bmember.getName().startsWith("method")) continue; - assertTrue("Seem to be in a muddle. a="+amember.getName()+" b="+bmember.getName(), - amember.getName().equals(bmember.getName())); - if (debug) System.err.println("Looking at "+bmember); - - ResolvedType[] bAnns = bmember.getAnnotationTypes(); - ResolvedType[] aAnns = amember.getAnnotationTypes(); - assertTrue("Should have found an annotation on the bcel method?",bAnns!=null && bAnns.length==1); - assertTrue("Should have found an annotation on the asm method?",aAnns!=null && aAnns.length==1); - - assertTrue("BCEL annotation should be 'SimpleAnnotation3' but is "+bAnns[0].toString(),bAnns[0].toString().equals("SimpleAnnotation3")); - assertTrue("ASM annotation should be 'SimpleAnnotation3' but is "+aAnns[0].toString(),aAnns[0].toString().equals("SimpleAnnotation3")); - - AnnotationX[] bXs = bmember.getAnnotations(); - AnnotationX[] aXs = amember.getAnnotations(); - assertTrue("Should have found an annotation on the bcel method?",bXs!=null && bXs.length==1); - assertTrue("Should have found an annotation on the asm method?",aXs!=null && aXs.length==1); - - String exp = null; - if (i==1) exp = "ANNOTATION [LSimpleAnnotation3;] [runtimeVisible] [id=1]"; - else if (i==2) exp="ANNOTATION [LSimpleAnnotation3;] [runtimeVisible] [id=2]"; - assertTrue("BCEL annotation should be '"+exp+"' but is "+bXs[0].toString(),bXs[0].toString().equals(exp)); - assertTrue("ASM annotation should be '"+exp+"' but is "+aXs[0].toString(),aXs[0].toString().equals(exp)); - } - } - - - - private void compareAttributeNames(String[] asmlist,String[] bcellist) { - String astring = stringifyStringArray(asmlist); - String bstring = stringifyStringArray(bcellist); - if (asmlist.length!=bcellist.length) { - fail("Differing lengths.\nBCEL=>\n"+bstring+" ASM=>\n"+astring); - } - } - - private String stringifyStringArray(String[] s) { - StringBuffer r = new StringBuffer(); - for (int i = 0; i < s.length; i++) { - r.append(s[i]).append("\n"); - } - return r.toString(); - } - - -} diff --git a/weaver/testsrc/org/aspectj/weaver/bcel/BcelTests.java b/weaver/testsrc/org/aspectj/weaver/bcel/BcelTests.java index f7f0eee33..ae7f15960 100644 --- a/weaver/testsrc/org/aspectj/weaver/bcel/BcelTests.java +++ b/weaver/testsrc/org/aspectj/weaver/bcel/BcelTests.java @@ -41,8 +41,7 @@ public class BcelTests extends TestCase { suite.addTestSuite(TjpWeaveTestCase.class); suite.addTestSuite(UtilityTestCase.class); suite.addTestSuite(WeaveOrderTestCase.class); - suite.addTestSuite(WorldTestCase.class); - suite.addTestSuite(AsmDelegateTests.class); + suite.addTestSuite(WorldTestCase.class); suite.addTestSuite(ZipTestCase.class); //$JUnit-END$ return suite; diff --git a/weaver/testsrc/org/aspectj/weaver/bcel/Perf.java b/weaver/testsrc/org/aspectj/weaver/bcel/Perf.java deleted file mode 100644 index 5fab2867a..000000000 --- a/weaver/testsrc/org/aspectj/weaver/bcel/Perf.java +++ /dev/null @@ -1,146 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement IBM initial implementation - * ******************************************************************/ -package org.aspectj.weaver.bcel; - -import java.io.File; -import java.io.IOException; -import java.util.Enumeration; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import org.aspectj.weaver.ReferenceType; -import org.aspectj.weaver.ResolvedMemberImpl; - -/** - * Compares loading times for bcel and asm - NOT currently pointed at from the suite. - */ -public class Perf { - - public static void main(String[] n) { - - // Two warm up runs, then 3 real runs then print average - //if (n[0].equals("BCEL")) { - long t = timeBcel(); - t = timeBcel(); - - t = timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - t+= timeBcel(); - System.err.println("Average for BCEL (across 16 runs):"+(t/16)+"ms"); - - //} else { - t = timeASM(); - t = timeASM(); - - t = timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - t+= timeASM(); - System.err.println("Average for ASM (across 16 runs):"+(t/16)+"ms"); - //} - } - - private static long timeASM() { - BcelWorld fastWorld = new BcelWorld( - "../lib/aspectj/lib/aspectjtools.jar"); - fastWorld.setBehaveInJava5Way(true); - - try { - File f = new File("../lib/aspectj/lib/aspectjtools.jar"); - ZipFile zf = new ZipFile(f); - int i = 0; - long stime = System.currentTimeMillis(); - Enumeration entries = zf.entries(); - while (entries.hasMoreElements()) { - ZipEntry zfe = (ZipEntry) entries.nextElement(); - String classfileName = zfe.getName(); - if (classfileName.endsWith(".class")) { - String clazzname = classfileName.substring(0, - classfileName.length() - 6).replace('/', '.'); - ReferenceType b = (ReferenceType) fastWorld - .resolve(clazzname); - i++; - } - } - long etime = System.currentTimeMillis(); - System.err.println("asm (" + (etime - stime) + ")"); - // System.err.println();("Successfully compared "+i+" - // entries!!"); - fastWorld.flush(); - return (etime-stime); - } catch (IOException e) { - e.printStackTrace(); - } - return -1; - } - - private static long timeBcel() { - BcelWorld slowWorld = new BcelWorld( - "../lib/aspectj/lib/aspectjtools.jar"); - slowWorld.setFastDelegateSupport(false); - slowWorld.setBehaveInJava5Way(true); - - ResolvedMemberImpl.showParameterNames = false; - try { - File f = new File("../lib/aspectj/lib/aspectjtools.jar"); - // assertTrue("Couldnt find aspectjtools to test. Tried: - // "+f.getAbsolutePath(),f.exists()); - ZipFile zf = new ZipFile(f); - int i = 0; - long stime = System.currentTimeMillis(); - Enumeration entries = zf.entries(); - while (entries.hasMoreElements()) { - ZipEntry zfe = (ZipEntry) entries.nextElement(); - String classfileName = zfe.getName(); - if (classfileName.endsWith(".class")) { - String clazzname = classfileName.substring(0, - classfileName.length() - 6).replace('/', '.'); - ReferenceType b = (ReferenceType) slowWorld - .resolve(clazzname); - i++; - } - } - long etime = System.currentTimeMillis(); - System.err.println("bcel (" + (etime - stime) + ")"); - slowWorld.flush(); - return (etime-stime); - } catch (IOException e) { - e.printStackTrace(); - } - return -1; - } -} diff --git a/weaver/testsrc/org/aspectj/weaver/bcel/UtilityTestCase.java b/weaver/testsrc/org/aspectj/weaver/bcel/UtilityTestCase.java index 328472767..8083c1532 100644 --- a/weaver/testsrc/org/aspectj/weaver/bcel/UtilityTestCase.java +++ b/weaver/testsrc/org/aspectj/weaver/bcel/UtilityTestCase.java @@ -24,7 +24,7 @@ public class UtilityTestCase extends TestCase { public void disassembleTest(String name) throws IOException { BcelWorld world = new BcelWorld("../weaver/bin"); - world.setFastDelegateSupport(false); +// world.setFastDelegateSupport(false); world.addPath(WeaveTestCase.classDir); LazyClassGen clazz = new LazyClassGen(BcelWorld.getBcelObjectType(world.resolve(name))); diff --git a/weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java b/weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java index 0ebc08b67..8bbbdbe0d 100644 --- a/weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java +++ b/weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java @@ -40,7 +40,7 @@ public abstract class WeaveTestCase extends TestCase { // we are using ASM delegates we don't know the names of parameters (they are irrelevant...) // and are missing from the dumping of asm delegates. This switch ensures we // continue to use BCEL for these tests. - world.setFastDelegateSupport(false); +// world.setFastDelegateSupport(false); } public WeaveTestCase(String name) { diff --git a/weaver5/java5-testsrc/org/aspectj/weaver/AllWeaver5Tests.java b/weaver5/java5-testsrc/org/aspectj/weaver/AllWeaver5Tests.java index b46d84011..886aeb112 100644 --- a/weaver5/java5-testsrc/org/aspectj/weaver/AllWeaver5Tests.java +++ b/weaver5/java5-testsrc/org/aspectj/weaver/AllWeaver5Tests.java @@ -15,7 +15,6 @@ package org.aspectj.weaver; import junit.framework.Test; import junit.framework.TestSuite; -import org.aspectj.weaver.bcel.AsmDelegateTests5; import org.aspectj.weaver.reflect.ReflectionWorldTest; import org.aspectj.weaver.tools.PointcutExpressionTest; @@ -25,7 +24,6 @@ public class AllWeaver5Tests { TestSuite suite = new TestSuite(AllWeaver5Tests.class.getName()); //$JUnit-BEGIN$ suite.addTest(AllTracing5Tests.suite()); - suite.addTest(AsmDelegateTests5.suite()); suite.addTest(BcweaverModuleTests15.suite()); suite.addTestSuite(PointcutExpressionTest.class); suite.addTestSuite(ReflectionWorldTest.class); diff --git a/weaver5/java5-testsrc/org/aspectj/weaver/bcel/AsmDelegateTests5.java b/weaver5/java5-testsrc/org/aspectj/weaver/bcel/AsmDelegateTests5.java deleted file mode 100644 index f88b2c336..000000000 --- a/weaver5/java5-testsrc/org/aspectj/weaver/bcel/AsmDelegateTests5.java +++ /dev/null @@ -1,147 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2006 Contributors - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andy Clement initial implementation - * Matthew Webster move Java 5 tests - * ******************************************************************/ - - -package org.aspectj.weaver.bcel; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.aspectj.weaver.AbstractWorldTestCase; -import org.aspectj.weaver.BcweaverTests; -import org.aspectj.weaver.ResolvedMember; -import org.aspectj.weaver.ResolvedType; -import org.aspectj.weaver.TypeVariable; -import org.aspectj.weaver.UnresolvedType; -import org.aspectj.weaver.World; - - -/** - * This is a test case for the nameType parts of worlds. - */ -public class AsmDelegateTests5 extends AbstractWorldTestCase { - - public static Test suite() { - TestSuite suite = new TestSuite(AsmDelegateTests5.class.getName()); - suite.addTestSuite(AsmDelegateTests5.class); - return suite; - } - - private final BcelWorld world = new BcelWorld(BcweaverTests.TESTDATA_PATH+"/forAsmDelegateTesting/stuff.jar"); - - public AsmDelegateTests5(String name) { - super(name); - } - - protected World getWorld() { - return world; - } - - // --- testcode - - /** - * Methods are transformed according to generic signatures - this checks - * that some of the generic methods in java.lang.Class appear the same - * whether viewed through an ASM or a BCEL delegate. - */ - public void testCompareGenericMethods() { - BcelWorld slowWorld = new BcelWorld(); - slowWorld.setFastDelegateSupport(false); - slowWorld.setBehaveInJava5Way(true); - - BcelWorld fastWorld = new BcelWorld(); - fastWorld.setBehaveInJava5Way(true); - - ResolvedType bcelJavaLangClass = slowWorld.resolve(UnresolvedType.forName("java.lang.Class")); - ResolvedType asmJavaLangClass = fastWorld.resolve(UnresolvedType.forName("java.lang.Class")); - - bcelJavaLangClass = bcelJavaLangClass.getGenericType(); - asmJavaLangClass = asmJavaLangClass.getGenericType(); - - ResolvedMember[] bcelMethods = bcelJavaLangClass.getDeclaredMethods(); - ResolvedMember[] asmMethods = asmJavaLangClass.getDeclaredMethods(); - - for (int i = 0; i < bcelMethods.length; i++) { - bcelMethods[i].setParameterNames(null); // forget them, asm delegates dont currently know them - String one = bcelMethods[i].toDebugString(); - String two = asmMethods[i].toDebugString(); - if (!one.equals(two)) { - fail("These methods look different when viewed through ASM or BCEL\nBCEL='"+bcelMethods[i].toDebugString()+ - "'\n ASM='"+asmMethods[i].toDebugString()+"'"); - } - // If one is parameterized, check the other is... - if (bcelMethods[i].canBeParameterized()) { - assertTrue("ASM method '"+asmMethods[i].toDebugString()+"' can't be parameterized whereas its' BCEL variant could", - asmMethods[i].canBeParameterized()); - } - - } - - // Let's take a special look at: - // public Class asSubclass(Class clazz) - ResolvedMember bcelSubclassMethod = null; - for (int i = 0; i < bcelMethods.length; i++) { - if (bcelMethods[i].getName().equals("asSubclass")) { bcelSubclassMethod = bcelMethods[i]; break; } - } - ResolvedMember asmSubclassMethod = null; - for (int i = 0; i < asmMethods.length; i++) { - if (asmMethods[i].getName().equals("asSubclass")) { asmSubclassMethod = asmMethods[i];break; } - } - - TypeVariable[] tvs = bcelSubclassMethod.getTypeVariables(); - assertTrue("should have one type variable on the bcel version but found: "+format(tvs),tvs!=null && tvs.length==1); - tvs = asmSubclassMethod.getTypeVariables(); - assertTrue("should have one type variable on the asm version but found: "+format(tvs),tvs!=null && tvs.length==1); - - } - - private String format(TypeVariable[] tvs) { - if (tvs==null) return "null"; - StringBuffer s = new StringBuffer(); - s.append("["); - for (int i = 0; i < tvs.length; i++) { - s.append(tvs[i]); - if ((i+1)