Bug 64331 - java.lang.NullPointerException in WeaverMessageHandler class
Summary: java.lang.NullPointerException in WeaverMessageHandler class
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.2   Edit
Hardware: All Linux
: P3 normal (vote)
Target Milestone: 1.2.1   Edit
Assignee: Adrian Colyer CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 71148 (view as bug list)
Depends on:
Blocks:
 
Reported: 2004-05-27 09:58 EDT by holger CLA
Modified: 2004-10-21 04:32 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description holger CLA 2004-05-27 09:58:21 EDT
I've got an java.lang.NullPointerException while running the aspectJ 1.2
compiler. That's the stack trace:
     [iajc] If you don't find the exception below in a bug, please add a new bug
     [iajc] at http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
     [iajc] To make the bug a priority, please include a test program
     [iajc] that can reproduce this exception.
     [iajc] null
     [iajc] java.lang.NullPointerException
     [iajc]     at
org.aspectj.ajdt.internal.compiler.WeaverMessageHandler.buildSeeAlsoProblems(WeaverMessageHandler.java:172)
     [iajc]     at
org.aspectj.ajdt.internal.compiler.WeaverMessageHandler.handleMessage(WeaverMessageHandler.java:100)
     [iajc]     at
org.aspectj.weaver.ResolvedTypeX.checkInterTypeMungers(ResolvedTypeX.java:989)
     [iajc]     at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:716)
     [iajc]     at
org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:689)
     [iajc]     at
org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:615)
     [iajc]     at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:563)
     [iajc]     at
org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.weave(AjCompilerAdapter.java:239)
     [iajc]     at
org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.afterCompiling(AjCompilerAdapter.java:114)
     [iajc]     at
org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:376)
     [iajc]     at
org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:601)
     [iajc]     at
org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:160)
     [iajc]     at
org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:94)
     [iajc]     at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:102)
     [iajc]     at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:53)
     [iajc]     at org.aspectj.tools.ajc.Main.run(Main.java:280)
     [iajc]     at org.aspectj.tools.ajc.Main.runMain(Main.java:217)
     [iajc]     at
org.aspectj.tools.ant.taskdefs.AjcTask.executeInSameVM(AjcTask.java:1157)
     [iajc]     at org.aspectj.tools.ant.taskdefs.AjcTask.execute(AjcTask.java:954)
     [iajc]     at org.apache.tools.ant.Task.perform(Task.java:341)
     [iajc]     at
org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:117)
     [iajc]     at org.apache.tools.ant.Task.perform(Task.java:341)
     [iajc]     at net.sf.antcontrib.logic.IfTask.execute(Unknown Source)
     [iajc]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [iajc]     at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     [iajc]     at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     [iajc]     at java.lang.reflect.Method.invoke(Method.java:324)
     [iajc]     at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:147)
     [iajc]     at
org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:193)
     [iajc]     at org.apache.tools.ant.Task.perform(Task.java:341)
     [iajc]     at org.apache.tools.ant.Target.execute(Target.java:309)
     [iajc]     at org.apache.tools.ant.Target.performTasks(Target.java:336)
     [iajc]     at org.apache.tools.ant.Project.executeTarget(Project.java:1339)
     [iajc]     at org.apache.tools.ant.Project.executeTargets(Project.java:1255)
     [iajc]     at org.apache.tools.ant.Main.runBuild(Main.java:609)
     [iajc]     at org.apache.tools.ant.Main.start(Main.java:196)
     [iajc]     at org.apache.tools.ant.Main.main(Main.java:235)

       [if] Error in class net.sf.antcontrib.logic.IfTask


Sorry, i have no simple test case for that problem...
Comment 1 Andrew Clement CLA 2004-07-28 10:58:31 EDT
This error occurs because type mungers don't remember their source location.

In this particular case, a type munger is ITDing an abstract method onto a class
and then a subclass of that class is not implementing the ITDed method.  The NPE
occurs if, at the point the subclass is compiled, the aspect containing the
inter type declaration is in binary source form rather than real source form. 
When it is in binary source form the ITD doesn't know its originating source
location and when we want to put out an error message that says 'subclass needs
to implement abtract intertype declaration' we pass a null location as the 'see
also' location.

Until type mungers remember their source location, the fix is to say that if we
have no source location for the munger, use the source location of the
containing aspect.

I have also put some code in the message handling code that will barf if anyone
passes a null location again, so it will be more obvious what the problem is in
future bugs.

fix checked in - waiting for build.
Comment 2 Andrew Clement CLA 2004-07-29 06:21:30 EDT
Fix available in latest dev build from www.eclipse.org/aspectj.
Comment 3 Andrew Clement CLA 2004-07-30 08:33:34 EDT
*** Bug 71148 has been marked as a duplicate of this bug. ***
Comment 4 Adrian Colyer CLA 2004-10-21 04:32:44 EDT
Fix released as part of AspectJ 1.2.1