From 67daae0c20ca5e9ac64e7e430d2b4b697c17554b Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 30 May 2014 20:12:09 +0400 Subject: [PATCH] leave capture during bound composition of unbounded wildcards (IDEA-125423) --- .../com/intellij/psi/impl/PsiSubstitutorImpl.java | 12 +++--------- .../genericsHighlighting/IDEA125423.java | 15 +++++++++++++++ .../daemon/GenericsHighlightingTest.java | 1 + 3 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125423.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java index 994bc1ef0976..ea34686ec8af 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java @@ -158,16 +158,10 @@ public class PsiSubstitutorImpl implements PsiSubstitutor { } if (newBound instanceof PsiCapturedWildcardType) { final PsiWildcardType wildcard = ((PsiCapturedWildcardType)newBound).getWildcard(); - if (wildcardType.isExtends() != wildcard.isExtends()) { - if (wildcard.isBounded()) { - return wildcardType.isExtends() ? PsiWildcardType.createExtends(wildcardType.getManager(), newBound) - : PsiWildcardType.createSuper(wildcardType.getManager(), newBound); - } - else { - return newBound; - } + if (wildcardType.isExtends() != wildcard.isExtends() && wildcard.isBounded()) { + return wildcardType.isExtends() ? PsiWildcardType.createExtends(wildcardType.getManager(), newBound) + : PsiWildcardType.createSuper(wildcardType.getManager(), newBound); } - if (!wildcard.isBounded()) return PsiWildcardType.createUnbounded(wildcardType.getManager()); return newBound; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125423.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125423.java new file mode 100644 index 000000000000..d2515eef82eb --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125423.java @@ -0,0 +1,15 @@ +class FooBar { + void foo(final FooBar fooBar){ + fooBar.supertype(Iterable.class); + } + + void foo1(final FooBar fooBar){ + fooBar.supertype(Iterable.class); + } + + void foo2(final FooBar fooBar){ + fooBar.supertype(Iterable.class); + } + + void supertype(Class superclass) {} +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index d2d4c2b3226c..7c255e49d193 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -355,6 +355,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA24479() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } public void testIDEA118536() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } public void testIDEA125744() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } + public void testIDEA125423() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } public void testJavaUtilCollections_NoVerify() throws Exception { PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));