Community
Participate
Working Groups
When weaving the JDom sources with the AspectJ5 M3 compiler I get an error. The aspect it crashes on is: pointcut classes() : !within(nl.uu.tracing.*); pointcut execmethods(): classes() && call(* *(..)) && !within(AbstractTrace); after() returning(Object a): classes() && execmethods() { doTraceExit(a, thisJoinPoint, true); } The java code it crashes on, is: private void dump(List list) { System.out.println("---"); Iterator iter = list.iterator(); while(iter.hasNext()) { System.out.println("> " + iter.next()); } } The strange thing is that the compiler complains about a generic Type variable, while the source is plain java 1.4 without any generics. It compilers perfectly ok with the latest aspectj 1.2.1 compiler. Here is (part of) the stacktrace. The trace is enormous, i think it starts with a few 100 lines before this trace: [iajc] private void dump(java.util.List) org.aspectj.weaver.MethodDeclarationLineNumber: 1106:43197 [iajc] : [iajc] method-execution(void org.jdom.test.cases.TestFilterList.dump(java.util.List)) [iajc] | GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 1107) [iajc] | LDC_W "---" [iajc] | method-call(void java.io.PrintStream.println(java.lang.String)) [iajc] | | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V [iajc] | method-call(void java.io.PrintStream.println(java.lang.String)) [iajc] | ALOAD_1 // java.util.List list (line 1108) [iajc] | method-call(java.util.Iterator java.util.List.iterator()) [iajc] | | INVOKEINTERFACE java.util.List.iterator ()Ljava/util/Iterator; [iajc] | method-call(java.util.Iterator java.util.List.iterator()) [iajc] | ASTORE_2 [iajc] | GOTO L1 (line 1109) [iajc] | L0: GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 1110) [iajc] | NEW java.lang.StringBuilder [iajc] | DUP [iajc] | LDC_W "> " [iajc] | constructor-call(void java.lang.StringBuilder.<init>(java.lang.String)) [iajc] | | INVOKESPECIAL java.lang.StringBuilder.<init> (Ljava/lang/String;)V [iajc] | constructor-call(void java.lang.StringBuilder.<init>(java.lang.String)) [iajc] | ALOAD_2 // java.util.Iterator iter [iajc] | method-call(java.lang.Object java.util.Iterator.next()) [iajc] | | INVOKEINTERFACE java.util.Iterator.next ()Ljava/lang/Object; [iajc] | method-call(java.lang.Object java.util.Iterator.next()) [iajc] | method-call(java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.Object)) [iajc] | | INVOKEVIRTUAL java.lang.StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; [iajc] | method-call(java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.Object)) [iajc] | method-call(java.lang.String java.lang.StringBuilder.toString()) [iajc] | | INVOKEVIRTUAL java.lang.StringBuilder.toString ()Ljava/lang/String; [iajc] | method-call(java.lang.String java.lang.StringBuilder.toString()) [iajc] | method-call(void java.io.PrintStream.println(java.lang.String)) [iajc] | | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V [iajc] | method-call(void java.io.PrintStream.println(java.lang.String)) [iajc] | L1: ALOAD_2 // java.util.Iterator iter (line 1109) [iajc] | method-call(boolean java.util.Iterator.hasNext()) [iajc] | | INVOKEINTERFACE java.util.Iterator.hasNext ()Z [iajc] | method-call(boolean java.util.Iterator.hasNext()) [iajc] | IFNE L0 [iajc] | RETURN (line 1112) [iajc] method-execution(void org.jdom.test.cases.TestFilterList.dump(java.util.List)) [iajc] end private void dump(java.util.List) [iajc] end public final class org.jdom.test.cases.TestFilterList [iajc] org.aspectj.apache.bcel.classfile.ClassFormatException: Invalid method signature: TT; [iajc] at org.aspectj.apache.bcel.classfile.Utility.typeOfSignature(Utility.java:1293) [iajc] at org.aspectj.apache.bcel.generic.Type.getTypeInternal(Type.java:166) [iajc] at org.aspectj.apache.bcel.generic.Type.getTypeInternal(Type.java:174) [iajc] at org.aspectj.apache.bcel.generic.Type.getType(Type.java:155) [iajc] at org.aspectj.weaver.bcel.BcelWorld.makeBcelType(BcelWorld.java:197) [iajc] at org.aspectj.weaver.bcel.BcelVar.createStore(BcelVar.java:47) [iajc] at org.aspectj.weaver.bcel.BcelVar.appendStore(BcelVar.java:51) [iajc] at org.aspectj.weaver.bcel.BcelShadow.weaveAfterReturning(BcelShadow.java:1602) [iajc] at org.aspectj.weaver.bcel.BcelAdvice.implementOn(BcelAdvice.java:173) [iajc] at org.aspectj.weaver.Shadow.implementMungers(Shadow.java:497) [iajc] at org.aspectj.weaver.Shadow.implement(Shadow.java:375) [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.implement(BcelClassWeaver.java:1754) [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:393) [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:96) [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1372) [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1337) [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1114) [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1001) [iajc] at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.weave(AjCompilerAdapter.java:286) [iajc] at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.afterCompiling(AjCompilerAdapter.java:165) [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:728) [iajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:206) [iajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:140) [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:324) [iajc] at org.aspectj.tools.ajc.Main.runMain(Main.java:238) [iajc] at org.aspectj.tools.ant.taskdefs.AjcTask.executeInSameVM(AjcTask.java:1194) [iajc] at org.aspectj.tools.ant.taskdefs.AjcTask.execute(AjcTask.java:985) [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:377) [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.executeTarget(Project.java:1214) [iajc] at org.apache.tools.ant.Project.executeTargets(Project.java:1062) [iajc] at org.apache.tools.ant.Main.runBuild(Main.java:673) [iajc] at org.apache.tools.ant.Main.startAnt(Main.java:188) [iajc] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:196) [iajc] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:55) [iajc] ABORT [iajc] [iajc] Exception thrown from AspectJ 1.5.0_M3a
Although your source is plain 1.4 - are you compiling it on top of a 1.5 VM? If so, that would explain the TT; since the underlying types you are using (List for example) are generic. definetly needs fixing for 1.5.0
Yep, I'm compiling with Java 1.5 compiler (1.5.0_01 i think). It doesn't matter if i set source attribute on "1.4" or "1.5". Ant call is: <iajc debug="true" outjar="${tests.jar}" sourcerootsref="weave.sources" verbose="false" source="1.5" sourceRootCopyFilter="**/CVS/*,**/*.java" > <classpath location="${instr.build}" /> <classpath refid="classpath.aspectj" /> <classpath refid="classpath.main" /> <classpath refid="@{classpathref}" /> </iajc> The stack trace is enormous, so the problem might be somewhere else (the posted part is just the end)
Please can you retry this on a recent dev build? I see it was initially happening on M3a and we've done a ton of generics modifications since then. Although your program is not using 1.5 features, the method: private void dump(java.util.List) is simply using the generic type List<T> in its raw form as it is generic in the underlying 1.5 class libraries. If you run everything on a 1.4 VM the problem is likely to disappear - but I'd still like to fix it on 1.5 if you can still recreate it. (Compiling with -1.4 on a 1.5 VM doesn't make any difference as the compiler will still see the generic type List from rt.jar.)
updating target to RC1 for consistency...
please can you retry on the latest dev build? or I'll have to close as WORKSFORME :( I'm keen to resolve all generics issues we can for RC1. thanks.
Sorry for the late reply. I've checked it again and I cannot reproduce it again. So I assume it is indeed fixed.
thanks for retrying it! I'll close this as already fixed - please reopen if it happens again.