From ef689b16b1a488aa923b36fc1e905292d2d969fa Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 13 Oct 2017 20:22:57 +0200 Subject: [PATCH] LVTI: warn on references to illegal class var (IDEA-180079) --- .../daemon/impl/analysis/HighlightUtil.java | 10 ++++++++++ .../daemon/impl/analysis/HighlightVisitorImpl.java | 1 + .../advLVTI/VarClassNameConflicts.java | 4 ++++ 3 files changed, 15 insertions(+) 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