diff options
author | Tor Norbye <tnorbye@google.com> | 2014-09-04 20:44:00 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-09-04 20:44:01 +0000 |
commit | fb5a02906f644d044eb0286bf27d413ba0e05216 (patch) | |
tree | bca7d49005d81d10c70bc3f547df041c636b4300 /java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java | |
parent | 9cde0e3c015174898df8b8f3672185941fad4786 (diff) | |
parent | d245f58efbfc26b13b9b9d5e52e6a83a0d76216c (diff) | |
download | idea-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.java | 31 |
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; + } } |