Community
Participate
Working Groups
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
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
two little test programs checked in.
Eduardo is right. I've put in a very trivial change that isnt perfect but stops us blowing up when this happens.
fix available.