diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
index d713431693a4..4391a775bf52 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
@@ -415,6 +415,16 @@ public class HighlightUtil extends HighlightUtilBase {
return highlightInfo;
}
+ static HighlightInfo checkLegalVarReference(PsiJavaCodeReferenceElement ref, @NotNull PsiClass resolved) {
+ if (PsiKeyword.VAR.equals(resolved.getName()) && PsiUtil.getLanguageLevel(ref).isAtLeast(LanguageLevel.JDK_X)) {
+ return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
+ .descriptionAndTooltip("Illegal reference to restricted type 'var'")
+ .range(ObjectUtils.notNull(ref.getReferenceNameElement(), ref))
+ .create();
+ }
+ return null;
+ }
+
static HighlightInfo checkVarTypeApplicability(@NotNull PsiVariable variable) {
PsiTypeElement typeElement = variable.getTypeElement();
if (typeElement != null && typeElement.isInferredType()) {
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 efa2be8f485a..13c4a529e5d0 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
@@ -1191,6 +1191,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
}
if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkPackageAndClassConflict(ref, myFile));
+ if (!myHolder.hasErrorResults() && resolved instanceof PsiClass) myHolder.add(HighlightUtil.checkLegalVarReference(ref, (PsiClass)resolved));
return result;
}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/VarClassNameConflicts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/VarClassNameConflicts.java
index 900adbdefbd9..feb95207d044 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/VarClassNameConflicts.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/VarClassNameConflicts.java
@@ -2,4 +2,8 @@ class Main {
class var {}
<var extends String> void foo() {}
+
+ class Usage {
+ var field = new var();
+ }
}
\ No newline at end of file