]> source.dussan.org Git - aspectj.git/commitdiff
it is now safe to short-circuit in and/or pc matching (all side-effects removed)
authoracolyer <acolyer>
Thu, 16 Dec 2004 11:04:19 +0000 (11:04 +0000)
committeracolyer <acolyer>
Thu, 16 Dec 2004 11:04:19 +0000 (11:04 +0000)
tests/java5/varargs/SimpleVarargs.java
tests/src/org/aspectj/systemtest/ajc150/VarargsTests.java
weaver/src/org/aspectj/weaver/patterns/AndPointcut.java
weaver/src/org/aspectj/weaver/patterns/OrPointcut.java

index bcd1e1bdf99dbc7b350f7105329f1bafff8742ca..c32047ab6e2e3b1b312656d3ce26730f1d1df7e8 100644 (file)
@@ -2,12 +2,17 @@ public class SimpleVarargs {
 
   public SimpleVarargs(Integer... strings) {}
 
-  public void foo(Integer... strings) { }
+  public void foo(Integer... strings) { 
+       moo();
+  }
 
 //public void bar(Integer[] array) { }
 
-  public void fooInt(int i,Integer... strings)  {}
+  public void fooInt(int i,Integer... strings)  {
+       moo();
+  }
 
+  private void moo() {}
 //public void barInt(int i,Integer[] strings) {}
 
   public static void main(String[] argv) {
index 178e82b189ec888315c5e558508a34402f5166d2..14f4532c73007276f2ba6855f649eb45575c42ea 100644 (file)
@@ -56,15 +56,9 @@ public class VarargsTests extends TestUtils {
   }
 
   // check when signature is from an withincode PCD
-  // In this test, it can be tricky to understand the results!!  The reason being that the shadow 
-  // isn't included in the error message (it really should be, but thats a bit hard to do cleanly)
   public void test003_cantMatchVarargsWithObjectArray_withincodePCD() {
-       CompilationResult cR = binaryWeave("testcode.jar","VarargsAspect04.aj",0,6,true);
+       CompilationResult cR = binaryWeave("testcode.jar","VarargsAspect04.aj",0,1,true);
        
-       // There are 7.  Each piece of the pointcut is matched against all the shadows, so both
-       // the 'withincode' PCD and the 'call' PCD are matched against every join point.
-       // AMC - there are now SIX. We detect early that a call(* *(..)) pcd cannot match 
-       //       constructor call shadows and never do the match.
        assertTrue("Did not get expected message about a varargs mismatch, instead got: "+cR.getWarningMessages(),
                        ((IMessage)cR.getWarningMessages().get(0)).toString().indexOf("varargs declared method")!=-1);
                
@@ -79,9 +73,9 @@ public class VarargsTests extends TestUtils {
        System.err.println(cR.getErrorMessages());
        System.err.println(cR.getInfoMessages());
        verifyWeavingMessagesOutput(cR,new String[]{
-               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:15) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)",
-               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:16) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)",
-               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:17) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)"});
+               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:20) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)",
+               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:21) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)",
+               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:22) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)"});
   }
   
   // before(): call(* *(int,Integer...)) { } - slightly more complex pcut
@@ -92,9 +86,9 @@ public class VarargsTests extends TestUtils {
        System.err.println(cR.getInfoMessages());
         
        verifyWeavingMessagesOutput(cR,new String[]{
-               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:20) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)",
-               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:21) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)",
-               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:22) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)"});
+               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:25) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)",
+               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:26) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)",
+               "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:27) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)"});
  }
   
 }
\ No newline at end of file
index 1775ba3db49f990a90b3f8167a6d4884d228702a..dcb951d462f3aef0b369c98b19a4448ce77693b9 100644 (file)
@@ -53,7 +53,9 @@ public class AndPointcut extends Pointcut {
        }
 
        protected FuzzyBoolean matchInternal(Shadow shadow) {
-               return left.match(shadow).and(right.match(shadow));
+               FuzzyBoolean leftMatch = left.match(shadow);
+               if (leftMatch.alwaysFalse()) return leftMatch;
+               return leftMatch.and(right.match(shadow));
        }
        
        public FuzzyBoolean match(JoinPoint jp, JoinPoint.StaticPart encJP) {
index e204ef329992214aea050eb7fb5af3550c4b506e..2eca6de019e9212f94d258e2e217f124228eecea 100644 (file)
@@ -51,7 +51,9 @@ public class OrPointcut extends Pointcut {
        }
 
        protected FuzzyBoolean matchInternal(Shadow shadow) {
-               return left.match(shadow).or(right.match(shadow));
+               FuzzyBoolean leftMatch = left.match(shadow);
+               if (leftMatch.alwaysTrue()) return leftMatch;
+               return leftMatch.or(right.match(shadow));
        }
        
        public FuzzyBoolean match(JoinPoint jp, JoinPoint.StaticPart encJP) {