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 311e9f9974d7..12dad50838ed 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -516,14 +516,7 @@ public class GenerateMembersUtil { if (PsiUtil.isRawSubstitutor(owner, substitutor)) { return TypeConversionUtil.erasure(type); } - final PsiType psiType = substitutor.substitute(type); - if (psiType != null) { - final PsiType deepComponentType = psiType.getDeepComponentType(); - if (!(deepComponentType instanceof PsiCapturedWildcardType || deepComponentType instanceof PsiWildcardType)){ - return psiType; - } - } - return TypeConversionUtil.erasure(type); + return GenericsUtil.eliminateWildcards(substitutor.substitute(type), false, true); } public static boolean isChildInRange(PsiElement child, PsiElement first, PsiElement last) { diff --git a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java index d25d3f826c90..3b512436c8ba 100644 --- a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java @@ -460,11 +460,13 @@ public class GenericsUtil { PsiElementFactory factory = JavaPsiFacade.getElementFactory(manager.getProject()); PsiSubstitutor substitutor = factory.createSubstitutor(map); - type = factory.createType(aClass, substitutor); + type = factory.createType(aClass, substitutor).annotate(classType.getAnnotationProvider()); } } else if (type instanceof PsiArrayType) { - return eliminateWildcards(((PsiArrayType)type).getComponentType(), false).createArrayType(); + PsiType component = eliminateWildcards(((PsiArrayType)type).getComponentType(), false); + PsiType newArray = type instanceof PsiEllipsisType ? new PsiEllipsisType(component) : new PsiArrayType(component); + return newArray.annotate(type.getAnnotationProvider()); } else if (type instanceof PsiWildcardType) { final PsiType bound = ((PsiWildcardType)type).getBound(); diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InCollectionForEach-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InCollectionForEach-out.java new file mode 100644 index 000000000000..889c7b49d407 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/InCollectionForEach-out.java @@ -0,0 +1,5 @@ +class Test88 { + void foo(java.util.Collection foo) { + foo.forEach(s -> ); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InCollectionForEach.java b/java/java-tests/testData/codeInsight/completion/smartType/InCollectionForEach.java new file mode 100644 index 000000000000..4ab21b34316f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/InCollectionForEach.java @@ -0,0 +1,5 @@ +class Test88 { + void foo(java.util.Collection foo) { + foo.forEach(s); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartType18CompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartType18CompletionTest.java index 5032d91e5a1e..72c50950eed5 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartType18CompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartType18CompletionTest.java @@ -83,6 +83,8 @@ public class SmartType18CompletionTest extends LightFixtureCompletionTestCase { doTest(); } + public void testInCollectionForEach() { doTest();} + public void testConstructorRef() { doTest(false); }