diff options
author | acolyer <acolyer> | 2005-08-23 08:46:43 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-08-23 08:46:43 +0000 |
commit | 2ac1f6da9d3308e07f45e33761d76d1e370ccbf5 (patch) | |
tree | faed4a76c5f52f81e71fc03c8b430c91c1387b25 /weaver | |
parent | a0bd497a41bc25791db64c4218bbbfb1810072b2 (diff) | |
download | aspectj-2ac1f6da9d3308e07f45e33761d76d1e370ccbf5.tar.gz aspectj-2ac1f6da9d3308e07f45e33761d76d1e370ccbf5.zip |
support for -XhasMember
Diffstat (limited to 'weaver')
5 files changed, 31 insertions, 4 deletions
diff --git a/weaver/src/org/aspectj/weaver/WeaverMessages.java b/weaver/src/org/aspectj/weaver/WeaverMessages.java index 4bee39a7d..689e2c7d8 100644 --- a/weaver/src/org/aspectj/weaver/WeaverMessages.java +++ b/weaver/src/org/aspectj/weaver/WeaverMessages.java @@ -145,6 +145,8 @@ public class WeaverMessages { public static final String CALL_DOESNT_SUPPORT_PARAMETERIZED_DECLARING_TYPES="noParameterizedDeclaringTypesInCall"; public static final String CANT_REFERENCE_POINTCUT_IN_RAW_TYPE="noRawTypePointcutReferences"; + public static final String HAS_MEMBER_NOT_ENABLED="hasMemberNotEnabled"; + public static String format(String key) { return bundle.getString(key); } diff --git a/weaver/src/org/aspectj/weaver/World.java b/weaver/src/org/aspectj/weaver/World.java index 50f0469cc..1eb94be61 100644 --- a/weaver/src/org/aspectj/weaver/World.java +++ b/weaver/src/org/aspectj/weaver/World.java @@ -66,6 +66,9 @@ public abstract class World implements Dump.INode { /** XlazyTjp option setting passed down to weaver */ private boolean XlazyTjp; + /** XhasMember option setting passed down to weaver */ + private boolean XhasMember = false; + /** When behaving in a Java 5 way autoboxing is considered */ private boolean behaveInJava5Way = false; @@ -573,6 +576,14 @@ public abstract class World implements Dump.INode { public void setXlazyTjp(boolean b) { XlazyTjp = b; } + + public boolean isHasMemberSupportEnabled() { + return XhasMember; + } + + public void setXHasMemberSupportEnabled(boolean b) { + XhasMember = b; + } public void setBehaveInJava5Way(boolean b) { behaveInJava5Way = b; diff --git a/weaver/src/org/aspectj/weaver/patterns/HasMemberTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/HasMemberTypePattern.java index ef1d9274d..b756a6008 100644 --- a/weaver/src/org/aspectj/weaver/patterns/HasMemberTypePattern.java +++ b/weaver/src/org/aspectj/weaver/patterns/HasMemberTypePattern.java @@ -17,12 +17,16 @@ import java.lang.reflect.Modifier; import java.util.Iterator; import java.util.List; import java.util.Map; + +import org.aspectj.bridge.IMessage; +import org.aspectj.bridge.MessageUtil; import org.aspectj.util.FuzzyBoolean; import org.aspectj.weaver.ConcreteTypeMunger; import org.aspectj.weaver.ISourceContext; import org.aspectj.weaver.Member; import org.aspectj.weaver.ResolvedType; import org.aspectj.weaver.VersionedDataInputStream; +import org.aspectj.weaver.WeaverMessages; import org.aspectj.weaver.World; /** @@ -109,6 +113,15 @@ public class HasMemberTypePattern extends TypePattern { return ret; } + public TypePattern resolveBindings(IScope scope, Bindings bindings, boolean allowBinding, boolean requireExactType) { + // check that hasmember type patterns are allowed! + if (!scope.getWorld().isHasMemberSupportEnabled()) { + String msg = WeaverMessages.format(WeaverMessages.HAS_MEMBER_NOT_ENABLED,this.toString()); + scope.message(IMessage.ERROR, this, msg); + } + return this; + } + public boolean equals(Object obj) { if (!(obj instanceof HasMemberTypePattern)) return false; if (this == obj) return true; diff --git a/weaver/src/org/aspectj/weaver/patterns/PatternParser.java b/weaver/src/org/aspectj/weaver/patterns/PatternParser.java index 63dcd0095..8bd7ccb4b 100644 --- a/weaver/src/org/aspectj/weaver/patterns/PatternParser.java +++ b/weaver/src/org/aspectj/weaver/patterns/PatternParser.java @@ -29,7 +29,6 @@ public class PatternParser { private ITokenSource tokenSource; private ISourceContext sourceContext; - private static final boolean HASMEMBER_PATTERNS_ENABLED = false; /** not thread-safe, but this class is not intended to be... */ private boolean allowHasTypePatterns = false; @@ -158,7 +157,7 @@ public class PatternParser { } public DeclareAnnotation parseDeclareAtType() { - if (HASMEMBER_PATTERNS_ENABLED) allowHasTypePatterns = true; + allowHasTypePatterns = true; TypePattern p = parseTypePattern(); allowHasTypePatterns = false; return new DeclareAnnotation(DeclareAnnotation.AT_TYPE,p); @@ -196,7 +195,7 @@ public class PatternParser { * String[] typeParameters = maybeParseSimpleTypeVariableList(); */ eat(":"); - if (HASMEMBER_PATTERNS_ENABLED) allowHasTypePatterns = true; + allowHasTypePatterns = true; TypePattern p = parseTypePattern(false); allowHasTypePatterns = false; IToken t = tokenSource.next(); diff --git a/weaver/src/org/aspectj/weaver/weaver-messages.properties b/weaver/src/org/aspectj/weaver/weaver-messages.properties index af95e1e38..7d8ab738e 100644 --- a/weaver/src/org/aspectj/weaver/weaver-messages.properties +++ b/weaver/src/org/aspectj/weaver/weaver-messages.properties @@ -154,4 +154,6 @@ noGenericThrowables=invalid throws pattern: a generic class may not be a direct noParameterizedDeclaringTypesWithinCode=can't use parameterized type patterns for the declaring type of a withincode pointcut expression (use the raw type instead) noParameterizedDeclaringTypesInExecution=can't use parameterized type patterns for the declaring type of an execution pointcut expression (use the raw type instead) noParameterizedDeclaringTypesInCall=can't use parameterized type patterns for the declaring type of a call pointcut expression (use the raw type instead) -noRawTypePointcutReferences=cannot use a raw type reference to refer to a pointcut in a generic type (use a parameterized reference instead)
\ No newline at end of file +noRawTypePointcutReferences=cannot use a raw type reference to refer to a pointcut in a generic type (use a parameterized reference instead) + +hasMemberNotEnabled=the type pattern {0} can only be used when the -XhasMember option is set
\ No newline at end of file |