Bug 121768 - [incremental] BCException on incremental compilation
Summary: [incremental] BCException on incremental compilation
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.5.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 1.5.1   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-12-21 15:26 EST by Ron Bodkin CLA
Modified: 2006-02-15 06:22 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 Ron Bodkin CLA 2005-12-21 15:26:02 EST
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
Comment 1 Adrian Colyer CLA 2005-12-22 04:19:54 EST
second I think.

We love incremental compilation :)
Comment 2 Helen Beeken CLA 2006-02-14 03:49:43 EST
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. 
Comment 3 Andrew Clement CLA 2006-02-15 06:21:25 EST
Yep - cant happen now - or at least cant fail in the same way ;)
Comment 4 Andrew Clement CLA 2006-02-15 06:22:08 EST
closing