Community
Participate
Working Groups
Sam wrote: > I'm trying something and it works from .aj but not from .java. When > I try it with annotation based stuff I get a nasty exception: > > [iajc] trouble in: > [iajc] public class gsc.repository.IdentifierTest extends > junit.framework.TestCase: > [iajc] private static final org.aspectj.lang.JoinPoint > $StaticPart ajc$tjp_0 > [iajc] public void <init>(): > [iajc] ALOAD_0 > [iajc] INVOKESPECIAL > junit.framework.TestCase.<init> ()V > [iajc] constructor-execution(void > gsc.repository.IdentifierTest.<init>()) > [iajc] | RETURN > [iajc] constructor-execution(void > gsc.repository.IdentifierTest.<init>()) > [iajc] end public void <init>() > > [iajc] public void testIdentifierExactMatch() throws > java.security.NoSuchAlgorithmException, java.io.IOException: > [iajc] method-execution(void > gsc.repository.IdentifierTest.testIdentifierExactMatch()) > [iajc] | NEW java.io.File > [iajc] | DUP > [iajc] | LDC "test-repository/ant-test/jars/ > ant-1.6.2.jar" > [iajc] | INVOKESPECIAL java.io.File.<init> > (Ljava/lang/String;)V > [iajc] | INVOKESTATIC > gsc.repository.Identifier.interrogate (Ljava/io/File;)Ljava/util/List; > [iajc] | ASTORE_1 > [iajc] | ALOAD_1 > [iajc] | ICONST_0 > [iajc] | INVOKEINTERFACE java.util.List.get > (I)Ljava/lang/Object; > [iajc] | CHECKCAST gsc.repository.ejb.Jar > [iajc] | ASTORE_2 > [iajc] | ALOAD_2 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getVersion ()Ljava/lang/String; > [iajc] | LDC "1.6.2" > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (Ljava/lang/String;Ljava/ > lang/String;)V > [iajc] | RETURN > [iajc] method-execution(void > gsc.repository.IdentifierTest.testIdentifierExactMatch()) > [iajc] end public void testIdentifierExactMatch() throws > java.security.NoSuchAlgorithmException, java.io.IOException > > [iajc] public void testIdentifierExactSameClasses() throws > java.security.NoSuchAlgorithmException, java.io.IOException: > [iajc] method-execution(void > gsc.repository.IdentifierTest.testIdentifierExactSameClasses()) > [iajc] | NEW java.io.File > [iajc] | DUP > [iajc] | LDC "test-jars/ant-1.6.2-test.jar" > [iajc] | INVOKESPECIAL java.io.File.<init> > (Ljava/lang/String;)V > [iajc] | INVOKESTATIC > gsc.repository.Identifier.interrogate (Ljava/io/File;)Ljava/util/List; > [iajc] | ASTORE_1 > [iajc] | ALOAD_1 > [iajc] | ICONST_0 > [iajc] | INVOKEINTERFACE java.util.List.get > (I)Ljava/lang/Object; > [iajc] | CHECKCAST gsc.repository.ejb.Jar > [iajc] | ASTORE_2 > [iajc] | ALOAD_2 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getVersion ()Ljava/lang/String; > [iajc] | LDC "1.6.2" > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (Ljava/lang/String;Ljava/ > lang/String;)V > [iajc] | RETURN > [iajc] method-execution(void > gsc.repository.IdentifierTest.testIdentifierExactSameClasses()) > [iajc] end public void testIdentifierExactSameClasses() > throws java.security.NoSuchAlgorithmException, java.io.IOException > > [iajc] public void testIdentifierMixedUp() throws > java.security.NoSuchAlgorithmException, java.io.IOException: > [iajc] method-execution(void > gsc.repository.IdentifierTest.testIdentifierMixedUp()) > [iajc] | NEW java.io.File > [iajc] | DUP > [iajc] | LDC "test-jars/groovy-1.0-beta-4-and- > commons-logging-1.0.2.jar" > [iajc] | INVOKESPECIAL java.io.File.<init> > (Ljava/lang/String;)V > [iajc] | INVOKESTATIC > gsc.repository.Identifier.interrogate (Ljava/io/File;)Ljava/util/List; > [iajc] | ASTORE_1 > [iajc] | ALOAD_1 > [iajc] | INVOKEINTERFACE java.util.List.size ()I > [iajc] | ICONST_2 > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (II)V > [iajc] | ICONST_2 > [iajc] | ISTORE_2 > [iajc] | ALOAD_1 > [iajc] | INVOKEINTERFACE > java.util.List.iterator ()Ljava/util/Iterator; > [iajc] | ASTORE_3 > [iajc] | L0: ALOAD_3 > [iajc] | INVOKEINTERFACE > java.util.Iterator.hasNext ()Z > [iajc] | IFEQ L3 > [iajc] | ALOAD_3 > [iajc] | INVOKEINTERFACE > java.util.Iterator.next ()Ljava/lang/Object; > [iajc] | CHECKCAST gsc.repository.ejb.Jar > [iajc] | ASTORE 4 > [iajc] | ALOAD 4 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getGroupid ()Ljava/lang/String; > [iajc] | LDC "groovy" > [iajc] | INVOKEVIRTUAL > java.lang.String.equals (Ljava/lang/Object;)Z > [iajc] | IFEQ L1 > [iajc] | ALOAD 4 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getGroupid ()Ljava/lang/String; > [iajc] | LDC "groovy" > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (Ljava/lang/String;Ljava/ > lang/String;)V > [iajc] | ALOAD 4 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getArtifactid ()Ljava/lang/String; > [iajc] | LDC "groovy" > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (Ljava/lang/String;Ljava/ > lang/String;)V > [iajc] | ALOAD 4 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getVersion ()Ljava/lang/String; > [iajc] | LDC "1.0-beta-4" > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (Ljava/lang/String;Ljava/ > lang/String;)V > [iajc] | IINC 2 -1 > [iajc] | GOTO L2 > [iajc] | L1: ALOAD 4 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getGroupid ()Ljava/lang/String; > [iajc] | LDC "commons-logging" > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (Ljava/lang/String;Ljava/ > lang/String;)V > [iajc] | ALOAD 4 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getArtifactid ()Ljava/lang/String; > [iajc] | LDC "commons-logging" > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (Ljava/lang/String;Ljava/ > lang/String;)V > [iajc] | ALOAD 4 > [iajc] | INVOKEVIRTUAL > gsc.repository.ejb.Jar.getVersion ()Ljava/lang/String; > [iajc] | LDC "1.0.2" > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (Ljava/lang/String;Ljava/ > lang/String;)V > [iajc] | IINC 2 -1 > [iajc] | L2: GOTO L0 > [iajc] | L3: ILOAD_2 > [iajc] | ICONST_0 > [iajc] | INVOKESTATIC > gsc.repository.IdentifierTest.assertEquals (II)V > [iajc] | RETURN > [iajc] method-execution(void > gsc.repository.IdentifierTest.testIdentifierMixedUp()) > [iajc] end public void testIdentifierMixedUp() throws > java.security.NoSuchAlgorithmException, java.io.IOException > > [iajc] end public class gsc.repository.IdentifierTest > > [iajc] > [iajc] Exception thrown from AspectJ 1.5.0M5 > > [iajc] This might be logged as a bug already -- find current > bugs at > [iajc] http://bugs.eclipse.org/bugs/buglist.cgi? > product=AspectJ&component=Compiler > > [iajc] Bugs for exceptions thrown have titles File:line from > the top stack, > [iajc] e.g., "SomeFile.java:243" > > [iajc] If you don't find the exception below in a bug, please > add a new bug > [iajc] at http://bugs.eclipse.org/bugs/enter_bug.cgi? > product=AspectJ > [iajc] To make the bug a priority, please include a test program > [iajc] that can reproduce this exception. > [iajc] Incorrectly attempting counter operation on stacked cflow > > [iajc] when implementing on shadow method-execution(void > gsc.repository.IdentifierTest.testIdentifierExactMatch()) > [iajc] when weaving type gsc.repository.IdentifierTest > [iajc] when weaving classes > [iajc] when weaving > [iajc] when batch building with classpath: /Users/sam/Library/ > Java/Extensions/jsk-policy.jar:/System/Library/Java/Extensions/ > CoreAudio.jar:/System/Library/Java/Extensions/dns_sd.jar:/System/ > Library/Java/Extensions/j3daudio.jar:/System/Library/Java/Extensions/ > j3dcore.jar:/System/Library/Java/Extensions/j3dutils.jar:/System/ > Library/Java/Extensions/jai_codec.jar:/System/Library/Java/Extensions/ > jai_core.jar:/System/Library/Java/Extensions/mlibwrapper_jai.jar:/ > System/Library/Java/Extensions/MRJToolkit.jar:/System/Library/Java/ > Extensions/QTJava.zip:/System/Library/Java/Extensions/QTJSupport.jar:/ > System/Library/Java/Extensions/vecmath.jar:/System/Library/Frameworks/ > JavaVM.framework/Versions/1.5.0/Home/lib/ext/apple_provider.jar:/ > System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ > ext/dnsns.jar:/System/Library/Frameworks/JavaVM.framework/Versions/ > 1.5.0/Home/lib/ext/localedata.jar:/System/Library/Frameworks/ > JavaVM.framework/Versions/1.5.0/Home/lib/ext/sunjce_provider.jar:/ > Users/sam/gs/squire/jardb/.aspectj-lib/aspectjrt-1.5.0_M5.jar:/Users/ > sam/gs/squire/jardb/.aspectj-lib/aspectjtools-1.5.0_M5.jar:/Users/sam/ > gs/squire/jardb/target/classes:/Users/sam/gs/squire/jardb/target/test- > classes:/Users/sam/gs/squire/jardb/.lib/antlr-2.7.5.jar:/Users/sam/gs/ > squire/jardb/.lib/asm-1.5.3.jar:/Users/sam/gs/squire/jardb/.lib/ > cglib-2.1_2.jar:/Users/sam/gs/squire/jardb/.lib/commons- > collections-2.1.1.jar:/Users/sam/gs/squire/jardb/.lib/commons- > logging-1.0.4.jar:/Users/sam/gs/squire/jardb/.lib/dom4j-1.6.jar:/ > Users/sam/gs/squire/jardb/.lib/ehcache-1.1.jar:/Users/sam/gs/squire/ > jardb/.lib/ejb3-persistence-pr.jar:/Users/sam/gs/squire/jardb/.lib/ > emma-2.0.latest.jar:/Users/sam/gs/squire/jardb/.lib/ > emma_ant-2.0.latest.jar:/Users/sam/gs/squire/jardb/.lib/ > hibernate-3.1alpha1.jar:/Users/sam/gs/squire/jardb/.lib/hibernate- > annotations-3.1beta3.jar:/Users/sam/gs/squire/jardb/.lib/hibernate- > entitymanager-3.1beta1.jar:/Users/sam/gs/squire/jardb/.lib/ > jta-1.0.jar:/Users/sam/gs/squire/jardb/.lib/junit-3.8.1.jar:/Users/ > sam/gs/squire/jardb/.lib/postgresql-7.4.1-jdbc3.jar:/Users/sam/gs/ > squire/jardb/.lib/svn-javahl-1.2.0.jar:/Users/sam/gs/squire/jardb/lib/ > testng-4.2-jdk15.jar:/Users/sam/gs/squire/jardb/target/aspects.jar: > [iajc] Incorrectly attempting counter operation on stacked cflow > [iajc] java.lang.RuntimeException: Incorrectly attempting > counter operation on stacked cflow > [iajc] at org.aspectj.weaver.bcel.BcelShadow.weaveCflowEntry > (BcelShadow.java:1890) > [iajc] at org.aspectj.weaver.bcel.BcelAdvice.implementOn > (BcelAdvice.java:231) > [iajc] at org.aspectj.weaver.Shadow.implementMungers > (Shadow.java:514) > [iajc] at org.aspectj.weaver.Shadow.implement(Shadow.java:391) > [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.implement > (BcelClassWeaver.java:2142) > [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.weave > (BcelClassWeaver.java:467) > [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.weave > (BcelClassWeaver.java:102) > [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weave > (BcelWeaver.java:1534) > [iajc] at > org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java: > 1485) > [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify > (BcelWeaver.java:1266) > [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weave > (BcelWeaver.java:1088) > [iajc] at > org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.weave > (AjCompilerAdapter.java:300) > [iajc] at > org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.afterCompiling > (AjCompilerAdapter.java:178) > [iajc] at > org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$afterReturning > $org_aspectj_ajdt_internal_compiler_CompilerAdapter$2$f9cc9ca0 > (CompilerAdapter.aj:70) > [iajc] at > org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile > (Compiler.java:367) > [iajc] at > org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation > (AjBuildManager.java:809) > [iajc] at > org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild > (AjBuildManager.java:230) > [iajc] at > org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild > (AjBuildManager.java:156) > [iajc] at org.aspectj.ajdt.ajc.AjdtCommand.doCommand > (AjdtCommand.java:112) > [iajc] at org.aspectj.ajdt.ajc.AjdtCommand.runCommand > (AjdtCommand.java:60) > [iajc] at org.aspectj.tools.ajc.Main.run(Main.java:326) > [iajc] at org.aspectj.tools.ajc.Main.runMain(Main.java:240) > [iajc] at > org.aspectj.tools.ant.taskdefs.AjcTask.executeInSameVM(AjcTask.java: > 1210) > [iajc] at org.aspectj.tools.ant.taskdefs.AjcTask.execute > (AjcTask.java:1001) > [iajc] at org.apache.tools.ant.UnknownElement.execute > (UnknownElement.java:275) > [iajc] at org.apache.tools.ant.Task.perform(Task.java:364) > [iajc] at org.apache.tools.ant.taskdefs.Sequential.execute > (Sequential.java:64) > [iajc] at org.apache.tools.ant.UnknownElement.execute > (UnknownElement.java:275) > [iajc] at org.apache.tools.ant.Task.perform(Task.java:364) > [iajc] at > org.apache.tools.ant.taskdefs.MacroInstance.execute > (MacroInstance.java:378) > [iajc] at org.apache.tools.ant.UnknownElement.execute > (UnknownElement.java:275) > [iajc] at org.apache.tools.ant.Task.perform(Task.java:364) > [iajc] at org.apache.tools.ant.Target.execute(Target.java:341) > [iajc] at org.apache.tools.ant.Target.performTasks > (Target.java:369) > [iajc] at org.apache.tools.ant.Project.executeSortedTargets > (Project.java:1216) > [iajc] at org.apache.tools.ant.Project.executeTarget > (Project.java:1185) > [iajc] at > org.apache.tools.ant.helper.DefaultExecutor.executeTargets > (DefaultExecutor.java:40) > [iajc] at org.apache.tools.ant.Project.executeTargets > (Project.java:1068) > [iajc] at org.apache.tools.ant.Main.runBuild(Main.java:668) > [iajc] at org.apache.tools.ant.Main.startAnt(Main.java:187) > [iajc] at org.apache.tools.ant.launch.Launcher.run > (Launcher.java:246) > [iajc] at org.apache.tools.ant.launch.Launcher.main > (Launcher.java:67) > > > package gsc.aspects.testing; > > import junit.framework.*; > import java.io.*; > import java.util.*; > > import org.aspectj.lang.annotation.Pointcut; > import org.aspectj.lang.annotation.Before; > import org.aspectj.lang.annotation.Aspect; > import org.aspectj.lang.annotation.After; > import org.aspectj.lang.JoinPoint; > > @Aspect > public class TestMethodMapperAnnotations { > > @Pointcut("this(testCase) && this(TestCase) && execution(void > test*())") > public void inTestClass(TestCase testCase) { > } > > private Map<String, Map<String, Integer>> coverage; > > @Before("cflowbelow(inTestClass(testCase)) && execution(* *(..))") > public void beforeMethodExecution(JoinPoint thisJoinPoint, > TestCase testCase) { > String testname = testCase.getClass().getName(); > String methodSignature = thisJoinPoint.getStaticPart > ().getSignature().toString(); > Map<String, Integer> tests = coverage.get(methodSignature); > if (tests == null) { > tests = new HashMap<String, Integer>(); > coverage.put(methodSignature, tests); > } > Integer count = tests.get(testname); > if (count == null) { > count = 1; > } else { > count++; > } > tests.put(testname, count); > } > > @Before("inTestClass(testCase)") > public void beforeExecutingTestMethod(TestCase testCase) { > try { > File file = new File("results.ser"); > if (file.exists()) { > ObjectInputStream ois = new ObjectInputStream(new > FileInputStream(file)); > coverage = (Map<String, Map<String, Integer>>) > ois.readObject(); > ois.close(); > } else { > coverage = new HashMap<String, Map<String, Integer>>(); > } > } catch (Exception e) { > e.printStackTrace(); > } > } > > @After("inTestClass(testCase)") > public void afterExecutingTestMethod(TestCase testCase) { > try { > File file = new File("results.ser"); > ObjectOutputStream oos = new ObjectOutputStream(new > FileOutputStream(file)); > oos.writeObject(coverage); > oos.close(); > } catch (Exception e) { > e.printStackTrace(); > } > } > > } > > vs. > > package gsc.aspects.testing; > > import junit.framework.*; > import java.io.*; > import java.util.*; > > public aspect TestMethodMapper { > > pointcut inTestClass(TestCase testCase) : this(testCase) && this > (TestCase) && execution(void test*()); > private Map<String, Map<String, Integer>> coverage; > > before(TestCase testCase) : cflowbelow(inTestClass(testCase)) && > execution(* *(..)) { > String testname = testCase.getClass().getName(); > String methodSignature = thisJoinPointStaticPart.getSignature > ().toString(); > Map<String, Integer> tests = coverage.get(methodSignature); > if (tests == null) { > tests = new HashMap<String, Integer>(); > coverage.put(methodSignature, tests); > } > Integer count = tests.get(testname); > if (count == null) { > count = 1; > } else { > count++; > } > tests.put(testname, count); > } > > before(TestCase testCase) : inTestClass(testCase) { > try { > File file = new File("results.ser"); > if (file.exists()) { > ObjectInputStream ois = new ObjectInputStream(new FileInputStream > (file)); > coverage = (Map<String, Map<String, Integer>>) ois.readObject(); > ois.close(); > } else { > coverage = new HashMap<String, Map<String, Integer>>(); > } > } catch (Exception e) { > e.printStackTrace(); > } > } > > after(TestCase testCase) : inTestClass(testCase) { > try { > File file = new File("results.ser"); > ObjectOutputStream oos = new ObjectOutputStream(new > FileOutputStream(file)); > oos.writeObject(coverage); > oos.close(); > } catch (Exception e) { > e.printStackTrace(); > } > } > > } > > >
spotted issue in exposed stated commiting fix note: Sam, pointcut is not what you want in your sample: @Pointcut("this(testCase) && this(TestCase) && execution(void test*())") ^^^^^^^^^^^ // need FQN in @AJ, and actually don't need it since you use a binding with another this(testCase) public void inTestClass(TestCase testCase) {
fix available