From 6fe44eee738b7fadc34c6c7b8eb18506a7135b58 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 30 Nov 2012 12:10:29 +0100 Subject: [PATCH] erasure wildcards when generate overriding (cherry picked from commit 58ced7b4e6be23577a1427c93a7b9c58a4edb5f3) --- .../codeInsight/generation/GenerateMembersUtil.java | 7 ++++++- .../overrideImplement/afterErasureWildcard.java | 9 +++++++++ .../overrideImplement/beforeErasureWildcard.java | 7 +++++++ .../com/intellij/codeInsight/OverrideImplementTest.java | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/overrideImplement/afterErasureWildcard.java create mode 100644 java/java-tests/testData/codeInsight/overrideImplement/beforeErasureWildcard.java 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); }