Bug 67774 - Nullpointer-exception in pointcuts using withincode() clause
Summary: Nullpointer-exception in pointcuts using withincode() clause
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.2   Edit
Hardware: PC Windows XP
: P3 major (vote)
Target Milestone: 1.2.1   Edit
Assignee: Andrew Clement CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 65688 (view as bug list)
Depends on:
Blocks:
 
Reported: 2004-06-18 04:54 EDT by Michael Moser 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 Michael Moser CLA 2004-06-18 04:54:37 EDT
Hi,
I am getting null-pointer-exceptions whenever I try to specify a pointcut with 
a "withincode(Signature)" clause. E.g.:

public aspect DetectSystemOutErrorUsage 
{
pointcut allSystemOutAndSystemErrAccesses(): 
	(get(* System.out) || get(* System.err))
	;

declare warning: 
	allSystemOutAndSystemErrAccesses() 
	&& !adviceexecution()
	&& !within(com.tivoli.act..Test*)
	&& !within(com.tivoli.act.log..*)
	&& !execution(* com.tivoli.act..*.main(..))
	&& !execution(* com.tivoli.act..*.usage())
	// && !withincode(* com.tivoli.act..*.main(..))
	// && !withincode(* com.tivoli.act..*.usage())
	: "Warning: use of System.out or System.err - consider logging 
instead!";
}

In the above example excluding main() and usage() methods from the pointcut 
using an execution(...)-clause (shows) works but using a withincode()-clause 
(as commented) always yields an NPE:

trouble in:
null
java.lang.NullPointerException
        at org.aspectj.weaver.patterns.SignaturePattern.matches
(SignaturePattern.java:87)
        at org.aspectj.weaver.patterns.WithincodePointcut.match
(WithincodePointcut.java:42)
        at org.aspectj.weaver.patterns.NotPointcut.match(NotPointcut.java:45)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:62)
        at org.aspectj.weaver.Checker.match(Checker.java:48)
        at org.aspectj.weaver.bcel.BcelClassWeaver.match
(BcelClassWeaver.java:1121)
        at org.aspectj.weaver.bcel.BcelClassWeaver.matchInit
(BcelClassWeaver.java:895)
        at org.aspectj.weaver.bcel.BcelClassWeaver.match
(BcelClassWeaver.java:793)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave
(BcelClassWeaver.java:343)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave
(BcelClassWeaver.java:80)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:724)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump
(BcelWeaver.java:689)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify
(BcelWeaver.java:615)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:563)
        at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.weave
(AjCompilerAdapter.java:239)
        at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.afterCompiling
(AjCompilerAdapter.java:114)
        at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:376)
        at 
org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation
(AjBuildManager.java:601)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild
(AjBuildManager.java:160)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild
(AjBuildManager.java:94)
        at org.aspectj.ajde.internal.CompilerAdapter.compile
(CompilerAdapter.java:108)
        at org.aspectj.ajde.internal.AspectJBuildManager$CompilerThread.run
(AspectJBuildManager.java:165)
!SESSION Jun 18, 2004 10:49:48.666 ---------------------------------------------
eclipse.buildId=I200406110010
java.version=1.4.2_03
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_CH

!ENTRY org.eclipse.ajdt.ui 4 0 Jun 18, 2004 10:49:48.666
!MESSAGE NullPointerException thrown: null
!STACK 0
java.lang.NullPointerException
        at org.aspectj.weaver.patterns.SignaturePattern.matches
(SignaturePattern.java:87)
        at org.aspectj.weaver.patterns.WithincodePointcut.match
(WithincodePointcut.java:42)
        at org.aspectj.weaver.patterns.NotPointcut.match(NotPointcut.java:45)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
        at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:62)
        at org.aspectj.weaver.Checker.match(Checker.java:48)
        at org.aspectj.weaver.bcel.BcelClassWeaver.match
(BcelClassWeaver.java:1121)
        at org.aspectj.weaver.bcel.BcelClassWeaver.matchInit
(BcelClassWeaver.java:895)
        at org.aspectj.weaver.bcel.BcelClassWeaver.match
(BcelClassWeaver.java:793)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave
(BcelClassWeaver.java:343)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave
(BcelClassWeaver.java:80)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:724)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump
(BcelWeaver.java:689)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify
(BcelWeaver.java:615)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:563)
        at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.weave
(AjCompilerAdapter.java:239)
        at org.aspectj.ajdt.internal.compiler.AjCompilerAdapter.afterCompiling
(AjCompilerAdapter.java:114)
        at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:376)
        at 
org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation
(AjBuildManager.java:601)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild
(AjBuildManager.java:160)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild
(AjBuildManager.java:94)
        at org.aspectj.ajde.internal.CompilerAdapter.compile
(CompilerAdapter.java:108)
        at org.aspectj.ajde.internal.AspectJBuildManager$CompilerThread.run
(AspectJBuildManager.java:165)


Michael
Comment 1 Andrew Clement CLA 2004-07-26 10:25:17 EDT
Thanks Michael for privately sending me your source... from all that source I've
finally recreated the problem with this tiny program:

aspect B {
  public A.new(String s) { }
  declare warning: withincode(void main(..)): "X";
}

class A {
  private final static String name = A.class.getName();
}

I suspected it was an initialization issue but I couldn't recreate it myself. 
Then I learned from your application that an ITD'd ctor was also in the mix.

Anyway, I'll now work on fixing it ...
Comment 2 Andrew Clement CLA 2004-07-28 12:20:54 EDT
*** Bug 65688 has been marked as a duplicate of this bug. ***
Comment 3 Andrew Clement CLA 2004-08-02 09:55:59 EDT
Ok.  The problem is to do with the preinitialization join point shadow not
correctly returning the right signature for the ctor that contains it.  It
returns null when asked 'where are you?' - which results in an NPE.  Although
the pointcuts we are discussing in this bug are looking for other shadows (not
in ctors), we still attempt to match against preinitialization shadows from ITDd
ctors.  The fix is to simply get it to return the signature for the ctor
containing it.

Fix checked in, waiting for build before closing this bug.
Comment 4 Andrew Clement CLA 2004-08-02 12:06:47 EDT
Fixed, available in dev build:

BUILD COMPLETE -  build.324
Date of build: 08/02/2004 15:14:37
Time to build: 100 minutes 0 seconds
Last changed: 08/02/2004 14:43:47
Last log entry: Fix for Bugzilla Bug 67774 Nullpointer-exception in pointcuts
using withincode() clause
Latest good AspectJ jar available at:
download.eclipse.org/technology/ajdt/dev/aspectj-DEVELOPMENT.jar
Comment 5 Adrian Colyer CLA 2004-10-21 04:32:23 EDT
Fix released as part of AspectJ 1.2.1