Bug 111750 - [iajc] Invalid method signature: TT; compiles ok with aspectj 1.2.1
Summary: [iajc] Invalid method signature: TT; compiles ok with aspectj 1.2.1
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.5.0M3   Edit
Hardware: PC Linux
: P2 normal (vote)
Target Milestone: 1.5.0RC1   Edit
Assignee: Adrian Colyer CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-10-06 06:53 EDT by Koen Muilwijk CLA
Modified: 2005-11-02 10:42 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Koen Muilwijk CLA 2005-10-06 06:53:17 EDT
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
Comment 1 Andrew Clement CLA 2005-10-06 07:09:10 EDT
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
Comment 2 Koen Muilwijk CLA 2005-10-06 07:23:35 EDT
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)
Comment 3 Andrew Clement CLA 2005-10-28 03:35:33 EDT
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.)
Comment 4 Adrian Colyer CLA 2005-10-31 03:45:56 EST
updating target to RC1 for consistency...
Comment 5 Andrew Clement CLA 2005-11-02 05:59:36 EST
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.
Comment 6 Koen Muilwijk CLA 2005-11-02 10:37:53 EST
Sorry for the late reply. I've checked it again and I cannot reproduce it again.
So I assume it is indeed fixed.
Comment 7 Andrew Clement CLA 2005-11-02 10:42:54 EST
thanks for retrying it!  I'll close this as already fixed - please reopen if it
happens again.