Hi, AspectJ hackers, here is what I got tonight as a reproducable error.
Sorry, I searched a bit of the bugzilla but couldn't find anything
similar. It has something to do with a switch statement in the aspect
code. Thanks for any information.
To re-produce, compile the following on ajc1.1, ajc1.0, however, is OK.
Test.java
public class Test {
public String method1(){
System.out.println("method1");
return "method1";
}
public static void main(String [] args)
{
System.out.println(new Test().method1());
}
}
===========TestAspect.java================
String around(Test t):target(t)&&
call(public String method1())
{
int flag = 1;
switch(flag)
{
case 1:
}
return null;
}
C:\eclipse\workspace\Test>c:\aspectj1.1\bin\ajc *.java > out
trouble in:
public class Test extends java.lang.Object:
public void <init>():
ALOAD_0 // Test this (line 13)
INVOKESPECIAL java.lang.Object.<init> ()V
ALOAD_0
INVOKESTATIC
Test1Aspect.ajc$interFieldInit$Test1Aspect$Test$flag (LTest;)V
constructor-execution(void Test.<init>())
| RETURN
constructor-execution(void Test.<init>())
end public void <init>()
public String method1():
method-execution(java.lang.String Test.method1())
| field-get(java.io.PrintStream java.lang.System.out)
| | GETSTATIC java.lang.System.out Ljava/io/PrintStream;
(line 15)
| field-get(java.io.PrintStream java.lang.System.out)
| LDC "method1"
| method-call(void java.io.PrintStream.println(java.lang.String))
| | INVOKEVIRTUAL java.io.PrintStream.println
(Ljava/lang/String;)V
| method-call(void java.io.PrintStream.println(java.lang.String))
| LDC "method1" (line 16)
| ARETURN
method-execution(java.lang.String Test.method1())
end public String method1()
public String method2():
method-execution(java.lang.String Test.method2())
| ALOAD_0 // Test this (line 21)
| ASTORE_2
| method-call(java.lang.String Test.method1())
| | ALOAD_0
| | ALOAD_2
| | INVOKESTATIC Test1Aspect.aspectOf ()LTest1Aspect;
| | ALOAD_2
| | ACONST_NULL
| | INVOKESTATIC Test.method1_aroundBody1$advice
(LTest;LTest;LTest1Aspect;LTest;Lorg/aspectj/runtime/in
ternal/AroundClosure;)Ljava/lang/String;
| method-call(java.lang.String Test.method1())
| ASTORE_1
| NEW java.lang.StringBuffer (line 22)
| DUP
| ALOAD_1 // java.lang.String s
| method-call(java.lang.String
java.lang.String.valueOf(java.lang.Object))
| | INVOKESTATIC java.lang.String.valueOf
(Ljava/lang/Object;)Ljava/lang/String;
| method-call(java.lang.String
java.lang.String.valueOf(java.lang.Object))
| constructor-call(void
java.lang.StringBuffer.<init>(java.lang.String))
| | INVOKESPECIAL java.lang.StringBuffer.<init>
(Ljava/lang/String;)V
| constructor-call(void
java.lang.StringBuffer.<init>(java.lang.String))
| LDC "method2"
| method-call(java.lang.StringBuffer
java.lang.StringBuffer.append(java.lang.String))
| | INVOKEVIRTUAL java.lang.StringBuffer.append
(Ljava/lang/String;)Ljava/lang/StringBuffer;
| method-call(java.lang.StringBuffer
java.lang.StringBuffer.append(java.lang.String))
| method-call(java.lang.String java.lang.StringBuffer.toString())
| | INVOKEVIRTUAL java.lang.StringBuffer.toString
()Ljava/lang/String;
| method-call(java.lang.String java.lang.StringBuffer.toString())
| ASTORE_1 // java.lang.String s
| field-get(java.io.PrintStream java.lang.System.out)
| | GETSTATIC java.lang.System.out Ljava/io/PrintStream;
(line 23)
| field-get(java.io.PrintStream java.lang.System.out)
| LDC "method2"
| method-call(void java.io.PrintStream.println(java.lang.String))
| | INVOKEVIRTUAL java.io.PrintStream.println
(Ljava/lang/String;)V
| method-call(void java.io.PrintStream.println(java.lang.String))
| ALOAD_1 // java.lang.String s (line 24)
| ARETURN
method-execution(java.lang.String Test.method2())
end public String method2()
public String method3():
method-execution(java.lang.String Test.method3())
| field-get(java.io.PrintStream java.lang.System.out)
| | GETSTATIC java.lang.System.out Ljava/io/PrintStream;
(line 30)
| field-get(java.io.PrintStream java.lang.System.out)
| LDC "method3"
| method-call(void java.io.PrintStream.println(java.lang.String))
| | INVOKEVIRTUAL java.io.PrintStream.println
(Ljava/lang/String;)V
| method-call(void java.io.PrintStream.println(java.lang.String))
| NEW java.lang.String (line 32)
| DUP
| LDC ""
| constructor-call(void java.lang.String.<init>(java.lang.String))
| | INVOKESPECIAL java.lang.String.<init>
(Ljava/lang/String;)V
| constructor-call(void java.lang.String.<init>(java.lang.String))
| ARETURN
method-execution(java.lang.String Test.method3())
end public String method3()
public String method4():
method-execution(java.lang.String Test.method4())
| ALOAD_0 // Test this (line 37)
| ASTORE_2
| method-call(java.lang.String Test.method1())
| | ALOAD_0
| | ALOAD_2
| | INVOKESTATIC Test1Aspect.aspectOf ()LTest1Aspect;
| | ALOAD_2
| | ACONST_NULL
| | INVOKESTATIC Test.method1_aroundBody3$advice
(LTest;LTest;LTest1Aspect;LTest;Lorg/aspectj/runtime/in
ternal/AroundClosure;)Ljava/lang/String;
| method-call(java.lang.String Test.method1())
| ASTORE_1
| NEW java.lang.StringBuffer (line 38)
| DUP
| ALOAD_1 // java.lang.String s
| method-call(java.lang.String
java.lang.String.valueOf(java.lang.Object))
| | INVOKESTATIC java.lang.String.valueOf
(Ljava/lang/Object;)Ljava/lang/String;
| method-call(java.lang.String
java.lang.String.valueOf(java.lang.Object))
| constructor-call(void
java.lang.StringBuffer.<init>(java.lang.String))
| | INVOKESPECIAL java.lang.StringBuffer.<init>
(Ljava/lang/String;)V
| constructor-call(void
java.lang.StringBuffer.<init>(java.lang.String))
| ALOAD_0 // Test this
| method-call(java.lang.String Test.method2())
| | INVOKEVIRTUAL Test.method2 ()Ljava/lang/String;
| method-call(java.lang.String Test.method2())
| method-call(java.lang.StringBuffer
java.lang.StringBuffer.append(java.lang.String))
| | INVOKEVIRTUAL java.lang.StringBuffer.append
(Ljava/lang/String;)Ljava/lang/StringBuffer;
| method-call(java.lang.StringBuffer
java.lang.StringBuffer.append(java.lang.String))
| method-call(java.lang.String java.lang.StringBuffer.toString())
| | INVOKEVIRTUAL java.lang.StringBuffer.toString
()Ljava/lang/String;
| method-call(java.lang.String java.lang.StringBuffer.toString())
| ASTORE_1 // java.lang.String s
| ALOAD_0 // Test this (line 39)
| method-call(java.lang.String Test.method3())
| | INVOKEVIRTUAL Test.method3 ()Ljava/lang/String;
| method-call(java.lang.String Test.method3())
| POP
| ALOAD_1 // java.lang.String s (line 40)
| ARETURN
method-execution(java.lang.String Test.method4())
end public String method4()
public static void main(String[]):
method-execution(void Test.main(java.lang.String[]))
| field-get(java.io.PrintStream java.lang.System.out)
| | GETSTATIC java.lang.System.out Ljava/io/PrintStream;
(line 47)
| field-get(java.io.PrintStream java.lang.System.out)
| NEW Test
| DUP
| constructor-call(void Test.<init>())
| | INVOKESPECIAL Test.<init> ()V
| constructor-call(void Test.<init>())
| method-call(java.lang.String Test.method4())
| | INVOKEVIRTUAL Test.method4 ()Ljava/lang/String;
| method-call(java.lang.String Test.method4())
| method-call(void java.io.PrintStream.println(java.lang.String))
| | INVOKEVIRTUAL java.io.PrintStream.println
(Ljava/lang/String;)V
| method-call(void java.io.PrintStream.println(java.lang.String))
| RETURN (line 48)
method-execution(void Test.main(java.lang.String[]))
end public static void main(String[])
static final String method1_aroundBody0(Test, Test):
ALOAD_1
INVOKEVIRTUAL Test.method1 ()Ljava/lang/String;
(line 21)
ARETURN
end static final String method1_aroundBody0(Test, Test)
static final String method1_aroundBody1$advice(Test, Test, Test1Aspect,
Test, org.aspectj.runtime.internal.AroundClosu
re):
advice-execution(java.lang.String
Test1Aspect.ajc$around$Test1Aspect$e5(Test,
org.aspectj.runtime.internal.AroundClo
sure))
| ICONST_1 (line 18)
| ISTORE 5
| ILOAD 5 (line 19)
| TABLESWITCH
| 1: null
| default: L0
| L0: ACONST_NULL (line 23)
| ARETURN
advice-execution(java.lang.String
Test1Aspect.ajc$around$Test1Aspect$e5(Test,
org.aspectj.runtime.internal.AroundClo
sure))
end static final String method1_aroundBody1$advice(Test, Test,
Test1Aspect, Test, org.aspectj.runtime.internal.AroundC
losure)
static final String method1_aroundBody2(Test, Test):
ALOAD_1
INVOKEVIRTUAL Test.method1 ()Ljava/lang/String;
(line 37)
ARETURN
end static final String method1_aroundBody2(Test, Test)
static final String method1_aroundBody3$advice(Test, Test, Test1Aspect,
Test, org.aspectj.runtime.internal.AroundClosu
re):
advice-execution(java.lang.String
Test1Aspect.ajc$around$Test1Aspect$e5(Test,
org.aspectj.runtime.internal.AroundClo
sure))
| ICONST_1 (line 18)
| ISTORE 5
| ILOAD 5 (line 19)
| TABLESWITCH
| 1: null
| default: L0
| L0: ACONST_NULL (line 23)
| ARETURN
advice-execution(java.lang.String
Test1Aspect.ajc$around$Test1Aspect$e5(Test,
org.aspectj.runtime.internal.AroundClo
sure))
end static final String method1_aroundBody3$advice(Test, Test,
Test1Aspect, Test, org.aspectj.runtime.internal.AroundC
losure)
end public class Test
ABORT
Exception thrown from AspectJ 1.1.0
This might be logged as a bug already -- find current bugs at
http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Compiler
Bugs for exceptions thrown have titles File:line from the top stack,
e.g., "SomeFile.java:243"
If you don't find the exception below in a bug, please add a new bug
at http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
To make the bug a priority, please include a test program
that can reproduce this exception.
null
java.lang.NullPointerException
at
org.aspectj.weaver.bcel.LazyMethodGen.remap(LazyMethodGen.java:892)
at
org.aspectj.weaver.bcel.LazyMethodGen.packBody(LazyMethodGen.java:800)
at
org.aspectj.weaver.bcel.LazyMethodGen.pack(LazyMethodGen.java:706)
at
org.aspectj.weaver.bcel.LazyMethodGen.getMethod(LazyMethodGen.java:284)
at
org.aspectj.weaver.bcel.LazyClassGen.writeBack(LazyClassGen.java:164)
at
org.aspectj.weaver.bcel.LazyClassGen.getJavaClass(LazyClassGen.java:169)
at org.aspectj.weaver.bcel.BcelWeaver.dump(BcelWeaver.java:417)
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:364)
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:335)
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:272)
at
org.aspectj.ajdt.internal.core.builder.AjBuildManager.weaveAndGenerateClassFiles(AjBuildManager.java:256)
at
org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:164)
at
org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:78)
at
org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:106)
at
org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
at org.aspectj.tools.ajc.Main.run(Main.java:217)
at org.aspectj.tools.ajc.Main.runMain(Main.java:155)
at org.aspectj.tools.ajc.Main.main(Main.java:72)
1 fail|abort
Charles Zhang (http://www.eecg.utoronto.ca/~czhang)
Computer Group, Dept. of Elec. & Comp. Engineering
U. of Toronto, Ontario, Canada
*********************************************************
" Yawn!!" (Charles Zhang)
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users