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