diff options
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()); -// } -// } -// } } |