Bug 119210 - NullPointerException with around advice on field-set
Summary: NullPointerException with around advice on field-set
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 1.5.0RC1   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-12-05 02:49 EST by s_s_smile CLA
Modified: 2005-12-08 12:30 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 s_s_smile CLA 2005-12-05 02:49:12 EST
I met NullPointerException when weaving. Doesn't Aj support this situations?

public class TestLib {

	  private static int myInt;
	  static {
		  myInt = 1;
	  }
	  public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("myInt="+myInt);
	  }
}

public aspect ThreadAspectLib {
	pointcut setThreadLocalsField():set(private int TestLib.myInt);
	
	Integer around():setThreadLocalsField()
	{
		try{
			return new Integer(2);
		}
		catch(Exception e)
		{
			e.printStackTrace();
			return null;
		}
	}
}

---- AspectJ Properties ---
AspectJ Compiler DEVELOPMENT built on Tuesday Jun 14, 2005 at 15:41:05 GMT
---- Dump Properties ---
Dump file: ajcore.20051205.145247.250.txt
Dump reason: java.lang.NullPointerException
Dump on exception: true
Dump at exit condition: abort
---- Exception Information ---
java.lang.NullPointerException
	at org.aspectj.weaver.ResolvedTypeX$Primitive.isAssignableFrom(ResolvedTypeX.java:985)
	at org.aspectj.weaver.ResolvedTypeX.isAssignableFrom(ResolvedTypeX.java:96)
	at org.aspectj.weaver.Advice.match(Advice.java:143)
	at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:1673)
	at org.aspectj.weaver.bcel.BcelClassWeaver.matchSetInstruction(BcelClassWeaver.java:1543)
	at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java(Compiled Code))
	at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java(Compiled Code))
	at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:377)
	at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:94)
	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1362)
	at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1327)
	at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1106)
	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:993)
	at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.weave(AjCompilerAdapter.java:286)
	at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.afterCompiling(AjCompilerAdapter.java:165)
	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:368)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:727)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:206)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:140)
	at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
	at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
	at org.aspectj.tools.ajc.Main.run(Main.java:318)
	at org.aspectj.tools.ajc.Main.runMain(Main.java:228)
	at org.aspectj.tools.ant.taskdefs.AjcTask.executeInSameVM(AjcTask.java:1194)
	at org.aspectj.tools.ant.taskdefs.AjcTask.execute(AjcTask.java:985)
	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
	at org.apache.tools.ant.Task.perform(Task.java:364)
	at org.apache.tools.ant.Target.execute(Target.java:341)
	at org.apache.tools.ant.Target.performTasks(Target.java:369)
	at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
	at org.apache.tools.ant.Project.executeTargets(Project.java:1062)
	at org.apache.tools.ant.Main.runBuild(Main.java:690)
	at org.apache.tools.ant.Main.startAnt(Main.java:200)
	at org.apache.tools.ant.launch.Launcher.run(Launcher.java:196)
	at org.apache.tools.ant.launch.Launcher.main(Launcher.java:55)
---- System Properties ---
java.assistive=ON
java.runtime.name=Java(TM) 2 Runtime Environment, Standard Edition
sun.boot.library.path=C:\Program Files\IBM\Java141\jre\bin
java.vm.version=1.4.1
java.vm.vendor=IBM Corporation
java.vendor.url=http://www.ibm.com/
path.separator=;
java.vm.name=Classic VM
file.encoding.pkg=sun.io
Comment 1 Andrew Clement CLA 2005-12-05 04:13:06 EST
You are running on quite an old version of AspectJ.  If you compile this program on a more recent build, you won't get an NPE.  However, I'm still investigating what does happen - thinking about what the right result is.  
Are you compiling with the -1.5 flag?  
Are you expecting autoboxing to allow transformation of int to Integer and vice versa?
Comment 2 Andrew Clement CLA 2005-12-07 07:06:43 EST
through the magic of autoboxing, this probably ought to work ...
Comment 3 Andrew Clement CLA 2005-12-08 10:41:46 EST
Hang on ... from the docs:

http://eclipse.org/aspectj/doc/released/progguide/semantics-joinPoints.html

Field set
    When a field is assigned to. Field set join points are considered to have one argument, the value the field is being set to. No value is returned from a field set join point, so its return type is considered to be void.

so the advice doesn't match, correctly, with the right message:

"incompatible return type applying to field-set(int TestLib.myInt)"


However, I checked the related case, where around advice using the boxed form of a primitive matches on a join point returning the unboxed form, and that blew up!

So, I've fixed this case and its reverse (the advice uses the unboxed form and join point returns the boxed form).

fix checked in.
Comment 4 Andrew Clement CLA 2005-12-08 12:30:49 EST
fix available in aj - will be in AJDT in a few days.