diff options
-rw-r--r-- | bcel-builder/build.xml | 9 | ||||
-rw-r--r-- | runtime/build.xml | 4 | ||||
-rw-r--r-- | tests/java5/ataspectj/ataspectj/IfPointcutTest.java | 1 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java | 18 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ataspectj/atajc150-tests.xml | 4 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/ataspectj/Aj5Attributes.java | 40 |
6 files changed, 46 insertions, 30 deletions
diff --git a/bcel-builder/build.xml b/bcel-builder/build.xml index 476b8eb69..55b28f624 100644 --- a/bcel-builder/build.xml +++ b/bcel-builder/build.xml @@ -48,10 +48,11 @@ <target name="packageAndPush" depends="buildTheJars,push"/> <target name="jar" depends="pack"> - <copy file="../lib/regexp/jakarta-regexp-1.2.jar" - tofile="bcel/lib/Regex.jar" /> - <ant dir="bcel" target="jar" /> - <copy file="bcel/bin/bcel.jar" toDir="." /> + <!-- FIXME AV: someone fix this target since it is broken... looks for bcel/build.xml that does not exist --> +<!-- <copy file="../lib/regexp/jakarta-regexp-1.2.jar"--> +<!-- tofile="bcel/lib/Regex.jar" />--> +<!-- <ant dir="bcel" target="jar" />--> +<!-- <copy file="bcel/bin/bcel.jar" toDir="." />--> </target> <target name="srcjar" depends="pack"> diff --git a/runtime/build.xml b/runtime/build.xml index fb36d8957..3dd22e1ed 100644 --- a/runtime/build.xml +++ b/runtime/build.xml @@ -28,9 +28,9 @@ <target name="all" depends="init, compile, test:compile"/> <target name="jar" depends="compile"> - <delete file="${build.ajdir}/jars/aspectjrt.jar"/> + <delete file="${build.ajdir}/jars/runtime.jar"/> <copy file="runtime.mf.txt" todir="${build.ajdir}/temp" filtering="yes"/> - <jar destfile="${build.ajdir}/jars/aspectjrt.jar" manifest="${build.ajdir}/temp/runtime.mf.txt"> + <jar destfile="${build.ajdir}/jars/runtime.jar" manifest="${build.ajdir}/temp/runtime.mf.txt"> <fileset dir="bin"> <include name="**/*"/> </fileset> diff --git a/tests/java5/ataspectj/ataspectj/IfPointcutTest.java b/tests/java5/ataspectj/ataspectj/IfPointcutTest.java index 66693ec4a..1073a730b 100644 --- a/tests/java5/ataspectj/ataspectj/IfPointcutTest.java +++ b/tests/java5/ataspectj/ataspectj/IfPointcutTest.java @@ -30,6 +30,7 @@ public class IfPointcutTest extends TestCase { } public void testIf() { + fail("FIXME AV: see below, TestAspect has its advice and pointcut commented out"); IfPointcutTest me = new IfPointcutTest(); me.hello(1); me.hello(-1); diff --git a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java index c60ffb2ba..ecb517ab4 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java @@ -31,10 +31,9 @@ public class AtAjSyntaxTests extends XMLBasedAjcTestCase { return new File("../tests/src/org/aspectj/systemtest/ajc150/ataspectj/atajc150.xml"); } -// FIXME ATAJ Crashes because of specifying issingleton -// public void testSimpleBefore() { -// runTest("SimpleBefore"); -// } + public void testSimpleBefore() { + runTest("SimpleBefore"); + } public void testSimpleAfter() { runTest("SimpleAfter"); @@ -65,12 +64,11 @@ public class AtAjSyntaxTests extends XMLBasedAjcTestCase { // runTest("AfterXTest"); // } -// FIXME alex @AJ impl + test -// FIXME andy is this working or not Alex? It was commented out in the branch but uncommenting it - it -// runs fine for me. - public void testIfPointcut() { - runTest("IfPointcutTest"); - } + //FIXME AV uncomment when IfPointcutTest.TestAspect can be compiled ie if() pcd can be parsed. + // right now the aspect is commented out. +// public void testIfPointcut() { +// runTest("IfPointcutTest"); +// } // FIXME alex java.lang.VerifyError: (class: ataspectj/BindingTest, method: dup_aroundBody5$advice signature: (ILorg/aspectj/lang/JoinPoint;Lataspectj/BindingTest$TestAspect_1;ILorg/aspectj/lang/ProceedingJoinPoint;)Ljava/lang/Object;) Register 0 contains wrong type // public void testBindings() { diff --git a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/atajc150-tests.xml b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/atajc150-tests.xml index 39668594e..3a89a1290 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/atajc150-tests.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/atajc150-tests.xml @@ -1,7 +1,9 @@ <!-- @AspectJ v1.5.0 Tests --> <ajc-test dir="java5/ataspectj" title="SimpleBefore"> - <compile files="SimpleBefore.java" options="-1.5 -showWeaveInfo -XnoInline"/> + <compile files="SimpleBefore.java" options="-1.5 -showWeaveInfo -XnoInline"> + <message kind="weave" text="(SimpleBefore.java:13) advised by before advice from 'SimpleBefore$X' (SimpleBefore.java:1)"/> + </compile> <run class="SimpleBefore"/> </ajc-test> diff --git a/weaver/src/org/aspectj/weaver/ataspectj/Aj5Attributes.java b/weaver/src/org/aspectj/weaver/ataspectj/Aj5Attributes.java index f9c921f7d..f708b6f8f 100644 --- a/weaver/src/org/aspectj/weaver/ataspectj/Aj5Attributes.java +++ b/weaver/src/org/aspectj/weaver/ataspectj/Aj5Attributes.java @@ -27,6 +27,8 @@ import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair; import org.aspectj.apache.bcel.classfile.annotation.RuntimeAnnotations; import org.aspectj.apache.bcel.generic.Type; import org.aspectj.bridge.IMessageHandler; +import org.aspectj.bridge.IMessage; +import org.aspectj.bridge.Message; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.weaver.Advice; @@ -81,14 +83,15 @@ public class Aj5Attributes { /** * The resolved type (class) for which we are reading @AJ for (be it class, method, field annotations) */ - ResolvedTypeX enclosingType; + final ResolvedTypeX enclosingType; - ISourceContext context; - IMessageHandler handler; + final ISourceContext context; + final IMessageHandler handler; - public AjAttributeStruct(ResolvedTypeX type, ISourceContext sourceContext) { + public AjAttributeStruct(ResolvedTypeX type, ISourceContext sourceContext, IMessageHandler messageHandler) { enclosingType = type; context = sourceContext; + handler = messageHandler; } } @@ -105,10 +108,10 @@ public class Aj5Attributes { */ private String[] m_argumentNamesLazy = null; - Method method; + final Method method; - public AjAttributeMethodStruct(Method method, ResolvedTypeX type, ISourceContext sourceContext) { - super(type, sourceContext); + public AjAttributeMethodStruct(Method method, ResolvedTypeX type, ISourceContext sourceContext, IMessageHandler messageHandler) { + super(type, sourceContext, messageHandler); this.method = method; } @@ -140,7 +143,7 @@ public class Aj5Attributes { * @return list of AjAttributes */ public static List readAj5ClassAttributes(JavaClass javaClass, ResolvedTypeX type, ISourceContext context,IMessageHandler msgHandler) { - AjAttributeStruct struct = new AjAttributeStruct(type, context); + AjAttributeStruct struct = new AjAttributeStruct(type, context, msgHandler); Attribute[] attributes = javaClass.getAttributes(); for (int i = 0; i < attributes.length; i++) { Attribute attribute = attributes[i]; @@ -159,7 +162,7 @@ public class Aj5Attributes { for (int m = 0; m < javaClass.getMethods().length; m++) { Method method = javaClass.getMethods()[m]; //FIXME alex optimize, this method struct will gets recreated for advice extraction - AjAttributeMethodStruct mstruct = new AjAttributeMethodStruct(method, type, context); + AjAttributeMethodStruct mstruct = new AjAttributeMethodStruct(method, type, context, msgHandler); Attribute[] mattributes = method.getAttributes(); for (int i = 0; i < mattributes.length; i++) { @@ -185,7 +188,7 @@ public class Aj5Attributes { * @return list of AjAttributes */ public static List readAj5MethodAttributes(Method method, ResolvedTypeX type, ISourceContext context,IMessageHandler msgHandler) { - AjAttributeMethodStruct struct = new AjAttributeMethodStruct(method, type, context); + AjAttributeMethodStruct struct = new AjAttributeMethodStruct(method, type, context, msgHandler); Attribute[] attributes = method.getAttributes(); for (int i = 0; i < attributes.length; i++) { @@ -236,7 +239,7 @@ public class Aj5Attributes { if (perX == null || perX.length()<=0) { clause = new PerSingleton(); } else { - clause = readPerClausePointcut(perX); + clause = parsePerClausePointcut(perX, struct); } clause.setLocation(struct.context, -1, -1); struct.ajAttributes.add(new AjAttribute.Aspect(clause)); @@ -248,10 +251,11 @@ public class Aj5Attributes { * Read a perClause * * @param perClause like "pertarget(.....)" + * @param struct for which we are parsing the per clause * @return a PerClause instance */ - private static PerClause readPerClausePointcut(String perClause) { - String pointcut; + private static PerClause parsePerClausePointcut(String perClause, AjAttributeStruct struct) { + final String pointcut; if (perClause.startsWith(PerClause.KindAnnotationPrefix.PERCFLOW.getName())) { pointcut = PerClause.KindAnnotationPrefix.PERCFLOW.extractPointcut(perClause); return new PerCflow(Pointcut.fromString(pointcut), false); @@ -267,7 +271,17 @@ public class Aj5Attributes { } else if (perClause.startsWith(PerClause.KindAnnotationPrefix.PERTYPEWITHIN.getName())) { pointcut = PerClause.KindAnnotationPrefix.PERTYPEWITHIN.extractPointcut(perClause); return new PerTypeWithin(new PatternParser(pointcut).parseTypePattern()); + } else if (perClause.equalsIgnoreCase(PerClause.SINGLETON.getName())) { + return new PerSingleton(); } + // could not parse the @AJ perclause + struct.handler.handleMessage( + new Message( + "cannot read per clause from @Aspect: " + perClause, + null,//TODO + true + ) + ); throw new RuntimeException("cannot read perclause " + perClause); } |