summaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-08-23 08:46:43 +0000
committeracolyer <acolyer>2005-08-23 08:46:43 +0000
commit2ac1f6da9d3308e07f45e33761d76d1e370ccbf5 (patch)
treefaed4a76c5f52f81e71fc03c8b430c91c1387b25 /weaver
parenta0bd497a41bc25791db64c4218bbbfb1810072b2 (diff)
downloadaspectj-2ac1f6da9d3308e07f45e33761d76d1e370ccbf5.tar.gz
aspectj-2ac1f6da9d3308e07f45e33761d76d1e370ccbf5.zip
support for -XhasMember
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/WeaverMessages.java2
-rw-r--r--weaver/src/org/aspectj/weaver/World.java11
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/HasMemberTypePattern.java13
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/PatternParser.java5
-rw-r--r--weaver/src/org/aspectj/weaver/weaver-messages.properties4
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