aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src
diff options
context:
space:
mode:
authorAndy Clement <andrew.clement@gmail.com>2012-03-23 18:17:09 -0700
committerAndy Clement <andrew.clement@gmail.com>2012-03-23 18:17:09 -0700
commitf85631fd2fb2e0f3213abb9c5a7cd86eec2c9ab5 (patch)
tree211fd1e8798b7a7886dbb2a035677444cdec73ff /tests/src
parent549d227a8ded88d708415162b36cb273ec496b77 (diff)
downloadaspectj-f85631fd2fb2e0f3213abb9c5a7cd86eec2c9ab5.tar.gz
aspectj-f85631fd2fb2e0f3213abb9c5a7cd86eec2c9ab5.zip
374964
Diffstat (limited to 'tests/src')
-rw-r--r--tests/src/org/aspectj/systemtest/ajc170/Ajc170Tests.java37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/src/org/aspectj/systemtest/ajc170/Ajc170Tests.java b/tests/src/org/aspectj/systemtest/ajc170/Ajc170Tests.java
index 77a50869c..9ce29a36f 100644
--- a/tests/src/org/aspectj/systemtest/ajc170/Ajc170Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc170/Ajc170Tests.java
@@ -17,14 +17,51 @@ import junit.framework.Test;
import org.aspectj.apache.bcel.classfile.Field;
import org.aspectj.apache.bcel.classfile.JavaClass;
import org.aspectj.testing.XMLBasedAjcTestCase;
+import org.aspectj.weaver.ResolvedMember;
+import org.aspectj.weaver.ResolvedType;
import org.aspectj.weaver.TypeFactory;
import org.aspectj.weaver.UnresolvedType;
+import org.aspectj.weaver.World;
+import org.aspectj.weaver.internal.tools.StandardPointcutExpressionImpl;
+import org.aspectj.weaver.patterns.BasicTokenSource;
+import org.aspectj.weaver.patterns.ITokenSource;
+import org.aspectj.weaver.patterns.PatternParser;
+import org.aspectj.weaver.patterns.Pointcut;
+import org.aspectj.weaver.patterns.PointcutEvaluationExpenseComparator;
+import org.aspectj.weaver.patterns.PointcutRewriter;
+import org.aspectj.weaver.reflect.ReflectionWorld;
+import org.aspectj.weaver.tools.StandardPointcutExpression;
+import org.aspectj.weaver.tools.StandardPointcutParser;
/**
* @author Andy Clement
*/
public class Ajc170Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
+ public void testPointcutExpense_374964() {
+ // check a declaring type being specified causes the call() to be considered cheaper than this()
+
+ World world = new ReflectionWorld(true, getClass().getClassLoader());
+ StandardPointcutParser pointcutParser = StandardPointcutParser.getPointcutParserSupportingAllPrimitives(world);
+ StandardPointcutExpressionImpl pointcutExpression = (StandardPointcutExpressionImpl)pointcutParser.parsePointcutExpression("call(* *(..)) && this(Object)");
+ Pointcut pc = pointcutExpression.getUnderlyingPointcut();
+ Pointcut newp = new PointcutRewriter().rewrite(pc);
+ // no declaring type so this() is considered cheaper
+ assertEquals("(this(java.lang.Object) && call(* *(..)))",newp.toString());
+
+ pointcutExpression = (StandardPointcutExpressionImpl)pointcutParser.parsePointcutExpression("call(* String.*(..)) && this(Object)");
+ pc = pointcutExpression.getUnderlyingPointcut();
+ newp = new PointcutRewriter().rewrite(pc);
+ // declaring type, so call() is cheaper
+ assertEquals("(call(* java.lang.String.*(..)) && this(java.lang.Object))",newp.toString());
+
+ pointcutExpression = (StandardPointcutExpressionImpl)pointcutParser.parsePointcutExpression("this(Object) && call(* *(..)) && call(* String.*(..))");
+ pc = pointcutExpression.getUnderlyingPointcut();
+ newp = new PointcutRewriter().rewrite(pc);
+ // more complex example, mix of them
+ assertEquals("((call(* java.lang.String.*(..)) && this(java.lang.Object)) && call(* *(..)))",newp.toString());
+ }
+
/*
public void testPublicITDFs_pr73507_1() {
runTest("public ITDfs - 1");