Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 354403 - [insight] null world when resolving type
Summary: [insight] null world when resolving type
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: LTWeaving (show other bugs)
Version: DEVELOPMENT   Edit
Hardware: PC Mac OS X - Carbon (unsup.)
: P3 critical (vote)
Target Milestone: 1.6.12   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-08-10 11:57 EDT by Andrew Clement CLA
Modified: 2011-08-12 19:11 EDT (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 2011-08-10 11:57:59 EDT
java.lang.NullPointerException
   at org.aspectj.weaver.UnresolvedType.resolve(UnresolvedType.java:593)
   at org.aspectj.weaver.patterns.ExactAnnotationTypePattern.resolve(ExactAnnotationTypePattern.java:237)
   at org.aspectj.weaver.patterns.AnyWithAnnotationTypePattern.matchesExactly(AnyWithAnnotationTypePattern.java:50)
   at org.aspectj.weaver.patterns.TypePattern.matchesStatically(TypePattern.java:132)
   at org.aspectj.weaver.patterns.TypePattern.matches(TypePattern.java:146)
   at org.aspectj.weaver.patterns.TypePatternList.inStar(TypePatternList.java:403)
   at org.aspectj.weaver.patterns.TypePatternList.outOfStar(TypePatternList.java:358)
   at org.aspectj.weaver.patterns.TypePatternList.matches(TypePatternList.java:332)
   at org.aspectj.weaver.patterns.SignaturePattern.matchesExactlyMethod(SignaturePattern.java:539)
   at org.aspectj.weaver.patterns.SignaturePattern.matchesExactly(SignaturePattern.java:360)
   at org.aspectj.weaver.patterns.SignaturePattern.matches(SignaturePattern.java:320)
   at org.aspectj.weaver.patterns.KindedPointcut.matchInternal(KindedPointcut.java:202)
   at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
   at org.aspectj.weaver.patterns.AndPointcut.matchInternal(AndPointcut.java:51)
   at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
   at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:113)
   at org.aspectj.weaver.Advice.match(Advice.java:109)
   at org.aspectj.weaver.bcel.BcelAdvice.match(BcelAdvice.java:146)
   at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:3116)
   at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2550)
   at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:474)
   at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:100)
   at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1687)
   at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1631)
   at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1394)
   at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1180)
   at org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:467)
   at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:318)
   at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:96)
   at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54)
   at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
   at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
   at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
Comment 1 Andrew Clement CLA 2011-08-12 19:11:58 EDT
Ok.  I've finally tackled the refactoring that I knew needed doing for this.  Primitive types before Java5 were constants, shared across worlds.  Then came Java5 and autoboxing - this meant primitive types needed to know what world they were in, so they could answer questions about autoboxing.  However, we tried to keep them as constants and keep switching the worlds to the right one.  That was a silly solution and of course breaks down in multi threaded environments.  For consistency primitives are now like all other types - they start off unresolved then become resolved in a world.  This appears to work (passes all the tests) but was a massively pervasive change so may have broken something unexpected... guess we'll see.