diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaPsiClassReferenceElement.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaPsiClassReferenceElement.java index 62bef3f0c9ad..824a8907f435 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaPsiClassReferenceElement.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaPsiClassReferenceElement.java @@ -142,7 +142,9 @@ public class JavaPsiClassReferenceElement extends LookupItem { } public static void renderClassItem(LookupElementPresentation presentation, LookupItem item, PsiClass psiClass, boolean diamond) { - presentation.setIcon(DefaultLookupItemRenderer.getRawIcon(item, presentation.isReal())); + if (!(psiClass instanceof PsiTypeParameter)) { + presentation.setIcon(DefaultLookupItemRenderer.getRawIcon(item, presentation.isReal())); + } final boolean bold = item.getAttribute(LookupItem.HIGHLIGHTED_ATTR) != null; boolean strikeout = JavaElementLookupRenderer.isToStrikeout(item); diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiFormatUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiFormatUtil.java index 08b8deb0f0e4..3d6f4c7f5be5 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiFormatUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiFormatUtil.java @@ -431,6 +431,20 @@ public class PsiFormatUtil extends PsiFormatUtilBase { } public static String getPackageDisplayName(@NotNull final PsiClass psiClass) { + if (psiClass instanceof PsiTypeParameter) { + PsiTypeParameterListOwner owner = ((PsiTypeParameter)psiClass).getOwner(); + String ownerName = null; + if (owner instanceof PsiClass) { + ownerName = ((PsiClass)owner).getQualifiedName(); + if (ownerName == null) { + ownerName = owner.getName(); + } + } else if (owner instanceof PsiMethod) { + ownerName = owner.getName(); + } + return ownerName == null ? "type parameter" : "type parameter of " + ownerName; + } + @NonNls String packageName = psiClass.getQualifiedName(); packageName = packageName == null || packageName.lastIndexOf('.') <= 0 ? "" : packageName.substring(0, packageName.lastIndexOf('.')); if (packageName.isEmpty()) { diff --git a/java/java-tests/testData/codeInsight/completion/normal/TypeParameterItemPresentation.java b/java/java-tests/testData/codeInsight/completion/normal/TypeParameterItemPresentation.java new file mode 100644 index 000000000000..c56297de58d7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/TypeParameterItemPresentation.java @@ -0,0 +1,5 @@ +public class Foo { + int goo() { + Pa + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 880e7b175c7a..a6ee6b153772 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -85,6 +85,20 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase { public void testSimpleVariable() throws Exception { doTest('\n') } + public void testTypeParameterItemPresentation() { + configure() + LookupElementPresentation presentation = renderElement(myItems[0]) + assert "Param" == presentation.itemText + assert presentation.tailText == " (type parameter of Foo)" + assert !presentation.typeText + assert !presentation.icon + assert !presentation.itemTextBold + + presentation = renderElement(myItems[1]) + assert "Param2" == presentation.itemText + assert presentation.tailText == " (type parameter of goo)" + } + public void testMethodItemPresentation() { configure() LookupElementPresentation presentation = renderElement(myItems[0])