Bug 266602 - Problem with incremental itd compilation
Summary: Problem with incremental itd compilation
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: DEVELOPMENT   Edit
Hardware: PC Windows NT
: P2 major (vote)
Target Milestone: 1.6.4   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-02-28 16:09 EST by Andrew Clement CLA
Modified: 2009-03-01 23:01 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 Andrew Clement CLA 2009-02-28 16:09:42 EST
Reproduceable from Roo code - commenting out a field after a successful build results in this exception. The underlying cause may also apply to ITD methods (and maybe constructors).

org.aspectj.weaver.BCException: Couldn't find ITD init member 'void com.springsource.petclinic.domain.Visit_Roo_Entity_Itd.ajc$interFieldInit$com_springsource_petclinic_domain_Visit_Roo_Entity_Itd$com_springsource_petclinic_domain_Visit$id(com.springsource.petclinic.domain.Visit)' on aspect com.springsource.petclinic.domain.Visit_Roo_Entity_Itd
when type munging with (BcelTypeMunger ResolvedTypeMunger(Field, java.lang.Long com.springsource.petclinic.domain.Visit.id))
when weaving type com.springsource.petclinic.domain.Visit
when weaving classes 
when weaving 
when incrementally building with classpath: C:\temp\petclinic\target\classes;E:/jvms/jdk1.6.0_06/jre/lib/resources.jar;E:/jvms/jdk1.6.0_06/jre/lib/rt.jar;E:/jvms/jdk1.6.0_06/jre/lib/jsse.jar;E:/jvms/jdk1.6.0_06/jre/lib/jce.jar;E:/jvms/jdk1.6.0_06/jre/lib/charsets.jar;E:/jvms/jdk1.6.0_06/jre/lib/ext/dnsns.jar;E:/jvms/jdk1.6.0_06/jre/lib/ext/localedata.jar;E:/jvms/jdk1.6.0_06/jre/lib/ext/sunjce_provider.jar;E:/jvms/jdk1.6.0_06/jre/lib/ext/sunmscapi.jar;E:/jvms/jdk1.6.0_06/jre/lib/ext/sunpkcs11.jar;C:/Users/Andy/.m2/repository/org/antlr/com.springsource.antlr/2.7.6/com.springsource.antlr-2.7.6.jar;C:/Users/Andy/.m2/repository/com/thoughtworks/xstream/com.springsource.com.thoughtworks.xstream/1.3.0/com.springsource.com.thoughtworks.xstream-1.3.0.jar;C:/Users/Andy/.m2/repository/edu/emory/mathcs/backport/com.springsource.edu.emory.mathcs.backport/3.1.0/com.springsource.edu.emory.mathcs.backport-3.1.0.jar;C:/Users/Andy/.m2/repository/edu/oswego/cs/concurrent/com.springsource.edu.oswego.cs.dl.util.concurrent/1.3.4/com.springsource.edu.oswego.cs.dl.util.concurrent-1.3.4.jar;C:/Users/Andy/.m2/repository/org/jboss/javassist/com.springsource.javassist/3.3.0.ga/com.springsource.javassist-3.3.0.ga.jar;C:/Users/Andy/.m2/repository/javax/annotation/com.springsource.javax.annotation/1.0.0/com.springsource.javax.annotation-1.0.0.jar;C:/Users/Andy/.m2/repository/javax/persistence/com.springsource.javax.persistence/1.0.0/com.springsource.javax.persistence-1.0.0.jar;C:/Users/Andy/.m2/repository/javax/servlet/com.springsource.javax.servlet/2.4.0/com.springsource.javax.servlet-2.4.0.jar;C:/Users/Andy/.m2/repository/javax/servlet/com.springsource.javax.servlet.jsp.jstl/1.2.0/com.springsource.javax.servlet.jsp.jstl-1.2.0.jar;C:/Users/Andy/.m2/repository/javax/transaction/com.springsource.javax.transaction/1.1.0/com.springsource.javax.transaction-1.1.0.jar;C:/Users/Andy/.m2/repository/net/sourceforge/cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-2.1.3.jar;C:/Users/Andy/.m2/repository/net/sourceforge/ehcache/com.springsource.net.sf.ehcache/1.4.1/com.springsource.net.sf.ehcache-1.4.1.jar;C:/Users/Andy/.m2/repository/net/sourceforge/jsr107cache/com.springsource.net.sf.jsr107cache/1.0.0/com.springsource.net.sf.jsr107cache-1.0.0.jar;C:/Users/Andy/.m2/repository/org/antlr/com.springsource.org.antlr/3.0.1/com.springsource.org.antlr-3.0.1.jar;C:/Users/Andy/.m2/repository/org/aopalliance/com.springsource.org.aopalliance/1.0.0/com.springsource.org.aopalliance-1.0.0.jar;C:/Users/Andy/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.collections/3.2.0/com.springsource.org.apache.commons.collections-3.2.0.jar;C:/Users/Andy/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.dbcp/1.2.2.osgi/com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar;C:/Users/Andy/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar;C:/Users/Andy/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.pool/1.3.0/com.springsource.org.apache.commons.pool-1.3.0.jar;C:/Users/Andy/.m2/repository/org/apache/log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-1.2.15.jar;C:/Users/Andy/.m2/repository/org/apache/taglibs/com.springsource.org.apache.taglibs.standard/1.1.2/com.springsource.org.apache.taglibs.standard-1.1.2.jar;C:/Users/Andy/.m2/repository/org/aspectj/com.springsource.org.aspectj.runtime/1.6.2.RELEASE/com.springsource.org.aspectj.runtime-1.6.2.RELEASE.jar;C:/Users/Andy/.m2/repository/org/aspectj/com.springsource.org.aspectj.tools/1.6.2.RELEASE/com.springsource.org.aspectj.tools-1.6.2.RELEASE.jar;C:/Users/Andy/.m2/repository/org/aspectj/com.springsource.org.aspectj.weaver/1.6.2.RELEASE/com.springsource.org.aspectj.weaver-1.6.2.RELEASE.jar;C:/Users/Andy/.m2/repository/org/dom4j/com.springsource.org.dom4j/1.6.1/com.springsource.org.dom4j-1.6.1.jar;C:/Users/Andy/.m2/repository/org/hibernate/com.springsource.org.hibernate/3.2.6.ga/com.springsource.org.hibernate-3.2.6.ga.jar;C:/Users/Andy/.m2/repository/org/hibernate/com.springsource.org.hibernate.annotations/3.3.1.ga/com.springsource.org.hibernate.annotations-3.3.1.ga.jar;C:/Users/Andy/.m2/repository/org/hibernate/com.springsource.org.hibernate.annotations.common/3.3.0.ga/com.springsource.org.hibernate.annotations.common-3.3.0.ga.jar;C:/Users/Andy/.m2/repository/org/hibernate/com.springsource.org.hibernate.ejb/3.3.2.GA/com.springsource.org.hibernate.ejb-3.3.2.GA.jar;C:/Users/Andy/.m2/repository/org/hibernate/com.springsource.org.hibernate.validator/3.0.0.GA/com.springsource.org.hibernate.validator-3.0.0.GA.jar;C:/Users/Andy/.m2/repository/org/hsqldb/com.springsource.org.hsqldb/1.8.0.9/com.springsource.org.hsqldb-1.8.0.9.jar;C:/Users/Andy/.m2/repository/org/jboss/util/com.springsource.org.jboss.util/2.0.4.GA/com.springsource.org.jboss.util-2.0.4.GA.jar;C:/Users/Andy/.m2/repository/org/junit/com.springsource.org.junit/4.4.0/com.springsource.org.junit-4.4.0.jar;C:/Users/Andy/.m2/repository/org/objectweb/asm/com.springsource.org.objectweb.asm/2.2.3/com.springsource.org.objectweb.asm-2.2.3.jar;C:/Users/Andy/.m2/repository/org/objectweb/asm/com.springsource.org.objectweb.asm.attrs/1.5.3/com.springsource.org.objectweb.asm.attrs-1.5.3.jar;C:/Users/Andy/.m2/repository/org/objectweb/asm/com.springsource.org.objectweb.asm.commons/2.2.3/com.springsource.org.objectweb.asm.commons-2.2.3.jar;C:/Users/Andy/.m2/repository/org/xmlpull/com.springsource.org.xmlpull/1.1.3.4-O/com.springsource.org.xmlpull-1.1.3.4-O.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.aop/3.0.0.M1/org.springframework.aop-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.aspects/3.0.0.M1/org.springframework.aspects-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.beans/3.0.0.M1/org.springframework.beans-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.context/3.0.0.M1/org.springframework.context-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.core/3.0.0.M1/org.springframework.core-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.expression/3.0.0.M1/org.springframework.expression-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.jdbc/3.0.0.M1/org.springframework.jdbc-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.orm/3.0.0.M1/org.springframework.orm-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.test/3.0.0.M1/org.springframework.test-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.transaction/3.0.0.M1/org.springframework.transaction-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.web/3.0.0.M1/org.springframework.web-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/org.springframework.web.servlet/3.0.0.M1/org.springframework.web.servlet-3.0.0.M1.jar;C:/Users/Andy/.m2/repository/org/springframework/roo/roo-core/0.2.0-SNAPSHOT/roo-core-0.2.0-SNAPSHOT.jar;F:/eclipse/e342/eclipse/plugins/org.aspectj.runtime_1.6.4.20090205161900/aspectjrt.jar;f:\jvms\jdk1.6.0_06\jre\lib\ext\dnsns.jar;f:\jvms\jdk1.6.0_06\jre\lib\ext\localedata.jar;f:\jvms\jdk1.6.0_06\jre\lib\ext\sunjce_provider.jar;f:\jvms\jdk1.6.0_06\jre\lib\ext\sunmscapi.jar;f:\jvms\jdk1.6.0_06\jre\lib\ext\sunpkcs11.jar;f:\eclipse\e342\eclipse\\plugins\org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar;


	at org.aspectj.weaver.bcel.BcelTypeMunger.mungeNewField(BcelTypeMunger.java:1638)

	at org.aspectj.weaver.bcel.BcelTypeMunger.munge(BcelTypeMunger.java:90)

	at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:441)

	at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:103)

	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1732)

	at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1693)

	at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1458)

	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1272)

	at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:435)

	at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:371)

	at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:358)

	at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:98)

	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:652)

	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)

	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:977)

	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:301)

	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.incrementalBuild(AjBuildManager.java:183)

	at org.aspectj.ajde.core.internal.AjdeCoreBuildManager.performBuild(AjdeCoreBuildManager.java:127)

	at org.aspectj.ajde.core.AjCompiler.build(AjCompiler.java:88)

	at org.eclipse.ajdt.core.builder.AJBuilder.build(AJBuilder.java:223)

	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:633)

	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)

	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170)

	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)

	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253)

	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)

	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256)

	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:309)

	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:341)

	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:140)

	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238)

	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Comment 1 Andrew Clement CLA 2009-02-28 18:40:02 EST
Quite complicated - and I'm having trouble recreating it purely in AspectJ so something in the AJDT setup is interfering but I'm not quite sure what it is yet.

I have also recreated the mungeNewMethod problem.

It appears to be that on an incremental compile:

1) the change to the Visit class is made and it is saved
2) incremental compile of that file runs, determines that it needs to recompile associated files:  "Visit_Roo_Jpa_Itd.aj", "Visit_Roo_Entity_Itd.aj", "Visit_Roo_Finder_Itd.aj", "VisitIntegrationTest_Roo_Integration_Test_Itd.aj", "VisitDataOnDemand_Roo_Dod_Itd.aj"
3) When weaving Visit we go looking for the annotations from the ITD member, but it is still in EclipseSourceType form having just been compiled, and its getDeclaredMethods() is deliberately not including ITD methods.

I'm imagining two solutions right now:

- the pipeline needs to 're-stall' because the aspects are being compiled, it should be stalled until all aspects are through and then Visit will be fine as the aspect containing the ITD will be a bcel entity.
- return the full set of declared methods, including itds, from the EclipseSourceType object.

The first solution may get us into trouble if an ITD is ever made from one aspect to another - we can hit this same situation, it is just less likely (who does an ITD from one aspect to another...)

The seconds solution makes sense but:
- there is a damn good reason why I didn't return ITDs from getDeclaredMethods(), but I cant remember why
- the annotations may or may not be easily accessible, even if I did return the ITD.

thinking required...
Comment 2 Andrew Clement CLA 2009-03-01 12:11:55 EST
ok, i have recreated it myself outside of AJDT.

Commenting out the 'vet' field in Visit - in order to create the BCException in fact leaves us with broken code.  There are compiler errors recorded against the Entity class during compilation that cause it not to go through the weaver before we recompile Visit.  Not going through the weaver means it does not transition from an Eclipse object to a Bcel object.
Comment 3 Andrew Clement CLA 2009-03-01 23:01:16 EST
ok - the only scenarios i can make this occur are when the project already has errors in it.  So I've downgraded the BCException - it can't happen any more.

fix committed.