diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index bf68e18d2f3d..98d8894c7034 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -427,7 +427,12 @@ public class GenerateMembersUtil { private static PsiType substituteType(final PsiSubstitutor substitutor, final PsiType type) { final PsiType psiType = substitutor.substitute(type); - if (psiType != null) return psiType; + if (psiType != null) { + final PsiType deepComponentType = psiType.getDeepComponentType(); + if (!(deepComponentType instanceof PsiCapturedWildcardType || deepComponentType instanceof PsiWildcardType)){ + return psiType; + } + } return TypeConversionUtil.erasure(type); } diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterErasureWildcard.java b/java/java-tests/testData/codeInsight/overrideImplement/afterErasureWildcard.java new file mode 100644 index 000000000000..4c7590955daa --- /dev/null +++ b/java/java-tests/testData/codeInsight/overrideImplement/afterErasureWildcard.java @@ -0,0 +1,9 @@ +interface Generic { + T foo(); +} + +class II implements Generic { + public Object foo() { + return null; //To change body of implemented methods use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeErasureWildcard.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeErasureWildcard.java new file mode 100644 index 000000000000..9c2cfbc37a34 --- /dev/null +++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeErasureWildcard.java @@ -0,0 +1,7 @@ +interface Generic { + T foo(); +} + +class II implements Generic { + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplementTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplementTest.java index 6de5002321a7..0e8813f19043 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplementTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplementTest.java @@ -61,6 +61,7 @@ public class OverrideImplementTest extends LightCodeInsightTestCase { public void testClone() { doTest(false); } public void testOnTheLineWithExistingExpression() { doTest(false); } public void testSimplifyObjectWildcard() { doTest(false); } + public void testErasureWildcard() { doTest(false); } public void testImplementExtensionMethods() { doTest8(false, true); } public void testDoNotImplementExtensionMethods() { doTest8(false, true); }