]> source.dussan.org Git - aspectj.git/commitdiff
tests and fix for pr118149
authoracolyer <acolyer>
Tue, 6 Dec 2005 03:20:59 +0000 (03:20 +0000)
committeracolyer <acolyer>
Tue, 6 Dec 2005 03:20:59 +0000 (03:20 +0000)
tests/bugs150/PR118149.aj [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
weaver/src/org/aspectj/weaver/patterns/IfPointcut.java

diff --git a/tests/bugs150/PR118149.aj b/tests/bugs150/PR118149.aj
new file mode 100644 (file)
index 0000000..99bd275
--- /dev/null
@@ -0,0 +1,23 @@
+public aspect PR118149 {
+
+       public pointcut pc1(String s)
+               : execution(* C.*()) && args(s) && if(s != null);
+       
+       public pointcut pc2(String s)
+               : execution(C.new(String,..)) 
+               && args(s,..) && if(s != null);
+
+       public pointcut pcOR(String s) : pc1(s) || pc2(s);
+       
+       before(String s) : pcOR(s) {    
+       }
+       
+}
+
+
+class C {
+
+       public C(String s, boolean b) {         
+       }
+       
+}
index b85273404a97eb5410dad573f4be058b3e845f37..42df7f208c6ff69d218d9b9de677f848ba7a86ea 100644 (file)
@@ -793,6 +793,9 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
          runTest("no NPE when inaccessible method is called within itd");
   }
   
+  public void testNoNPEWithOrPointcutAndMoreThanOneArgs_pr118149() {
+         runTest("no NPE with or pointcut and more than one args");
+  }
   
   // helper methods.....
   
index bd09fbaf76af6c2d3f06b00295353114257423d8..17c763d7f1d78431b28be751e24c69daab017988 100644 (file)
         <run class="foo.ITDWithACall"/>
     </ajc-test>
 
+       <ajc-test dir="bugs150" title="no NPE with or pointcut and more than one args">
+        <compile files="PR118149.aj"/>
+    </ajc-test>
+
     <!-- ============================================================================ -->
     <!-- ============================================================================ -->
     
index eb92d66b044a29ecc4d425fbcaf39a7a4e908a0f..9b8d5b6af42e0ff2a7a390015ff867a8a5014ba8 100644 (file)
@@ -175,8 +175,15 @@ public class IfPointcut extends Pointcut {
                     residueSource.findResidue(shadow, myState);
 
 
+                    // pr118149
+                    // It is possible for vars in myState (which would normally be set
+                    // in the call to residueSource.findResidue) to not be set (be null)
+                    // in an Or pointcut with if expressions in both branches, and where
+                    // one branch is known statically to not match. In this situation we
+                    // simply return Test.
                     for (int i=0; i < baseArgsCount; i++) {
                         Var v = myState.get(i);
+                        if (v == null) continue;  // pr118149
                         args.add(v);
                         ret = Test.makeAnd(ret,
                             Test.makeInstanceof(v,