Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 354403

Summary: [insight] null world when resolving type
Product: [Tools] AspectJ Reporter: Andrew Clement <aclement>
Component: LTWeavingAssignee: aspectj inbox <aspectj-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: critical    
Priority: P3    
Version: DEVELOPMENT   
Target Milestone: 1.6.12   
Hardware: PC   
OS: Mac OS X - Carbon (unsup.)   
Whiteboard:

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.