diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java index c557381d8517..1683e9b837ae 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java @@ -52,8 +52,11 @@ public class HighlightNamesUtil { return highlightMethodName(method, elementToHighlight, elementToHighlight.getTextRange(), colorsScheme, isDeclaration); } + /** + * @param methodOrClass method to highlight; class is passed instead of implicit constructor + */ @Nullable - static HighlightInfo highlightMethodName(@NotNull PsiMethod method, + static HighlightInfo highlightMethodName(@NotNull PsiMember methodOrClass, @NotNull PsiElement elementToHighlight, @NotNull TextRange range, @NotNull TextAttributesScheme colorsScheme, @@ -62,7 +65,7 @@ public class HighlightNamesUtil { if (!isDeclaration) { if (isCalledOnThis(elementToHighlight)) { - final PsiClass containingClass = method.getContainingClass(); + final PsiClass containingClass = methodOrClass instanceof PsiMethod ? methodOrClass.getContainingClass() : null; PsiClass enclosingClass = containingClass == null ? null : PsiTreeUtil.getParentOfType(elementToHighlight, PsiClass.class); while (enclosingClass != null) { isInherited = enclosingClass.isInheritor(containingClass, true); @@ -72,9 +75,11 @@ public class HighlightNamesUtil { } } - HighlightInfoType type = getMethodNameHighlightType(method, isDeclaration, isInherited); + LOG.assertTrue(methodOrClass instanceof PsiMethod || !isDeclaration); + HighlightInfoType type = methodOrClass instanceof PsiMethod ? getMethodNameHighlightType((PsiMethod)methodOrClass, isDeclaration, isInherited) + : JavaHighlightInfoTypes.CONSTRUCTOR_CALL; if (type != null) { - TextAttributes attributes = mergeWithScopeAttributes(method, type, colorsScheme); + TextAttributes attributes = mergeWithScopeAttributes(methodOrClass, type, colorsScheme); HighlightInfo.Builder builder = HighlightInfo.newHighlightInfo(type).range(range); if (attributes != null) { builder.textAttributes(attributes); diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 673598bde8fc..1f49302a6819 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -830,17 +830,13 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh else if (parent instanceof PsiConstructorCall) { try { PsiMethod method = ((PsiConstructorCall)parent).resolveConstructor(); - if (method == null) { - if (resolved instanceof PsiClass) { - myHolder.add(HighlightNamesUtil.highlightClassName((PsiClass)resolved, element, colorsScheme)); - } - } - else { + PsiMember methodOrClass = method != null ? method : resolved instanceof PsiClass ? (PsiClass)resolved : null; + if (methodOrClass != null) { final PsiElement referenceNameElement = element.getReferenceNameElement(); if(referenceNameElement != null) { // exclude type parameters from the highlighted text range TextRange range = new TextRange(element.getTextRange().getStartOffset(), referenceNameElement.getTextRange().getEndOffset()); - myHolder.add(HighlightNamesUtil.highlightMethodName(method, referenceNameElement, range, colorsScheme, false)); + myHolder.add(HighlightNamesUtil.highlightMethodName(methodOrClass, referenceNameElement, range, colorsScheme, false)); } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java index b40bf74cc456..7678e0b333d2 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java @@ -47,8 +47,7 @@ class a { class NoCtrClass { { - // default constructor call looks like class - new NoCtrClass(); + new NoCtrClass(); } void ff(int param) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/Shared.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/Shared.java index bc7353084ef4..a6f8d4d04ac3 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/Shared.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/Shared.java @@ -1,6 +1,6 @@ package x; class Shared { - Shared x = new Shared(); + Shared x = new Shared(); java.util.List list( java.util.Map map diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/X.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/X.java index f15b3c224158..475f7d784ba5 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/X.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/X.java @@ -1,6 +1,6 @@ package x; class X { - X x = new X(); + X x = new X(); java.util.List list( java.util.Map map