summaryrefslogtreecommitdiff
path: root/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2014-09-04 20:44:00 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-09-04 20:44:01 +0000
commitfb5a02906f644d044eb0286bf27d413ba0e05216 (patch)
treebca7d49005d81d10c70bc3f547df041c636b4300 /java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java
parent9cde0e3c015174898df8b8f3672185941fad4786 (diff)
parentd245f58efbfc26b13b9b9d5e52e6a83a0d76216c (diff)
downloadidea-fb5a02906f644d044eb0286bf27d413ba0e05216.tar.gz
Merge "Merge remote-tracking branch 'aosp/upstream-master' into merge"
Diffstat (limited to 'java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java')
-rw-r--r--java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java31
1 files changed, 29 insertions, 2 deletions
diff --git a/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java b/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java
index 8130b864ad9a..c94709ee164a 100644
--- a/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java
+++ b/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java
@@ -28,6 +28,8 @@ public class PsiCapturedWildcardType extends PsiType.Stub {
@NotNull private final PsiElement myContext;
@Nullable private final PsiTypeParameter myParameter;
+ private PsiType myUpperBound;
+
@NotNull
public static PsiCapturedWildcardType create(@NotNull PsiWildcardType existential, @NotNull PsiElement context) {
return create(existential, context, null);
@@ -40,11 +42,28 @@ public class PsiCapturedWildcardType extends PsiType.Stub {
return new PsiCapturedWildcardType(existential, context, parameter);
}
- private PsiCapturedWildcardType(@NotNull PsiWildcardType existential, @NotNull PsiElement context, @Nullable PsiTypeParameter parameter) {
+ private PsiCapturedWildcardType(@NotNull PsiWildcardType existential,
+ @NotNull PsiElement context,
+ @Nullable PsiTypeParameter parameter) {
super(PsiAnnotation.EMPTY_ARRAY);
myExistential = existential;
myContext = context;
myParameter = parameter;
+ if (parameter != null) {
+ final PsiClassType[] boundTypes = parameter.getExtendsListTypes();
+ if (boundTypes.length > 0) {
+ PsiType result = null;
+ for (PsiType type : boundTypes) {
+ if (result == null) {
+ result = type;
+ }
+ else {
+ result = GenericsUtil.getGreatestLowerBound(result, type);
+ }
+ }
+ myUpperBound = result;
+ }
+ }
}
@Override
@@ -128,10 +147,14 @@ public class PsiCapturedWildcardType extends PsiType.Stub {
return PsiWildcardType.createSuper(myContext.getManager(), ((PsiCapturedWildcardType)bound).getUpperBound());
}
else {
- return PsiType.getJavaLangObject(myContext.getManager(), getResolveScope());
+ return myUpperBound != null ? myUpperBound : PsiType.getJavaLangObject(myContext.getManager(), getResolveScope());
}
}
+ public void setUpperBound(PsiType upperBound) {
+ myUpperBound = upperBound;
+ }
+
@NotNull
public PsiWildcardType getWildcard() {
return myExistential;
@@ -141,4 +164,8 @@ public class PsiCapturedWildcardType extends PsiType.Stub {
public PsiElement getContext() {
return myContext;
}
+
+ public PsiTypeParameter getTypeParameter() {
+ return myParameter;
+ }
}