Bug 85097

Summary: Nullpointer exception
Product: [Tools] AspectJ Reporter: Charles Zhang <czhang>
Component: CompilerAssignee: Adrian Colyer <adrian.colyer>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P3 CC: sjoerd
Version: 1.5.0M1   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Charles Zhang CLA 2005-02-12 21:02:33 EST
Maybe I'm doing something stupid. But at least AspectJ should tell me why I am 
stupid rather than puke exceptions. :). Here is how to reproduce:
class Test {
	private int count =0;
	public void dostuff(){
		count++;
		System.out.println("do stuff");
	}
	public static void main(String[] args) {
		Test t = new Test();
		Test t2 = new Test();
		t.dostuff();
		t2.dostuff();
	}
}

interface Threaded {
}


public abstract aspect ParentA {
	declare parents: Test implements Threaded;
	private boolean Threaded.breakit(){
		return false;
	}
	 
	//boolean breakit(){ return true};
	void around(Test t):execution(* Test.dostuff(..))&&this(t){
		while(!t.breakit()){
			proceed(t);
			try{
				Thread.sleep(1000);
			}catch(Exception e){
				
			}
		} 
		System.out.println("parent a");
	}
}

privileged aspect Son extends ParentA{
	after()  returning (boolean ret):
		call(* Threaded+.breakit())//&&target(t)
	{
	}
}
Comment 1 Charles Zhang CLA 2005-02-12 21:06:36 EST
Sorry, forgot to attach the error message:
trouble in:
ABORT

Exception thrown from AspectJ 1.5.0 M1

This might be logged as a bug already -- find current bugs at
  http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Compiler

Bugs for exceptions thrown have titles File:line from the top stack,
e.g., "SomeFile.java:243"

If you don't find the exception below in a bug, please add a new bug
at http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
To make the bug a priority, please include a test program
that can reproduce this exception.
null
java.lang.NullPointerException
        at org.aspectj.weaver.ResolvedTypeX.isConvertableFrom
(ResolvedTypeX.java
:131)
        at org.aspectj.weaver.bcel.Utility.appendConversion(Utility.java:241)
        at org.aspectj.weaver.bcel.BcelVar.appendLoadAndConvert
(BcelVar.java:61)

        at org.aspectj.weaver.bcel.BcelAdvice.getAdviceArgSetup
(BcelAdvice.java:
314)
        at org.aspectj.weaver.bcel.BcelAdvice.getAdviceInstructions
(BcelAdvice.java:270)
        at org.aspectj.weaver.bcel.BcelShadow.weaveAfterReturning
(BcelShadow.java:1380)
        at org.aspectj.weaver.bcel.BcelAdvice.implementOn(BcelAdvice.java:138)
        at org.aspectj.weaver.Shadow.implementMungers(Shadow.java:451)
        at org.aspectj.weaver.Shadow.implement(Shadow.java:334)
        at org.aspectj.weaver.bcel.BcelClassWeaver.implement
(BcelClassWeaver.java:1157)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave
(BcelClassWeaver.java:362)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave
(BcelClassWeaver.java:83)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:742)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump
(BcelWeaver.java:707)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify
(BcelWeaver.java:634)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:565)
        at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.weave
(AjCompilerAdapter.java:243)
        at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.afterCompiling
(AjCompilerAdapter.java:118)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile
(Compiler.java:383)
        at 
org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation
(AjBuildManager.java:682)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild
(AjBuild
Manager.java:168)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild
(AjBu
ildManager.java:102)
        at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:109)
        at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
        at org.aspectj.tools.ajc.Main.run(Main.java:291)
        at org.aspectj.tools.ajc.Main.runMain(Main.java:227)
        at org.aspectj.tools.ajc.Main.main(Main.java:80)


1 fail|abort
Comment 2 Andrew Clement CLA 2005-02-13 10:30:29 EST
I think it is the 'boolean' in the after() returning advice that is causing the
problem - I remember looking at a bug in this area (when primitive types are
involved) that arose due to the changes for autoboxing.  However, although this
problem does occur in 1.5.0M1, it is already fixed in the dev release of AspectJ
1.5.0 available from the download page.
Comment 3 Adrian Colyer CLA 2005-03-23 09:41:41 EST
fixed as per andy's comment on 02-13
Comment 4 Andrew J Huff CLA 2005-04-12 06:09:36 EDT
*** Bug 83930 has been marked as a duplicate of this bug. ***