aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java10
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/AnnotationPointcut.java8
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java10
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java6
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/CflowPointcut.java6
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java6
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ExactTypePattern.java2
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java11
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java36
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java10
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java16
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/PointcutVisitor.java97
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java2
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.java8
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java8
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java12
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/TypePattern.java10
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java5
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java6
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java6
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.java6
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java8
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java8
-rw-r--r--weaver/testsrc/org/aspectj/weaver/patterns/ParserTestCase.java4
-rw-r--r--weaver/testsrc/org/aspectj/weaver/patterns/VisitorTestCase.java60
25 files changed, 219 insertions, 142 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java
index b56817b7f..cf547c235 100644
--- a/weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java
@@ -30,7 +30,7 @@ import org.aspectj.weaver.VersionedDataInputStream;
* @author Jim Hugunin
*/
public class AndTypePattern extends TypePattern {
- TypePattern left, right;
+ private TypePattern left, right;
public AndTypePattern(TypePattern left, TypePattern right) {
super(false,false); //?? we override all methods that care about includeSubtypes
@@ -145,6 +145,14 @@ public class AndTypePattern extends TypePattern {
return buff.toString();
}
+ public TypePattern getLeft() {
+ return left;
+ }
+
+ public TypePattern getRight() {
+ return right;
+ }
+
public boolean equals(Object obj) {
if (! (obj instanceof AndTypePattern)) return false;
AndTypePattern atp = (AndTypePattern) obj;
diff --git a/weaver/src/org/aspectj/weaver/patterns/AnnotationPointcut.java b/weaver/src/org/aspectj/weaver/patterns/AnnotationPointcut.java
index ae611aea2..586056a24 100644
--- a/weaver/src/org/aspectj/weaver/patterns/AnnotationPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/AnnotationPointcut.java
@@ -60,7 +60,7 @@ import org.aspectj.weaver.bcel.BcelTypeMunger;
*/
public class AnnotationPointcut extends NameBindingPointcut {
- ExactAnnotationTypePattern annotationTypePattern;
+ private ExactAnnotationTypePattern annotationTypePattern;
private ShadowMunger munger = null; // only set after concretization
public AnnotationPointcut(ExactAnnotationTypePattern type) {
@@ -74,6 +74,10 @@ public class AnnotationPointcut extends NameBindingPointcut {
this.munger = munger;
}
+ public ExactAnnotationTypePattern getAnnotationTypePattern() {
+ return annotationTypePattern;
+ }
+
public Set couldMatchKinds() {
return Shadow.ALL_SHADOW_KINDS;
}
@@ -182,7 +186,7 @@ public class AnnotationPointcut extends NameBindingPointcut {
if (annotationTypePattern instanceof BindingAnnotationTypePattern) {
BindingAnnotationTypePattern btp = (BindingAnnotationTypePattern)annotationTypePattern;
- TypeX annotationType = btp.annotationType;
+ TypeX annotationType = btp.getAnnotationType();
Var var = shadow.getKindedAnnotationVar(annotationType);
// This should not happen, we shouldn't have gotten this far
diff --git a/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java
index dc9d43993..f60f64446 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java
@@ -39,7 +39,7 @@ import org.aspectj.weaver.ast.Var;
*/
public class ArgsAnnotationPointcut extends NameBindingPointcut {
- AnnotationPatternList arguments;
+ private AnnotationPatternList arguments;
/**
*
@@ -48,7 +48,11 @@ public class ArgsAnnotationPointcut extends NameBindingPointcut {
super();
this.arguments = arguments;
}
-
+
+ public AnnotationPatternList getArguments() {
+ return arguments;
+ }
+
public Set couldMatchKinds() {
return Shadow.ALL_SHADOW_KINDS; // empty args() matches jps with no args
}
@@ -138,7 +142,7 @@ public class ArgsAnnotationPointcut extends NameBindingPointcut {
"",IMessage.ERROR,shadow.getSourceLocation(),null,new ISourceLocation[]{getSourceLocation()});
}
- ResolvedTypeX rAnnType = ap.annotationType.resolve(shadow.getIWorld());
+ ResolvedTypeX rAnnType = ap.getAnnotationType().resolve(shadow.getIWorld());
if (ap instanceof BindingAnnotationTypePattern) {
BindingAnnotationTypePattern btp = (BindingAnnotationTypePattern)ap;
Var annvar = shadow.getArgAnnotationVar(argsIndex,rAnnType);
diff --git a/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java
index 1a30fdd72..eebacd084 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java
@@ -51,13 +51,17 @@ import org.aspectj.weaver.internal.tools.PointcutExpressionImpl;
* @author Jim Hugunin
*/
public class ArgsPointcut extends NameBindingPointcut {
- TypePatternList arguments;
+ private TypePatternList arguments;
public ArgsPointcut(TypePatternList arguments) {
this.arguments = arguments;
this.pointcutKind = ARGS;
}
+ public TypePatternList getArguments() {
+ return arguments;
+ }
+
public Set couldMatchKinds() {
return Shadow.ALL_SHADOW_KINDS; // empty args() matches jps with no args
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/CflowPointcut.java b/weaver/src/org/aspectj/weaver/patterns/CflowPointcut.java
index 3b0611adc..4c1c13d7b 100644
--- a/weaver/src/org/aspectj/weaver/patterns/CflowPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/CflowPointcut.java
@@ -44,7 +44,7 @@ import org.aspectj.weaver.ast.Test;
public class CflowPointcut extends Pointcut {
private Pointcut entry; // The pointcut inside the cflow() that represents the 'entry' point
- boolean isBelow;// Is this cflowbelow?
+ private boolean isBelow;// Is this cflowbelow?
private int[] freeVars;
private static Hashtable cflowFields = new Hashtable();
@@ -68,6 +68,10 @@ public class CflowPointcut extends Pointcut {
this.pointcutKind = CFLOW;
}
+ public boolean isBelow() {
+ return isBelow;
+ }
+
public Set couldMatchKinds() {
return Shadow.ALL_SHADOW_KINDS;
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java
index f098d36f6..8e980203e 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java
@@ -48,7 +48,11 @@ public class ExactAnnotationTypePattern extends AnnotationTypePattern {
this.bindingPattern = true;
// will be turned into BindingAnnotationTypePattern during resolution
}
-
+
+ public TypeX getAnnotationType() {
+ return annotationType;
+ }
+
public FuzzyBoolean fastMatches(AnnotatedElement annotated) {
if (annotated.hasAnnotation(annotationType)) {
return FuzzyBoolean.YES;
diff --git a/weaver/src/org/aspectj/weaver/patterns/ExactTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/ExactTypePattern.java
index d9e814003..eb3cececa 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ExactTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ExactTypePattern.java
@@ -86,7 +86,7 @@ public class ExactTypePattern extends TypePattern {
}
if (other instanceof WildTypePattern) {
WildTypePattern owtp = (WildTypePattern) other;
- String yourSimpleNamePrefix = owtp.namePatterns[0].maybeGetSimpleName();
+ String yourSimpleNamePrefix = owtp.getNamePatterns()[0].maybeGetSimpleName();
if (yourSimpleNamePrefix != null) {
return (type.getName().startsWith(yourSimpleNamePrefix));
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java
index 61123362a..8951931f6 100644
--- a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java
@@ -37,7 +37,7 @@ import org.aspectj.weaver.ast.Test;
public class KindedPointcut extends Pointcut {
Shadow.Kind kind;
- SignaturePattern signature;
+ private SignaturePattern signature;
private Set matchKinds;
private ShadowMunger munger = null; // only set after concretization
@@ -54,12 +54,15 @@ public class KindedPointcut extends Pointcut {
public KindedPointcut(
Shadow.Kind kind,
SignaturePattern signature,
- ShadowMunger munger)
- {
+ ShadowMunger munger) {
this(kind, signature);
this.munger = munger;
}
-
+
+ public SignaturePattern getSignature() {
+ return signature;
+ }
+
/* (non-Javadoc)
* @see org.aspectj.weaver.patterns.Pointcut#couldMatchKinds()
*/
diff --git a/weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java
index bfd9dad5e..e8dba6cb2 100644
--- a/weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java
@@ -32,14 +32,18 @@ import org.aspectj.weaver.VersionedDataInputStream;
* @author Jim Hugunin
*/
public class NotTypePattern extends TypePattern {
- TypePattern pattern;
+ private TypePattern negatedPattern;
public NotTypePattern(TypePattern pattern) {
super(false,false); //??? we override all methods that care about includeSubtypes
- this.pattern = pattern;
+ this.negatedPattern = pattern;
setLocation(pattern.getSourceContext(), pattern.getStart(), pattern.getEnd());
}
+ public TypePattern getNegatedPattern() {
+ return negatedPattern;
+ }
+
/* (non-Javadoc)
* @see org.aspectj.weaver.patterns.TypePattern#couldEverMatchSameTypesAs(org.aspectj.weaver.patterns.TypePattern)
*/
@@ -48,31 +52,31 @@ public class NotTypePattern extends TypePattern {
}
public FuzzyBoolean matchesInstanceof(ResolvedTypeX type) {
- return pattern.matchesInstanceof(type).not();
+ return negatedPattern.matchesInstanceof(type).not();
}
protected boolean matchesExactly(ResolvedTypeX type) {
- return (!pattern.matchesExactly(type) && annotationPattern.matches(type).alwaysTrue());
+ return (!negatedPattern.matchesExactly(type) && annotationPattern.matches(type).alwaysTrue());
}
protected boolean matchesExactly(ResolvedTypeX type, ResolvedTypeX annotatedType) {
- return (!pattern.matchesExactly(type,annotatedType) && annotationPattern.matches(annotatedType).alwaysTrue());
+ return (!negatedPattern.matchesExactly(type,annotatedType) && annotationPattern.matches(annotatedType).alwaysTrue());
}
public boolean matchesStatically(Class type) {
- return !pattern.matchesStatically(type);
+ return !negatedPattern.matchesStatically(type);
}
public FuzzyBoolean matchesInstanceof(Class type) {
- return pattern.matchesInstanceof(type).not();
+ return negatedPattern.matchesInstanceof(type).not();
}
protected boolean matchesExactly(Class type) {
- return !pattern.matchesExactly(type);
+ return !negatedPattern.matchesExactly(type);
}
public boolean matchesStatically(ResolvedTypeX type) {
- return !pattern.matchesStatically(type);
+ return !negatedPattern.matchesStatically(type);
}
public void setAnnotationTypePattern(AnnotationTypePattern annPatt) {
@@ -80,13 +84,13 @@ public class NotTypePattern extends TypePattern {
}
public void setIsVarArgs(boolean isVarArgs) {
- pattern.setIsVarArgs(isVarArgs);
+ negatedPattern.setIsVarArgs(isVarArgs);
}
public void write(DataOutputStream s) throws IOException {
s.writeByte(TypePattern.NOT);
- pattern.write(s);
+ negatedPattern.write(s);
annotationPattern.write(s);
writeLocation(s);
}
@@ -106,13 +110,13 @@ public class NotTypePattern extends TypePattern {
boolean allowBinding, boolean requireExactType)
{
if (requireExactType) return notExactType(scope);
- pattern = pattern.resolveBindings(scope, bindings, false, false);
+ negatedPattern = negatedPattern.resolveBindings(scope, bindings, false, false);
return this;
}
public TypePattern resolveBindingsFromRTTI(boolean allowBinding, boolean requireExactType) {
if (requireExactType) return TypePattern.NO;
- pattern = pattern.resolveBindingsFromRTTI(allowBinding,requireExactType);
+ negatedPattern = negatedPattern.resolveBindingsFromRTTI(allowBinding,requireExactType);
return this;
}
@@ -124,7 +128,7 @@ public class NotTypePattern extends TypePattern {
buff.append(' ');
}
buff.append('!');
- buff.append(pattern);
+ buff.append(negatedPattern);
if (annotationPattern != AnnotationTypePattern.ANY) {
buff.append(')');
}
@@ -136,14 +140,14 @@ public class NotTypePattern extends TypePattern {
*/
public boolean equals(Object obj) {
if (! (obj instanceof NotTypePattern)) return false;
- return (pattern.equals(((NotTypePattern)obj).pattern));
+ return (negatedPattern.equals(((NotTypePattern)obj).negatedPattern));
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
- return 17 + 37 * pattern.hashCode();
+ return 17 + 37 * negatedPattern.hashCode();
}
public Object accept(PointcutVisitor visitor, Object data) {
diff --git a/weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java
index a23c2fbe7..16fe35872 100644
--- a/weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java
@@ -30,7 +30,7 @@ import org.aspectj.weaver.VersionedDataInputStream;
* @author Jim Hugunin
*/
public class OrTypePattern extends TypePattern {
- TypePattern left, right;
+ private TypePattern left, right;
public OrTypePattern(TypePattern left, TypePattern right) {
super(false,false); //??? we override all methods that care about includeSubtypes
@@ -39,6 +39,14 @@ public class OrTypePattern extends TypePattern {
setLocation(left.getSourceContext(), left.getStart(), right.getEnd());
}
+ public TypePattern getRight() {
+ return right;
+ }
+
+ public TypePattern getLeft() {
+ return left;
+ }
+
/* (non-Javadoc)
* @see org.aspectj.weaver.patterns.TypePattern#couldEverMatchSameTypesAs(org.aspectj.weaver.patterns.TypePattern)
*/
diff --git a/weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java b/weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java
index bddb7efcc..54eead76c 100644
--- a/weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java
+++ b/weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java
@@ -51,7 +51,7 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
//pertarget(.. && !within(Foo)) => true as well !
return MAYBE;
} else {
- return node.typePattern;
+ return node.getTypePattern();
}
}
@@ -61,7 +61,7 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
//pertarget(.. && !withincode(* Foo.do())) => true as well !
return MAYBE;
} else {
- return node.signature.getDeclaringType();
+ return node.getSignature().getDeclaringType();
}
}
@@ -69,7 +69,7 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
if (m_isTarget) {
return MAYBE;
} else {
- return node.annotationTypePattern;
+ return node.getAnnotationTypePattern();
}
}
@@ -89,13 +89,13 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
|| node.getKind().equals(Shadow.MethodExecution)
|| node.getKind().equals(Shadow.PreInitialization)
|| node.getKind().equals(Shadow.StaticInitialization)) {
- return node.signature.getDeclaringType();
+ return node.getSignature().getDeclaringType();
} else if (node.getKind().equals(Shadow.ConstructorCall)
|| node.getKind().equals(Shadow.FieldGet)
|| node.getKind().equals(Shadow.FieldSet)
|| node.getKind().equals(Shadow.MethodCall)) {
if (m_isTarget) {
- return node.signature.getDeclaringType();
+ return node.getSignature().getDeclaringType();
} else {
return MAYBE;
}
@@ -124,9 +124,9 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
public Object visit(ThisOrTargetAnnotationPointcut node, Object data) {
if (m_isTarget && !node.isThis()) {
- return node.annotationTypePattern;
+ return node.getAnnotationTypePattern();
} else if (!m_isTarget && node.isThis()) {
- return node.annotationTypePattern;
+ return node.getAnnotationTypePattern();
} else {
// perthis(@target(Foo))
return MAYBE;
@@ -139,7 +139,7 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
//pertarget(target(Foo)) => Foo+ for type pattern matching
//perthis(this(Foo)) => Foo+ for type pattern matching
// TODO AV - we do like a deep copy by parsing it again.. quite dirty, would need a clean deep copy
- TypePattern copy = new PatternParser(node.type.toString()).parseTypePattern();
+ TypePattern copy = new PatternParser(node.getType().toString()).parseTypePattern();
copy.includeSubtypes = true;
return copy;
} else {
diff --git a/weaver/src/org/aspectj/weaver/patterns/PointcutVisitor.java b/weaver/src/org/aspectj/weaver/patterns/PointcutVisitor.java
index 20fa71a8e..6f2acffd0 100644
--- a/weaver/src/org/aspectj/weaver/patterns/PointcutVisitor.java
+++ b/weaver/src/org/aspectj/weaver/patterns/PointcutVisitor.java
@@ -13,9 +13,6 @@ package org.aspectj.weaver.patterns;
import org.aspectj.weaver.Member;
-import org.aspectj.weaver.patterns.TypePattern.*;
-import org.aspectj.weaver.patterns.AnnotationTypePattern.*;
-
/**
* A Pointcut or TypePattern visitor
*
@@ -133,7 +130,6 @@ public interface PointcutVisitor {
/**
* A sample toString like visitor that helps understanding the AST tree structure organization
- * TODO: not yet complete
*
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
*/
@@ -198,12 +194,9 @@ public interface PointcutVisitor {
}
public Object visit(AndAnnotationTypePattern node, Object data) {
- //p('(');
node.getLeft().accept(this, data);
- //p(" && ");
append(' ');
node.getRight().accept(this, data);
- //p(')');
return null;
}
@@ -218,9 +211,9 @@ public interface PointcutVisitor {
public Object visit(AndTypePattern node, Object data) {
append('(');
- node.left.accept(this, data);
+ node.getLeft().accept(this, data);
append(" && ");
- node.right.accept(this, data);
+ node.getRight().accept(this, data);
append(')');
return null;
}
@@ -228,7 +221,7 @@ public interface PointcutVisitor {
public Object visit(AnnotationPatternList node, Object data) {
AnnotationTypePattern[] annotations = node.getAnnotationPatterns();
for (int i = 0; i < annotations.length; i++) {
- if (i>0) append(", ");//FIXME AV should that be here?
+ if (i>0) append(", ");//Note: list is ",", and is " " separated for annotations
annotations[i].accept(this, data);
}
return null;
@@ -236,21 +229,21 @@ public interface PointcutVisitor {
public Object visit(AnnotationPointcut node, Object data) {
append("@annotation(");
- node.annotationTypePattern.accept(this, data);
+ node.getAnnotationTypePattern().accept(this, data);
append(')');
return null;
}
public Object visit(ArgsAnnotationPointcut node, Object data) {
append("@args(");
- node.arguments.accept(this, data);
+ node.getArguments().accept(this, data);
append(')');
return null;
}
public Object visit(ArgsPointcut node, Object data) {
append("args(");
- node.arguments.accept(this, data);
+ node.getArguments().accept(this, data);
append(')');
return null;
}
@@ -266,31 +259,31 @@ public interface PointcutVisitor {
}
public Object visit(CflowPointcut node, Object data) {
- append(node.isBelow?"cflowbelow(":"cflow(");
+ append(node.isBelow()?"cflowbelow(":"cflow(");
node.getEntry().accept(this, data);
append(')');
return null;
}
public Object visit(ExactAnnotationTypePattern node, Object data) {
- //p('@'); // since @annotation(@someAnno) cannot be parsed anymore
- append(node.annotationType.getName());
+ //append('@'); // since @annotation(@someAnno) cannot be parsed anymore
+ append(node.getAnnotationType().getName());
return null;
}
public Object visit(ExactTypePattern node, Object data) {
- if (node.annotationPattern != AnnotationTypePattern.ANY) {
+ if (node.getAnnotationPattern() != AnnotationTypePattern.ANY) {
append('(');
- node.annotationPattern.accept(this, data);
+ node.getAnnotationPattern().accept(this, data);
append(' ');
}
- String typeString = node.type.toString();
- if (node.isVarArgs) typeString = typeString.substring(0, typeString.lastIndexOf('['));//TODO AV - ugly
+ String typeString = node.getType().toString();
+ if (node.isVarArgs()) typeString = typeString.substring(0, typeString.lastIndexOf('['));//TODO AV - ugly
append(typeString);
- if (node.includeSubtypes) append('+');
- if (node.isVarArgs) append("...");
- if (node.annotationPattern != AnnotationTypePattern.ANY) {
+ if (node.isIncludeSubtypes()) append('+');
+ if (node.isVarArgs()) append("...");
+ if (node.getAnnotationPattern() != AnnotationTypePattern.ANY) {
append(')');
}
return null;
@@ -299,7 +292,7 @@ public interface PointcutVisitor {
public Object visit(KindedPointcut node, Object data) {
append(node.getKind().getSimpleName());
append('(');
- node.signature.accept(this, data);
+ node.getSignature().accept(this, data);
append(')');
return null;
}
@@ -316,7 +309,7 @@ public interface PointcutVisitor {
public Object visit(NotAnnotationTypePattern node, Object data) {
append("!");
- node.negatedPattern.accept(this, data);
+ node.getNegatedPattern().accept(this, data);
return null;
}
@@ -329,7 +322,7 @@ public interface PointcutVisitor {
public Object visit(NotTypePattern node, Object data) {
append("!(");
- node.pattern.accept(this, data);
+ node.getNegatedPattern().accept(this, data);
append(')');
return null;
}
@@ -354,9 +347,9 @@ public interface PointcutVisitor {
public Object visit(OrTypePattern node, Object data) {
append('(');
- node.left.accept(this, data);
+ node.getLeft().accept(this, data);
append(" || ");
- node.right.accept(this, data);
+ node.getRight().accept(this, data);
append(')');
return null;
}
@@ -379,7 +372,6 @@ public interface PointcutVisitor {
if (node.getKind() == Member.STATIC_INITIALIZATION) {
node.getDeclaringType().accept(this, data);
- //p(".<clinit>()");
} else if (node.getKind() == Member.HANDLER) {
append("handler(");
node.getParameterTypes().get(0).accept(this, data);//Note: we know we have 1 child
@@ -413,31 +405,34 @@ public interface PointcutVisitor {
public Object visit(ThisOrTargetAnnotationPointcut node, Object data) {
append(node.isThis() ? "@this(" : "@target(");
- node.annotationTypePattern.accept(this, data);
- //buf.append(annPatt.startsWith("@") ? annPatt.substring(1) : annPatt);
+ node.getAnnotationTypePattern().accept(this, data);
append(')');
return null;
}
public Object visit(ThisOrTargetPointcut node, Object data) {
append(node.isThis() ? "this(" : "target(");
- node.type.accept(this, data);
+ node.getType().accept(this, data);
append(')');
return null;
}
+ // Note: a visitor instance is not thread safe so should not be shared
private boolean inThrowsForbidden = false;
public Object visit(ThrowsPattern node, Object data) {
if (node == ThrowsPattern.ANY) return null;
append("throws ");
- node.required.accept(this, data);
- if (node.forbidden.size() > 0) {
+ node.getRequired().accept(this, data);
+ if (node.getForbidden().size() > 0) {
// a hack since throws !(A, B) cannot be parsed
- inThrowsForbidden = true;
- node.forbidden.accept(this, data);
- inThrowsForbidden = false;
+ try {
+ inThrowsForbidden = true;
+ node.getForbidden().accept(this, data);
+ } finally {
+ inThrowsForbidden = false;
+ }
}
return null;
}
@@ -457,29 +452,29 @@ public interface PointcutVisitor {
public Object visit(WildAnnotationTypePattern node, Object data) {
append("@(");
- node.typePattern.accept(this, data);
+ node.getTypePattern().accept(this, data);
append(')');
return null;
}
public Object visit(WildTypePattern node, Object data) {
- if (node.annotationPattern != AnnotationTypePattern.ANY) {
+ if (node.getAnnotationPattern() != AnnotationTypePattern.ANY) {
append('(');
- node.annotationPattern.accept(this, data);
+ node.getAnnotationPattern().accept(this, data);
append(' ');
}
- for (int i=0, len=node.namePatterns.length; i < len; i++) {
- NamePattern name = node.namePatterns[i];
- if (name == null) {
+ NamePattern[] namePatterns = node.getNamePatterns();
+ for (int i=0; i < namePatterns.length; i++) {
+ if (namePatterns[i] == null) {
append('.');//FIXME mh, error prone, can't we have a nullNamePattern ?
} else {
if (i > 0) append('.');
- name.accept(this, data);
+ namePatterns[i].accept(this, data);
}
}
- if (node.includeSubtypes) append('+');
- if (node.isVarArgs) append("...");//FIXME ? in type pattern
- if (node.annotationPattern != AnnotationTypePattern.ANY) {
+ if (node.isIncludeSubtypes()) append('+');
+ if (node.isVarArgs()) append("...");
+ if (node.getAnnotationPattern() != AnnotationTypePattern.ANY) {
append(')');
}
return null;
@@ -487,28 +482,28 @@ public interface PointcutVisitor {
public Object visit(WithinAnnotationPointcut node, Object data) {
append("@within(");
- node.annotationTypePattern.accept(this, data);
+ node.getAnnotationTypePattern().accept(this, data);
append(')');
return null;
}
public Object visit(WithinCodeAnnotationPointcut node, Object data) {
append("@withincode(");
- node.annotationTypePattern.accept(this, data);
+ node.getAnnotationTypePattern().accept(this, data);
append(')');
return null;
}
public Object visit(WithinPointcut node, Object data) {
append("within(");
- node.typePattern.accept(this, data);
+ node.getTypePattern().accept(this, data);
append(')');
return null;
}
public Object visit(WithincodePointcut node, Object data) {
append("withincode(");
- node.signature.accept(this, data);
+ node.getSignature().accept(this, data);
append(')');
return null;
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java b/weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java
index 0b0e4d980..0cdd94dec 100644
--- a/weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java
@@ -490,7 +490,7 @@ public class SignaturePattern extends PatternNode {
if (kind == Member.STATIC_INITIALIZATION) {
buf.append(declaringType.toString());
- buf.append(".<clinit>()");
+ buf.append(".<clinit>()");//FIXME AV - bad, cannot be parsed again
} else if (kind == Member.HANDLER) {
buf.append("handler(");
buf.append(parameterTypes.get(0));
diff --git a/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.java
index 9310cfe60..be281ffc4 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.java
@@ -43,7 +43,7 @@ public class ThisOrTargetAnnotationPointcut extends NameBindingPointcut {
private boolean isThis;
private boolean alreadyWarnedAboutDEoW = false;
- ExactAnnotationTypePattern annotationTypePattern;
+ private ExactAnnotationTypePattern annotationTypePattern;
private ShadowMunger munger;
private static final Set thisKindSet = new HashSet(Shadow.ALL_SHADOW_KINDS);
private static final Set targetKindSet = new HashSet(Shadow.ALL_SHADOW_KINDS);
@@ -68,7 +68,11 @@ public class ThisOrTargetAnnotationPointcut extends NameBindingPointcut {
this(isThis,type);
this.munger = munger;
}
-
+
+ public ExactAnnotationTypePattern getAnnotationTypePattern() {
+ return annotationTypePattern;
+ }
+
public Set couldMatchKinds() {
return isThis ? thisKindSet : targetKindSet;
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java
index f1bb005a3..2a2d6786b 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java
@@ -53,7 +53,7 @@ import org.aspectj.weaver.ast.Var;
*/
public class ThisOrTargetPointcut extends NameBindingPointcut {
private boolean isThis;
- TypePattern type;
+ private TypePattern type;
private static final Set thisKindSet = new HashSet(Shadow.ALL_SHADOW_KINDS);
private static final Set targetKindSet = new HashSet(Shadow.ALL_SHADOW_KINDS);
@@ -70,7 +70,11 @@ public class ThisOrTargetPointcut extends NameBindingPointcut {
this.type = type;
this.pointcutKind = THIS_OR_TARGET;
}
-
+
+ public TypePattern getType() {
+ return type;
+ }
+
public boolean isThis() { return isThis; }
public Set couldMatchKinds() {
diff --git a/weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java b/weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java
index a0e7fd244..9977c3c5e 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java
@@ -24,8 +24,8 @@ import org.aspectj.weaver.World;
public class ThrowsPattern extends PatternNode {
- TypePatternList required;
- TypePatternList forbidden;
+ private TypePatternList required;
+ private TypePatternList forbidden;
public static final ThrowsPattern ANY =
new ThrowsPattern(TypePatternList.EMPTY, TypePatternList.EMPTY);
@@ -35,6 +35,14 @@ public class ThrowsPattern extends PatternNode {
this.forbidden = forbidden;
}
+ public TypePatternList getRequired() {
+ return required;
+ }
+
+ public TypePatternList getForbidden() {
+ return forbidden;
+ }
+
public String toString() {
if (this == ANY) return "";
diff --git a/weaver/src/org/aspectj/weaver/patterns/TypePattern.java b/weaver/src/org/aspectj/weaver/patterns/TypePattern.java
index 06a5d3069..e541b3946 100644
--- a/weaver/src/org/aspectj/weaver/patterns/TypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/TypePattern.java
@@ -59,7 +59,15 @@ public abstract class TypePattern extends PatternNode {
this.includeSubtypes = includeSubtypes;
this.isVarArgs = isVarArgs;
}
-
+
+ public AnnotationTypePattern getAnnotationPattern() {
+ return annotationPattern;
+ }
+
+ public boolean isVarArgs() {
+ return isVarArgs;
+ }
+
public boolean isStarAnnotation() {
return annotationPattern == AnnotationTypePattern.ANY;
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java
index 6e23a430c..c75924b1d 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java
@@ -31,7 +31,7 @@ import org.aspectj.weaver.World;
*/
public class WildAnnotationTypePattern extends AnnotationTypePattern {
- TypePattern typePattern;
+ private TypePattern typePattern;
private boolean resolved = false;
/**
@@ -42,6 +42,9 @@ public class WildAnnotationTypePattern extends AnnotationTypePattern {
this.typePattern = typePattern;
}
+ public TypePattern getTypePattern() {
+ return typePattern;
+ }
/* (non-Javadoc)
* @see org.aspectj.weaver.patterns.AnnotationTypePattern#matches(org.aspectj.weaver.AnnotatedElement)
diff --git a/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
index 065021651..2e5b98f5d 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
@@ -33,7 +33,7 @@ import org.aspectj.weaver.WeaverMessages;
//XXX need to use dim in matching
public class WildTypePattern extends TypePattern {
- NamePattern[] namePatterns;
+ private NamePattern[] namePatterns;
int ellipsisCount;
String[] importedPrefixes;
String[] knownMatches;
@@ -66,6 +66,10 @@ public class WildTypePattern extends TypePattern {
this.isVarArgs = isVarArg;
}
+ public NamePattern[] getNamePatterns() {
+ return namePatterns;
+ }
+
// called by parser after parsing a type pattern, must bump dim as well as setting flag
public void setIsVarArgs(boolean isVarArgs) {
this.isVarArgs = isVarArgs;
diff --git a/weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java b/weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java
index c697eb633..a00734b1d 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java
@@ -41,7 +41,7 @@ import org.aspectj.weaver.ast.Var;
*/
public class WithinAnnotationPointcut extends NameBindingPointcut {
- AnnotationTypePattern annotationTypePattern;
+ private AnnotationTypePattern annotationTypePattern;
private ShadowMunger munger;
/**
@@ -57,6 +57,10 @@ public class WithinAnnotationPointcut extends NameBindingPointcut {
this.munger = munger;
}
+ public AnnotationTypePattern getAnnotationTypePattern() {
+ return annotationTypePattern;
+ }
+
public Set couldMatchKinds() {
return Shadow.ALL_SHADOW_KINDS;
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.java b/weaver/src/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.java
index a570ea221..b1eae06cc 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.java
@@ -42,7 +42,7 @@ import org.aspectj.weaver.ast.Var;
*/
public class WithinCodeAnnotationPointcut extends NameBindingPointcut {
- ExactAnnotationTypePattern annotationTypePattern;
+ private ExactAnnotationTypePattern annotationTypePattern;
private ShadowMunger munger = null; // only set after concretization
private static final Set matchedShadowKinds = new HashSet();
static {
@@ -64,6 +64,10 @@ public class WithinCodeAnnotationPointcut extends NameBindingPointcut {
this.munger = munger;
}
+ public ExactAnnotationTypePattern getAnnotationTypePattern() {
+ return annotationTypePattern;
+ }
+
public Set couldMatchKinds() {
return matchedShadowKinds;
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java b/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java
index 3a24fce12..142c97825 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java
@@ -33,13 +33,17 @@ import org.aspectj.weaver.ast.Literal;
import org.aspectj.weaver.ast.Test;
public class WithinPointcut extends Pointcut {
- TypePattern typePattern;
+ private TypePattern typePattern;
public WithinPointcut(TypePattern type) {
this.typePattern = type;
this.pointcutKind = WITHIN;
}
-
+
+ public TypePattern getTypePattern() {
+ return typePattern;
+ }
+
private FuzzyBoolean isWithinType(ResolvedTypeX type) {
while (type != null) {
if (typePattern.matchesStatically(type)) {
diff --git a/weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java b/weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java
index 5aed14d77..04d0230b9 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java
@@ -31,7 +31,7 @@ import org.aspectj.weaver.ast.Literal;
import org.aspectj.weaver.ast.Test;
public class WithincodePointcut extends Pointcut {
- SignaturePattern signature;
+ private SignaturePattern signature;
private static final Set matchedShadowKinds = new HashSet();
static {
matchedShadowKinds.addAll(Shadow.ALL_SHADOW_KINDS);
@@ -48,7 +48,11 @@ public class WithincodePointcut extends Pointcut {
this.signature = signature;
this.pointcutKind = WITHINCODE;
}
-
+
+ public SignaturePattern getSignature() {
+ return signature;
+ }
+
public Set couldMatchKinds() {
return matchedShadowKinds;
}
diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/ParserTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/ParserTestCase.java
index c800427d0..3ca01ffc0 100644
--- a/weaver/testsrc/org/aspectj/weaver/patterns/ParserTestCase.java
+++ b/weaver/testsrc/org/aspectj/weaver/patterns/ParserTestCase.java
@@ -51,7 +51,7 @@ public class ParserTestCase extends TestCase {
KindedPointcut p = (KindedPointcut) parser.parsePointcut();
//System.out.println(p);
assertEquals(p.kind, BcelShadow.MethodExecution);
- assertTrue(p.signature.getName().matches("foobar"));
+ assertTrue(p.getSignature().getName().matches("foobar"));
try {
@@ -69,7 +69,7 @@ public class ParserTestCase extends TestCase {
p.resolveBindings(makeSimpleScope(),new Bindings(3));
assertEquals("execution(@p.SimpleAnnotation void Hello.*(..))",p.toString());
assertEquals(p.kind, Shadow.MethodExecution);
- assertTrue(p.signature.getName().matches("foobar"));
+ assertTrue(p.getSignature().getName().matches("foobar"));
}
// note... toString on a pointcut is a very quick and easy way to test a successful parse
diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/VisitorTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/VisitorTestCase.java
index f7b90f1a5..b3a2a73bf 100644
--- a/weaver/testsrc/org/aspectj/weaver/patterns/VisitorTestCase.java
+++ b/weaver/testsrc/org/aspectj/weaver/patterns/VisitorTestCase.java
@@ -43,41 +43,33 @@ public class VisitorTestCase extends TestCase {
}
}
- public void testMock() {
- //empty so that JUnit does not complain about no test cases in there - this one beeing already in the suite
+ public void testPointcuts() {
+ if (pointcuts.isEmpty()) {
+ fail("Empty pointcuts file!");
+ }
+ for (Iterator iterator = pointcuts.iterator(); iterator.hasNext();) {
+ String pointcut = (String) iterator.next();
+ try {
+ PointcutVisitor.DumpPointcutVisitor.check(pointcut);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ fail("Failed on '"+pointcut+"': " +t.toString());
+ }
+ }
}
- public void testTemp() {
- Pointcut.fromString("call(* *(int, Integer...))");
+ public void testTypePatterns() {
+ if (typePatterns.isEmpty()) {
+ fail("Empty typePatterns file!");
+ }
+ for (Iterator iterator = typePatterns.iterator(); iterator.hasNext();) {
+ String tp = (String) iterator.next();
+ try {
+ TypePattern p = new PatternParser(tp).parseTypePattern();
+ PointcutVisitor.DumpPointcutVisitor.check(p, true);
+ } catch (Throwable t) {
+ fail("Failed on '"+tp+"': " +t.toString());
+ }
+ }
}
-
-// public void testPointcuts() {
-// if (pointcuts.isEmpty()) {
-// fail("Empty pointcuts file!");
-// }
-// for (Iterator iterator = pointcuts.iterator(); iterator.hasNext();) {
-// String pointcut = (String) iterator.next();
-// try {
-// PointcutVisitor.DumpPointcutVisitor.check(pointcut);
-// } catch (Throwable t) {
-// t.printStackTrace();
-// fail("Failed on '"+pointcut+"': " +t.toString());
-// }
-// }
-// }
-//
-// public void testTypePatterns() {
-// if (typePatterns.isEmpty()) {
-// fail("Empty typePatterns file!");
-// }
-// for (Iterator iterator = typePatterns.iterator(); iterator.hasNext();) {
-// String tp = (String) iterator.next();
-// try {
-// TypePattern p = new PatternParser(tp).parseTypePattern();
-// PointcutVisitor.DumpPointcutVisitor.check(p, true);
-// } catch (Throwable t) {
-// fail("Failed on '"+tp+"': " +t.toString());
-// }
-// }
-// }
}