Bug 314993 - NPE at checkAlternateBinding during initial index
Summary: NPE at checkAlternateBinding during initial index
Status: NEW
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.6.9   Edit
Hardware: PC Windows Vista
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-05-29 22:12 EDT by Chris West (Faux) CLA
Modified: 2013-06-24 11:07 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 Chris West (Faux) CLA 2010-05-29 22:12:47 EDT
Not a clue why:

eclipse.buildId=N20100528-2000
java.version=1.6.0_19
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_GB
Command-line arguments:  -os win32 -ws win32 -arch x86_64

Version: 2.1.0.e36x-20100504-1600
AspectJ version: 1.6.9.20100422170000

Error
Sun May 30 03:08:39 BST 2010
Compile error: NullPointerException thrown: null

java.lang.NullPointerException
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.CastExpression.checkAlternateBinding(CastExpression.java:243)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.CastExpression.checkNeedForArgumentCasts(CastExpression.java:158)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode.checkInvocationArguments(ASTNode.java:324)
at org.aspectj.ajdt.internal.compiler.ast.Proceed.resolveType(Proceed.java:170)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.ReturnStatement.resolve(ReturnStatement.java:216)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:433)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:196)
at org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration.resolveStatements(AdviceDeclaration.java:128)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:404)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1109)
at org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration.resolve(AspectDeclaration.java:111)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1188)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:366)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:636)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1022)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:268)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:181)
at org.aspectj.ajde.core.internal.AjdeCoreBuildManager.performBuild(AjdeCoreBuildManager.java:105)
at org.aspectj.ajde.core.AjCompiler.buildFresh(AjCompiler.java:97)
at org.eclipse.ajdt.core.builder.AJBuilder.build(AJBuilder.java:243)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Comment 1 Chris West (Faux) CLA 2010-06-01 16:15:10 EDT
I really have no idea what's going on here, so I went for lowest number of tokens:


import java.util.ArrayList;

public aspect Pony {
  boolean around(String[] resources) : args(resources) {
    return proceed((String[]) new ArrayList().toArray());
  }
}

I just don't even...
Comment 2 Andrew Clement CLA 2010-06-03 14:32:18 EDT
Trying to recreate this now - finding it tricky. Given that the advice doesn't include a kind (execution/call/etc), I am not sure which joinpoint is causing it a problem.

--- Pony.aj
import java.util.ArrayList;

public aspect Pony {
  boolean around(String[] resources) : args(resources) {
    return proceed((String[]) new ArrayList().toArray());
  }
}

--- Target.java
class Target {
  public static boolean main(String[] argv) {
    return false;
  }
}

Compiling these two together works.  Although I see with weaveInfo the advice advises itself (because it also takes a String[] argument).

Do you have a class you weave that sample against that shows the NPE?
Comment 3 Chris West (Faux) CLA 2010-06-03 18:28:59 EDT
The problem is during the compile of the .aj file itself.

I can't, however, reproduce this in a clean Eclipse install, with the old project and workspace.  Also, it's trivial to work-around by extracting to a local:

String[] s = (String[]) new ArrayL..
return proceed(s);

I'm guessing interaction with other plugins (<b style="ALARM">Scala</b>, wst, egit or subclipse) but can't really be bothered to diagnose further, sorry for wasting your time.  Feel free to close.


Clean set-up (where this issue does NOT occur):

New Eclipse install (N20100601-2000).
New Workspace.

Install just ajdt from http://download.eclipse.org/tools/ajdt/36/dev/update

New project -> AspectJ.
Yes, I'd like the weaving service on.
Yes, I'd like to restart.
Yes, I'd like to reindex.

New -> AspectJ -> Aspect.
Name: Pony.
Paste in contents from comment 1
Save.
Comment 4 Andrew Clement CLA 2013-06-24 11:07:21 EDT
unsetting the target field which is currently set for something already released