summaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoraclement <aclement>2008-05-30 17:22:19 +0000
committeraclement <aclement>2008-05-30 17:22:19 +0000
commit0cc91be69e45ff915bc1c5cfbad473fba6be74f1 (patch)
tree7180b64dadeef6aea9daf1eeb6814cc487382ac8 /weaver
parent6065757aea69aeee273f42e161ddf7483e3d597e (diff)
downloadaspectj-0cc91be69e45ff915bc1c5cfbad473fba6be74f1.tar.gz
aspectj-0cc91be69e45ff915bc1c5cfbad473fba6be74f1.zip
231396: factored out wildcard related stuff from UnresolvedType into here
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/WildcardedUnresolvedType.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/weaver/src/org/aspectj/weaver/WildcardedUnresolvedType.java b/weaver/src/org/aspectj/weaver/WildcardedUnresolvedType.java
new file mode 100644
index 000000000..aef062489
--- /dev/null
+++ b/weaver/src/org/aspectj/weaver/WildcardedUnresolvedType.java
@@ -0,0 +1,69 @@
+/* *******************************************************************
+ * Copyright (c) 2008 Contributors
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andy Clement initial implementation
+ * ******************************************************************/
+package org.aspectj.weaver;
+
+/**
+ * Represents a wildcarded bound for a generic type, this can be unbounded '?' or bounded via extends '? extends Foo' or
+ * super '? super Foo'. The signature for a ? is in fact "*" and the erasure signature is the upper bound which defaults
+ * to java.lang.Object if nothing is specified. On resolution, this becomes a BoundedReferenceType
+ *
+ * @author Andy Clement
+ */
+public class WildcardedUnresolvedType extends UnresolvedType implements Unresolved {
+
+ // TODO does not cope with extra bounds '? extends A & B & C'
+
+ public static final int UNBOUND = 0;
+
+ public static final int EXTENDS = 1;
+
+ public static final int SUPER = 2;
+
+ public static final WildcardedUnresolvedType QUESTIONMARK = new WildcardedUnresolvedType("*", UnresolvedType.OBJECT, null);
+
+ private int boundKind = UNBOUND; // UNBOUND, EXTENDS, SUPER
+
+ private UnresolvedType lowerBound;
+
+ private UnresolvedType upperBound;
+
+ public WildcardedUnresolvedType(String signature, UnresolvedType upperBound, UnresolvedType lowerBound) {
+ super(signature, (upperBound == null ? UnresolvedType.OBJECT.signature : upperBound.signatureErasure));
+ this.typeKind = TypeKind.WILDCARD;
+ this.upperBound = upperBound;
+ this.lowerBound = lowerBound;
+ if (signature.charAt(0) == '-') boundKind = SUPER;
+ if (signature.charAt(0) == '+') boundKind = EXTENDS;
+ }
+
+ public UnresolvedType getUpperBound() {
+ return upperBound;
+ }
+
+ public UnresolvedType getLowerBound() {
+ return lowerBound;
+ }
+
+ public boolean isExtends() {
+ return boundKind == EXTENDS;
+ }
+
+ public boolean isSuper() {
+ return boundKind == SUPER;
+ }
+
+ public boolean isUnbound() {
+ return boundKind == UNBOUND;
+ }
+
+
+}