Community
Participate
Working Groups
Is this the first bug against AspectJ 1.5.0? This error came from an incremental compilation where I was changing the name of a static method that I'd pulled up from a nested aspect: org.aspectj.weaver.BCException at org.aspectj.weaver.bcel.LazyClassGen.getLazyMethodGen(LazyClassGen.java:1216) at org.aspectj.weaver.bcel.LazyClassGen.getLazyMethodGen(LazyClassGen.java:1201) at org.aspectj.weaver.bcel.BcelShadow.weaveAroundInline(BcelShadow.java:2048) at org.aspectj.weaver.bcel.BcelAdvice.implementOn(BcelAdvice.java:232) at org.aspectj.weaver.Shadow.implementMungers(Shadow.java:588) at org.aspectj.weaver.Shadow.implement(Shadow.java:405) at org.aspectj.weaver.bcel.BcelClassWeaver.implement(BcelClassWeaver.java:2146) at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:467) at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:102) at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1543) at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1494) at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:979) at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.weave(AjCompilerAdapter.java:300) at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.afterCompiling(AjCompilerAdapter.java:178) at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$afterReturning$org_aspectj_ajdt_internal_compiler_CompilerAdapter$2$f9cc9ca0(CompilerAdapter.aj:70) at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:367) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:811) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:254) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.incrementalBuild(AjBuildManager.java:163) at org.aspectj.ajde.internal.CompilerAdapter.compile(CompilerAdapter.java:117) at org.aspectj.ajde.internal.AspectJBuildManager$CompilerThread.run(AspectJBuildManager.java:191) trouble in: public class glassbox.monitor.resource.RemoteCallMonitor extends glassbox.monitor.AbstractMonitor implements glassbox.config.Bean: private static Throwable ajc$initFailureCause public static final glassbox.monitor.resource.RemoteCallMonitor ajc$perSingletonInstance private static transient glassbox.monitor.AbstractMonitor$RuntimeControl ajc$glassbox_monitor_AbstractMonitor$RuntimeControl$ptwAspectInstance static void <clinit>(): staticinitialization(void glassbox.monitor.resource.RemoteCallMonitor.<clinit>()) | LDC "glassbox.monitor.resource.RemoteCallMonitor" | INVOKESTATIC glassbox.monitor.AbstractMonitor$RuntimeControl.ajc$createAspectInstance (Ljava/lang/String;)Lglassbox/monitor/AbstractMonitor$RuntimeControl; | PUTSTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$glassbox_monitor_AbstractMonitor$RuntimeControl$ptwAspectInstance Lglassbox/monitor/AbstractMonitor$RuntimeControl; | catch java.lang.Throwable -> E0 | | INVOKESTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$postClinit ()V (line 8) | catch java.lang.Throwable -> E0 | GOTO L0 | E0: ASTORE_0 | ALOAD_0 | PUTSTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$initFailureCause Ljava/lang/Throwable; | L0: RETURN staticinitialization(void glassbox.monitor.resource.RemoteCallMonitor.<clinit>()) end static void <clinit>() public void <init>(): ALOAD_0 // glassbox.monitor.resource.RemoteCallMonitor this (line 8) INVOKESPECIAL glassbox.monitor.AbstractMonitor.<init> ()V constructor-execution(void glassbox.monitor.resource.RemoteCallMonitor.<init>()) | catch java.lang.Exception -> E0 | | RETURN | catch java.lang.Exception -> E0 | E0: ASTORE_1 | ALOAD_1 | INSTANCEOF java.lang.RuntimeException | IFEQ L0 | ALOAD_1 | ATHROW | L0: NEW org.aspectj.lang.SoftException | DUP | ALOAD_1 | INVOKESPECIAL org.aspectj.lang.SoftException.<init> (Ljava/lang/Throwable;)V | ATHROW constructor-execution(void glassbox.monitor.resource.RemoteCallMonitor.<init>()) end public void <init>() private glassbox.track.api.PerfStats lookupCallStats(Object, Object, Object) org.aspectj.weaver.MethodDeclarationLineNumber: 14:600 : method-execution(glassbox.track.api.PerfStats glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats(java.lang.Object, java.lang.Object, java.lang.Object)) | catch java.lang.Exception -> E0 | | ALOAD_3 // java.lang.Object endPoint (line 15) | | method-call(java.lang.String java.lang.Object.toString()) | | | INVOKEVIRTUAL java.lang.Object.toString ()Ljava/lang/String; | | method-call(java.lang.String java.lang.Object.toString()) | | ASTORE 4 | | method-call(glassbox.track.api.StatisticsRegistry glassbox.monitor.AbstractMonitor.getRegistry()) | | | INVOKESTATIC glassbox.monitor.AbstractMonitor.getRegistry ()Lglassbox/track/api/StatisticsRegistry; (line 16) | | method-call(glassbox.track.api.StatisticsRegistry glassbox.monitor.AbstractMonitor.getRegistry()) | | BIPUSH 6 | | ALOAD 4 // java.lang.String key | | method-call(glassbox.track.api.PerfStats glassbox.track.api.StatisticsRegistry.getPerfStats(int, java.io.Serializable)) | | | INVOKEINTERFACE glassbox.track.api.StatisticsRegistry.getPerfStats (ILjava/io/Serializable;)Lglassbox/track/api/PerfStats; | | method-call(glassbox.track.api.PerfStats glassbox.track.api.StatisticsRegistry.getPerfStats(int, java.io.Serializable)) | | ARETURN | catch java.lang.Exception -> E0 | E0: ASTORE 5 | ALOAD 5 | INSTANCEOF java.lang.RuntimeException | IFEQ L0 | ALOAD 5 | ATHROW | L0: NEW org.aspectj.lang.SoftException | DUP | ALOAD 5 | INVOKESPECIAL org.aspectj.lang.SoftException.<init> (Ljava/lang/Throwable;)V | ATHROW method-execution(glassbox.track.api.PerfStats glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats(java.lang.Object, java.lang.Object, java.lang.Object)) end private glassbox.track.api.PerfStats lookupCallStats(Object, Object, Object) public void ajc$before$glassbox_monitor_resource_RemoteCallMonitor$1$3f19eb7a(Object, Object, Object) AdviceAttribute(before, jaxmCall(BindingTypePattern(java.lang.Object, 0), BindingTypePattern(java.lang.Object, 1), BindingTypePattern(java.lang.Object, 2)), 0, 937) : ALOAD_1 ASTORE 5 ALOAD_2 ASTORE 6 ALOAD_3 ASTORE 7 adviceexecution(void glassbox.monitor.resource.RemoteCallMonitor.ajc$before$glassbox_monitor_resource_RemoteCallMonitor$1$3f19eb7a(java.lang.Object, java.lang.Object, java.lang.Object)) | INVOKESTATIC glassbox.agent.ErrorContainment.aspectOf ()Lglassbox/agent/ErrorContainment; | BIPUSH 4 | ANEWARRAY java.lang.Object | ASTORE 8 | ALOAD 8 | BIPUSH 0 | ALOAD_0 | AASTORE | ALOAD 8 | BIPUSH 1 | ALOAD 5 | AASTORE | ALOAD 8 | BIPUSH 2 | ALOAD 6 | AASTORE | ALOAD 8 | BIPUSH 3 | ALOAD 7 | AASTORE | NEW glassbox.monitor.resource.RemoteCallMonitor$AjcClosure1 | DUP | ALOAD 8 | INVOKESPECIAL glassbox.monitor.resource.RemoteCallMonitor$AjcClosure1.<init> ([Ljava/lang/Object;)V | INVOKEVIRTUAL glassbox.agent.ErrorContainment.ajc$around$glassbox_agent_ErrorContainment$1$fc26178e (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object; | POP | RETURN adviceexecution(void glassbox.monitor.resource.RemoteCallMonitor.ajc$before$glassbox_monitor_resource_RemoteCallMonitor$1$3f19eb7a(java.lang.Object, java.lang.Object, java.lang.Object)) end public void ajc$before$glassbox_monitor_resource_RemoteCallMonitor$1$3f19eb7a(Object, Object, Object) public void ajc$afterReturning$glassbox_monitor_resource_RemoteCallMonitor$2$3f19eb7a(Object, Object, Object) AdviceAttribute(afterReturning, jaxmCall(BindingTypePattern(java.lang.Object, 0), BindingTypePattern(java.lang.Object, 1), BindingTypePattern(java.lang.Object, 2)), 0, 1207) : adviceexecution(void glassbox.monitor.resource.RemoteCallMonitor.ajc$afterReturning$glassbox_monitor_resource_RemoteCallMonitor$2$3f19eb7a(java.lang.Object, java.lang.Object, java.lang.Object)) | ALOAD_0 // glassbox.monitor.resource.RemoteCallMonitor this (line 29) | ALOAD_1 // java.lang.Object soapConnection | ALOAD_2 // java.lang.Object msg | ALOAD_3 // java.lang.Object endPoint | method-call(glassbox.track.api.PerfStats glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats(java.lang.Object, java.lang.Object, java.lang.Object)) | | INVOKESPECIAL glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lglassbox/track/api/PerfStats; | method-call(glassbox.track.api.PerfStats glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats(java.lang.Object, java.lang.Object, java.lang.Object)) | ASTORE 4 | ALOAD 4 // glassbox.track.api.PerfStats stats (line 30) | IFNULL L0 | ALOAD_0 // glassbox.monitor.resource.RemoteCallMonitor this (line 31) | ALOAD 4 // glassbox.track.api.PerfStats stats | method-call(void glassbox.monitor.AbstractMonitor.recordEnd(glassbox.track.api.PerfStats)) | | INVOKEVIRTUAL glassbox.monitor.AbstractMonitor.recordEnd (Lglassbox/track/api/PerfStats;)V | method-call(void glassbox.monitor.AbstractMonitor.recordEnd(glassbox.track.api.PerfStats)) | L0: RETURN (line 33) adviceexecution(void glassbox.monitor.resource.RemoteCallMonitor.ajc$afterReturning$glassbox_monitor_resource_RemoteCallMonitor$2$3f19eb7a(java.lang.Object, java.lang.Object, java.lang.Object)) end public void ajc$afterReturning$glassbox_monitor_resource_RemoteCallMonitor$2$3f19eb7a(Object, Object, Object) public void ajc$afterThrowing$glassbox_monitor_resource_RemoteCallMonitor$3$3f19eb7a(Object, Object, Object, Throwable, org.aspectj.lang.JoinPoint$StaticPart) AdviceAttribute(afterThrowing, jaxmCall(BindingTypePattern(java.lang.Object, 0), BindingTypePattern(java.lang.Object, 1), BindingTypePattern(java.lang.Object, 2)), 5, 1484) : adviceexecution(void glassbox.monitor.resource.RemoteCallMonitor.ajc$afterThrowing$glassbox_monitor_resource_RemoteCallMonitor$3$3f19eb7a(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Throwable, org.aspectj.lang.JoinPoint$StaticPart)) | ALOAD_0 // glassbox.monitor.resource.RemoteCallMonitor this (line 36) | ALOAD_1 // java.lang.Object soapConnection | ALOAD_2 // java.lang.Object msg | ALOAD_3 // java.lang.Object endPoint | method-call(glassbox.track.api.PerfStats glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats(java.lang.Object, java.lang.Object, java.lang.Object)) | | INVOKESPECIAL glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lglassbox/track/api/PerfStats; | method-call(glassbox.track.api.PerfStats glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats(java.lang.Object, java.lang.Object, java.lang.Object)) | ASTORE 6 | ALOAD 6 // glassbox.track.api.PerfStats stats (line 37) | IFNULL L0 | ALOAD_0 // glassbox.monitor.resource.RemoteCallMonitor this (line 38) | ALOAD 6 // glassbox.track.api.PerfStats stats | ALOAD 5 // org.aspectj.lang.JoinPoint$StaticPart thisJoinPointStaticPart | ALOAD 4 // java.lang.Throwable t | method-call(void glassbox.monitor.AbstractMonitor.recordException(glassbox.track.api.PerfStats, org.aspectj.lang.JoinPoint$StaticPart, java.lang.Throwable)) | | INVOKEVIRTUAL glassbox.monitor.AbstractMonitor.recordException (Lglassbox/track/api/PerfStats;Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Throwable;)V | method-call(void glassbox.monitor.AbstractMonitor.recordException(glassbox.track.api.PerfStats, org.aspectj.lang.JoinPoint$StaticPart, java.lang.Throwable)) | L0: RETURN (line 40) adviceexecution(void glassbox.monitor.resource.RemoteCallMonitor.ajc$afterThrowing$glassbox_monitor_resource_RemoteCallMonitor$3$3f19eb7a(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Throwable, org.aspectj.lang.JoinPoint$StaticPart)) end public void ajc$afterThrowing$glassbox_monitor_resource_RemoteCallMonitor$3$3f19eb7a(Object, Object, Object, Throwable, org.aspectj.lang.JoinPoint$StaticPart) public static glassbox.monitor.resource.RemoteCallMonitor aspectOf() org.aspectj.weaver.AjAttribute$AjSynthetic@965b88 : GETSTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$perSingletonInstance Lglassbox/monitor/resource/RemoteCallMonitor; IFNONNULL L0 NEW org.aspectj.lang.NoAspectBoundException DUP LDC "glassbox_monitor_resource_RemoteCallMonitor" GETSTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$initFailureCause Ljava/lang/Throwable; INVOKESPECIAL org.aspectj.lang.NoAspectBoundException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V ATHROW L0: GETSTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$perSingletonInstance Lglassbox/monitor/resource/RemoteCallMonitor; ARETURN end public static glassbox.monitor.resource.RemoteCallMonitor aspectOf() public static boolean hasAspect() org.aspectj.weaver.AjAttribute$AjSynthetic@9666e9 : GETSTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$perSingletonInstance Lglassbox/monitor/resource/RemoteCallMonitor; IFNULL L0 ICONST_1 IRETURN L0: ICONST_0 IRETURN end public static boolean hasAspect() private static void ajc$postClinit() org.aspectj.weaver.AjAttribute$AjSynthetic@97a54d : NEW glassbox.monitor.resource.RemoteCallMonitor DUP INVOKESPECIAL glassbox.monitor.resource.RemoteCallMonitor.<init> ()V PUTSTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$perSingletonInstance Lglassbox/monitor/resource/RemoteCallMonitor; RETURN end private static void ajc$postClinit() public static glassbox.monitor.AbstractMonitor$RuntimeControl ajc$glassbox_monitor_AbstractMonitor$RuntimeControl$localAspectOf(): GETSTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$glassbox_monitor_AbstractMonitor$RuntimeControl$ptwAspectInstance Lglassbox/monitor/AbstractMonitor$RuntimeControl; ARETURN end public static glassbox.monitor.AbstractMonitor$RuntimeControl ajc$glassbox_monitor_AbstractMonitor$RuntimeControl$localAspectOf() static final void ajc$before$glassbox_monitor_resource_RemoteCallMonitor$1$3f19eb7a_aroundBody0(glassbox.monitor.resource.RemoteCallMonitor, Object, Object, Object): ALOAD_0 // glassbox.monitor.resource.RemoteCallMonitor this (line 22) ALOAD_1 // java.lang.Object soapConnection ALOAD_2 // java.lang.Object msg ALOAD_3 // java.lang.Object endPoint method-call(glassbox.track.api.PerfStats glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats(java.lang.Object, java.lang.Object, java.lang.Object)) | INVOKESPECIAL glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lglassbox/track/api/PerfStats; method-call(glassbox.track.api.PerfStats glassbox.monitor.resource.RemoteCallMonitor.lookupCallStats(java.lang.Object, java.lang.Object, java.lang.Object)) ASTORE 4 ALOAD 4 // glassbox.track.api.PerfStats stats (line 23) IFNULL L0 ALOAD_0 // glassbox.monitor.resource.RemoteCallMonitor this (line 24) ALOAD 4 // glassbox.track.api.PerfStats stats method-call(void glassbox.monitor.AbstractMonitor.recordStart(glassbox.track.api.PerfStats)) | INVOKEVIRTUAL glassbox.monitor.AbstractMonitor.recordStart (Lglassbox/track/api/PerfStats;)V method-call(void glassbox.monitor.AbstractMonitor.recordStart(glassbox.track.api.PerfStats)) L0: RETURN (line 26) end static final void ajc$before$glassbox_monitor_resource_RemoteCallMonitor$1$3f19eb7a_aroundBody0(glassbox.monitor.resource.RemoteCallMonitor, Object, Object, Object) end public class glassbox.monitor.resource.RemoteCallMonitor public class glassbox.monitor.resource.RemoteCallMonitor$AjcClosure1 extends org.aspectj.runtime.internal.AroundClosure: public void <init>(Object[]): ALOAD_0 ALOAD_1 INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V RETURN end public void <init>(Object[]) public Object run(Object[]): ALOAD_0 GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object; ASTORE_2 ALOAD_2 BIPUSH 0 AALOAD CHECKCAST glassbox.monitor.resource.RemoteCallMonitor ALOAD_2 BIPUSH 1 AALOAD ALOAD_2 BIPUSH 2 AALOAD ALOAD_2 BIPUSH 3 AALOAD INVOKESTATIC glassbox.monitor.resource.RemoteCallMonitor.ajc$before$glassbox_monitor_resource_RemoteCallMonitor$1$3f19eb7a_aroundBody0 (Lglassbox/monitor/resource/RemoteCallMonitor;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V ACONST_NULL ARETURN end public Object run(Object[]) end public class glassbox.monitor.resource.RemoteCallMonitor$AjcClosure1 when implementing on shadow adviceexecution(void glassbox.monitor.resource.RemoteCallMonitor.ajc$before$glassbox_monitor_resource_RemoteCallMonitor$1$3f19eb7a(java.lang.Object, java.lang.Object, java.lang.Object)) when weaving type glassbox.monitor.resource.RemoteCallMonitor when weaving aspects when weaving when incrementally building BuildConfig[c:\devel\glassbox\.metadata\.plugins\org.eclipse.ajdt.core\glassboxMonitor.generated.lst] #Files=60
second I think. We love incremental compilation :)
Since the changes entitled "go 'back to source' on incremental aspect change" were checked in to HEAD I don't believe the failing scenario described in this bug can happen. The description is that the failure occured when changing the name of a static method pulled up from a nested aspect. However, following these steps now results in a full build rather than an incremental one.
Yep - cant happen now - or at least cant fail in the same way ;)
closing