summaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-07-29 11:11:58 +0000
committeracolyer <acolyer>2005-07-29 11:11:58 +0000
commit6ad6a8c009a997d446acd18c048d861535b38a8e (patch)
treefa63d2e0a86c5ae91a8e96758dea56be31a7a943 /weaver
parent65e1b7ce15ceae73abf8cb928e2091d0087334a0 (diff)
downloadaspectj-6ad6a8c009a997d446acd18c048d861535b38a8e.tar.gz
aspectj-6ad6a8c009a997d446acd18c048d861535b38a8e.zip
new messages emitted during pointcut resolution when parameterized type patterns are used in inappropriate places.
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/WeaverMessages.java3
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java19
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java9
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java10
-rw-r--r--weaver/src/org/aspectj/weaver/weaver-messages.properties5
5 files changed, 42 insertions, 4 deletions
diff --git a/weaver/src/org/aspectj/weaver/WeaverMessages.java b/weaver/src/org/aspectj/weaver/WeaverMessages.java
index 076d0bd32..181ef2620 100644
--- a/weaver/src/org/aspectj/weaver/WeaverMessages.java
+++ b/weaver/src/org/aspectj/weaver/WeaverMessages.java
@@ -133,6 +133,9 @@ public class WeaverMessages {
public static final String VIOLATES_TYPE_VARIABLE_BOUNDS = "violatesTypeVariableBounds";
public static final String NO_STATIC_INIT_JPS_FOR_PARAMETERIZED_TYPES = "noStaticInitJPsForParameterizedTypes";
public static final String NOT_A_GENERIC_TYPE="notAGenericType";
+ public static final String WITHIN_PCD_DOESNT_SUPPORT_PARAMETERS="noParameterizedTypePatternInWithin";
+ public static final String THIS_AND_TARGET_DONT_SUPPORT_PARAMETERS="noParameterizedTypesInThisAndTarget";
+ public static final String GET_AND_SET_DONT_SUPPORT_DEC_TYPE_PARAMETERS="noParameterizedTypesInGetAndSet";
public static String format(String key) {
return bundle.getString(key);
diff --git a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java
index cfda6c1bf..22757385f 100644
--- a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java
@@ -302,14 +302,27 @@ public class KindedPointcut extends Pointcut {
}
}
- // only allow parameterized types with extends...
+ // no parameterized types
if (kind == Shadow.StaticInitialization) {
- UnresolvedType exactType = signature.getDeclaringType().getExactType();
- if (exactType.isParameterizedType()) {
+ HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor
+ visitor = new HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor();
+ signature.getDeclaringType().traverse(visitor, null);
+ if (visitor.wellHasItThen/*?*/()) {
scope.message(MessageUtil.error(WeaverMessages.format(WeaverMessages.NO_STATIC_INIT_JPS_FOR_PARAMETERIZED_TYPES),
getSourceLocation()));
}
}
+
+ // no parameterized types in declaring type position
+ if ((kind == Shadow.FieldGet) || (kind == Shadow.FieldSet)) {
+ HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor
+ visitor = new HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor();
+ signature.getDeclaringType().traverse(visitor, null);
+ if (visitor.wellHasItThen/*?*/()) {
+ scope.message(MessageUtil.error(WeaverMessages.format(WeaverMessages.GET_AND_SET_DONT_SUPPORT_DEC_TYPE_PARAMETERS),
+ getSourceLocation()));
+ }
+ }
}
public void resolveBindingsFromRTTI() {
diff --git a/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java
index 88a49660e..6c8c821e7 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ThisOrTargetPointcut.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Set;
import org.aspectj.bridge.IMessage;
+import org.aspectj.bridge.MessageUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.util.FuzzyBoolean;
import org.aspectj.weaver.ISourceContext;
@@ -146,6 +147,14 @@ public class ThisOrTargetPointcut extends NameBindingPointcut {
public void resolveBindings(IScope scope, Bindings bindings) {
type = type.resolveBindings(scope, bindings, true, true);
+ // look for parameterized type patterns which are not supported...
+ HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor
+ visitor = new HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor();
+ type.traverse(visitor, null);
+ if (visitor.wellHasItThen/*?*/()) {
+ scope.message(MessageUtil.error(WeaverMessages.format(WeaverMessages.THIS_AND_TARGET_DONT_SUPPORT_PARAMETERS),
+ getSourceLocation()));
+ }
// ??? handle non-formal
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java b/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java
index 1649fafea..ba0fe8d98 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java
@@ -21,6 +21,7 @@ import java.util.Set;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.bridge.Message;
+import org.aspectj.bridge.MessageUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.util.FuzzyBoolean;
import org.aspectj.weaver.ISourceContext;
@@ -138,6 +139,15 @@ public class WithinPointcut extends Pointcut {
public void resolveBindings(IScope scope, Bindings bindings) {
typePattern = typePattern.resolveBindings(scope, bindings, false, false);
+
+ // look for parameterized type patterns which are not supported...
+ HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor
+ visitor = new HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor();
+ typePattern.traverse(visitor, null);
+ if (visitor.wellHasItThen/*?*/()) {
+ scope.message(MessageUtil.error(WeaverMessages.format(WeaverMessages.WITHIN_PCD_DOESNT_SUPPORT_PARAMETERS),
+ getSourceLocation()));
+ }
}
public void resolveBindingsFromRTTI() {
diff --git a/weaver/src/org/aspectj/weaver/weaver-messages.properties b/weaver/src/org/aspectj/weaver/weaver-messages.properties
index eeb4843ce..ed4ac0b11 100644
--- a/weaver/src/org/aspectj/weaver/weaver-messages.properties
+++ b/weaver/src/org/aspectj/weaver/weaver-messages.properties
@@ -143,4 +143,7 @@ noParameterizedTypePatternInHandler=a parameterized type pattern may not be used
incorrectNumberOfTypeArguments=Type pattern does not match because the wrong number of type parameters are specified: Type {0} requires {1} parameter(s)
violatesTypeVariableBounds=Type {0} does not meet the specification for type parameter {1} ({2}) in generic type {3}
notAGenericType=Type pattern does not match because {0} is not a generic type
-noStaticInitJPsForParameterizedTypes=no static initialization join points for parameterized types, use raw type instead \ No newline at end of file
+noStaticInitJPsForParameterizedTypes=no static initialization join points for parameterized types, use raw type instead
+noParameterizedTypePatternInWithin=parameterized type pattern not supported by 'within', use a raw type pattern instead
+noParameterizedTypesInThisAndTarget=parameterized types not supported for this and target pointcuts (erasure limitation)
+noParameterizedTypesInGetAndSet=can't use parameterized type patterns for the declaring type of a get or set pointcut expression (use the raw type instead) \ No newline at end of file