Bug 122452 - NPE in ResolvedType.findPointcut(ResolvedType.java:479)
Summary: NPE in ResolvedType.findPointcut(ResolvedType.java:479)
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.5.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 1.5.1   Edit
Assignee: Andrew Clement CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-01-02 06:35 EST by Wang Bin CLA
Modified: 2006-01-25 09:37 EST (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 Wang Bin CLA 2006-01-02 06:35:47 EST
I wrote below wrong aspect:

and NPE is thrown
public aspect TracePoint {
    pointcut greeting() : call (* Point.sayHello(..));
    pointcut greeting2() : call (* related.Hello.sayHello(..));
    after() returning() : greeting*() {
        System.out.println(" World!");
    }
}


java.lang.NullPointerException
at org.aspectj.weaver.ResolvedType.findPointcut(ResolvedType.java:479)
at org.aspectj.weaver.patterns.ReferencePointcut.resolveBindings(ReferencePointcut.java:148)
at org.aspectj.weaver.patterns.Pointcut.resolve(Pointcut.java:195)
at org.aspectj.ajdt.internal.compiler.ast.PointcutDesignator.finishResolveTypes(PointcutDesignator.java:84)
at org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration.resolveStatements(AdviceDeclaration.java:118)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:400)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1088)
at org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration.resolve(AspectDeclaration.java:115)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1137)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:305)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:514)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java(Compiled Code))
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:230)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:185)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.incrementalBuild(AjBuildManager.java:163)
at org.aspectj.ajde.internal.CompilerAdapter.compile(CompilerAdapter.java:117)
at org.aspectj.ajde.internal.AspectJBuildManager$CompilerThread.run(AspectJBuildManager.java:191)

NullPointerException thrown: null
Comment 1 Eduardo Piveta CLA 2006-01-10 11:29:53 EST
To solve your problem, you could use:

    after() returning() : greeting() || greeting2() {  
        System.out.println(" World!");
    }


To solve the NPE, some comments below:

If the aspect changes to

public aspect TracePoint {
    after() returning() : greeting*() {  
        System.out.println(" World!");
    }
}

a NPE is raised in another location (see stackTrace in the end of this msg). The 'ReferencePointcut' class has a field named 'name'. This field is used in several places in the class but it's value is given by the constructor. The code below creates a 'ReferencePointcut' instance:

public class PatternParser {
   private Pointcut parseReferencePointcut() {
      ...
      new ReferencePointcut(onType, name.maybeGetSimpleName(), arguments) 
   }
}

I believe the problem is due to the 'maybeGetSimpleName' method, that returns null if the name contains a '*'.

public String maybeGetSimpleName() {
   if (starCount == 0 && pattern.length > 0) 
      return new String(pattern);
   return null;
}


StackTrace:
------------------------------------------------------------------------------
java.lang.NullPointerException
at java.io.DataOutputStream.writeUTF(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
at org.aspectj.weaver.patterns.ReferencePointcut.write(ReferencePointcut.java:112)
at org.aspectj.weaver.AjAttribute$AdviceAttribute.write(AjAttribute.java:493)
at org.aspectj.weaver.AjAttribute.getBytes(AjAttribute.java:60)
at org.aspectj.weaver.AjAttribute.getAllBytes(AjAttribute.java:73)
at org.aspectj.ajdt.internal.compiler.ast.EclipseAttributeAdapter.getAllBytes(EclipseAttributeAdapter.java:31)
at org.aspectj.org.eclipse.jdt.internal.compiler.ClassFile.generateMethodInfoAttribute(ClassFile.java:3310)
at org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration.generateInfoAttributes(AdviceDeclaration.java:82)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:207)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:173)
at org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration.generateCode(AdviceDeclaration.java:257)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:568)
at org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration.generateCode(AspectDeclaration.java:280)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:640)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(CompilationUnitDeclaration.java:184)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:520)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:811)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:230)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:156)
at org.aspectj.ajde.internal.CompilerAdapter.compile(CompilerAdapter.java:122)
at org.aspectj.ajde.internal.AspectJBuildManager$CompilerThread.run(AspectJBuildManager.java:191)

NullPointerException thrown: null
Comment 2 Andrew Clement CLA 2006-01-18 11:26:30 EST
two little test programs checked in.
Comment 3 Andrew Clement CLA 2006-01-25 06:49:56 EST
Eduardo is right.  I've put in a very trivial change that isnt perfect but stops us blowing up when this happens.
Comment 4 Andrew Clement CLA 2006-01-25 09:37:17 EST
fix available.