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 ebe896f1d844..29cc8832feb7 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 @@ -117,22 +117,14 @@ public class PsiSubstitutorImpl implements PsiSubstitutor { if (glb instanceof PsiWildcardType) { return glb; } - if (glb != null ) { - return glb instanceof PsiCapturedWildcardType ? ((PsiCapturedWildcardType)glb).getWildcard() - : PsiWildcardType.createExtends(typeParameter.getManager(), glb); + if (glb instanceof PsiCapturedWildcardType) { + PsiWildcardType wildcard = ((PsiCapturedWildcardType)glb).getWildcard(); + if (!wildcard.isSuper()) return wildcard; } - /* - if (glb instanceof PsiCapturedWildcardType) { - PsiWildcardType wildcard = ((PsiCapturedWildcardType)glb).getWildcard(); - if (!wildcard.isSuper()) return wildcard; - } - - if (glb != null ) { - return PsiWildcardType.createExtends(typeParameter.getManager(), glb); - } - */ - + if (glb != null) { + return PsiWildcardType.createExtends(typeParameter.getManager(), glb); + } } return substituted; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/BoundsPromotionWithCapturedWildcards.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/BoundsPromotionWithCapturedWildcards.java new file mode 100644 index 000000000000..018b0bcbcd73 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/BoundsPromotionWithCapturedWildcards.java @@ -0,0 +1,13 @@ +import a.Provider; + +public abstract class Test { + private void configure(Provider provider, + Test sBind, + Test eBind) { + sBind.toProvider(provider); + eBind.toProvider(provider) + } + + abstract void toProvider(Provider var1); + abstract void toProvider(b.Provider var1); +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingFixtureTest.java index ec4dac578f33..cae71202d460 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingFixtureTest.java @@ -47,6 +47,14 @@ public class LightAdvHighlightingFixtureTest extends LightCodeInsightFixtureTest assertNull(ReferencesSearch.search(aClass).findFirst()); } + public void testBoundsPromotionWithCapturedWildcards() throws Exception { + myFixture.addClass("package a; public interface Provider {}"); + myFixture.addClass("package b; public interface Provider {}"); + + myFixture.configureByFile(getTestName(false) + ".java"); + myFixture.checkHighlighting(); + } + @Override protected String getBasePath() { return JavaTestUtil.getRelativeJavaTestDataPath() + "/codeInsight/daemonCodeAnalyzer/advFixture";