diff --git a/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java b/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java index e1116894f14f..5f3eee5c6be3 100644 --- a/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java @@ -34,6 +34,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.VisibilityUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -253,8 +254,9 @@ public class PsiDiamondTypeImpl extends PsiDiamondType { PsiTypeParameter[] params, PsiJavaCodeReferenceElement reference) { final StringBuilder buf = new StringBuilder(); - buf.append(constructor != null ? constructor.getModifierList().getText() : containingClass.getModifierList().getText()); - if (buf.length() > 0) { + final String modifier = VisibilityUtil.getVisibilityModifier(constructor != null ? constructor.getModifierList() : containingClass.getModifierList()); + if (!PsiModifier.PACKAGE_LOCAL.equals(modifier)) { + buf.append(modifier); buf.append(" "); } buf.append("static "); @@ -262,8 +264,20 @@ public class PsiDiamondTypeImpl extends PsiDiamondType { buf.append(StringUtil.join(params, new Function() { @Override public String fun(PsiTypeParameter psiTypeParameter) { - final String extendsList = psiTypeParameter.getLanguage().isKindOf(JavaLanguage.INSTANCE) ? psiTypeParameter.getExtendsList().getText() : null; - return psiTypeParameter.getName() + (StringUtil.isEmpty(extendsList) ? "" : " " + extendsList); + String extendsList = ""; + if (psiTypeParameter.getLanguage().isKindOf(JavaLanguage.INSTANCE)) { + final PsiClassType[] extendsListTypes = psiTypeParameter.getExtendsListTypes(); + if (extendsListTypes.length > 0) { + final Function canonicalTypePresentationFun = new Function() { + @Override + public String fun(PsiClassType type) { + return type.getCanonicalText(); + } + }; + extendsList = " extends " + StringUtil.join(extendsListTypes, canonicalTypePresentationFun, "&"); + } + } + return psiTypeParameter.getName() + extendsList; } }, ", ")); buf.append(">"); diff --git a/java/java-tests/testData/codeInsight/clsHighlighting/IDEA127714.java b/java/java-tests/testData/codeInsight/clsHighlighting/IDEA127714.java new file mode 100644 index 000000000000..08713f898f15 --- /dev/null +++ b/java/java-tests/testData/codeInsight/clsHighlighting/IDEA127714.java @@ -0,0 +1,9 @@ +import a.A; + +class IDEA127714 { + { + A strings = new A<>(E.class); + } +} + +enum E {} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/clsHighlighting/libs/IDEA127714.jar b/java/java-tests/testData/codeInsight/clsHighlighting/libs/IDEA127714.jar new file mode 100644 index 000000000000..915d3a074810 Binary files /dev/null and b/java/java-tests/testData/codeInsight/clsHighlighting/libs/IDEA127714.jar differ diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics18HighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics18HighlightingTest.java index ae0ec20ab4d2..8383550b3e5c 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics18HighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics18HighlightingTest.java @@ -20,6 +20,8 @@ import com.intellij.pom.java.LanguageLevel; public class ClsGenerics18HighlightingTest extends ClsGenericsHighlightingTest { public void testIDEA121866() { doTest(); } + public void testIDEA127714() { doTest(); } + @Override protected LanguageLevel getLanguageLevel() { return LanguageLevel.JDK_1_8;