diff --git a/java/java-impl/src/com/intellij/codeInsight/template/macro/GuessElementTypeMacro.java b/java/java-impl/src/com/intellij/codeInsight/template/macro/GuessElementTypeMacro.java index 28783299206d..9d1fcc6b2e05 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/macro/GuessElementTypeMacro.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/macro/GuessElementTypeMacro.java @@ -23,9 +23,9 @@ import com.intellij.codeInsight.template.*; import com.intellij.codeInsight.template.impl.JavaTemplateUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.GenericsUtil; import com.intellij.psi.PsiExpression; import com.intellij.psi.PsiType; -import com.intellij.psi.PsiWildcardType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -79,14 +79,7 @@ public class GuessElementTypeMacro extends Macro { if (expr == null) return null; PsiType[] types = GuessManager.getInstance(project).guessContainerElementType(expr, new TextRange(context.getTemplateStartOffset(), context.getTemplateEndOffset())); for (int i = 0; i < types.length; i++) { - PsiType type = types[i]; - if (type instanceof PsiWildcardType) { - if (((PsiWildcardType)type).isExtends()) { - types[i] = ((PsiWildcardType)type).getBound(); - } else { - types[i] = PsiType.getJavaLangObject(expr.getManager(), expr.getResolveScope()); - } - } + types[i] = GenericsUtil.eliminateWildcards(types[i], false, true); } return types; } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/template/LiveTemplateTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/template/LiveTemplateTest.groovy index 97a1b340f60f..5a17e7dd0123 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/template/LiveTemplateTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/template/LiveTemplateTest.groovy @@ -1461,4 +1461,19 @@ class Foo { } """ } + + public void "test iterate over list with wildcard component type"() { + myFixture.configureByText 'a.java', '''class C {{ +java.util.List list; + +}}''' + myFixture.type('itli\t') + myFixture.checkResult '''class C {{ +java.util.List list; + for (int i = 0; i < list.size(); i++) { + Integer integer = list.get(i); + + } +}}''' + } } \ No newline at end of file