diff --git a/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java b/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java index a10f13120ef4..804637a35db8 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java @@ -343,6 +343,12 @@ public class InlineUtil { PsiElement resolved = resolveResult.getElement(); if (resolved instanceof PsiTypeParameter) { PsiType newType = resolveResult.getSubstitutor().putAll(substitutor).substitute((PsiTypeParameter)resolved); + if (newType instanceof PsiCapturedWildcardType) { + newType = ((PsiCapturedWildcardType)newType).getUpperBound(); + } + if (newType instanceof PsiWildcardType) { + newType = ((PsiWildcardType)newType).getBound(); + } if (newType == null) { newType = PsiType.getJavaLangObject(resolved.getManager(), resolved.getResolveScope()); } diff --git a/java/java-tests/testData/refactoring/inlineMethod/SubstitutionForWildcards.java b/java/java-tests/testData/refactoring/inlineMethod/SubstitutionForWildcards.java new file mode 100644 index 000000000000..7c5960100438 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/SubstitutionForWildcards.java @@ -0,0 +1,16 @@ +interface Pair { + A get(); +} + +class B { + void f(Pair p) { + V v = p.get(); + } + + { + Pair p = null; + f(p); + } +} + + diff --git a/java/java-tests/testData/refactoring/inlineMethod/SubstitutionForWildcards.java.after b/java/java-tests/testData/refactoring/inlineMethod/SubstitutionForWildcards.java.after new file mode 100644 index 000000000000..1bbd347e20c6 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/SubstitutionForWildcards.java.after @@ -0,0 +1,13 @@ +interface Pair { + A get(); +} + +class B { + + { + Pair p = null; + String v = p.get(); + } +} + + diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java index 59081bafecaa..032838650c89 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java @@ -185,6 +185,10 @@ public class InlineMethodTest extends LightRefactoringTestCase { doTest(); } + public void testSubstitutionForWildcards() throws Exception { + doTest(); + } + public void testParamNameConflictsWithLocalVar() throws Exception { doTest(); }