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 72dfedbbf09e..936be7f438b7 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 @@ -596,6 +596,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh @Override public void visitImportStaticStatement(PsiImportStaticStatement statement) { myHolder.add(checkFeature(statement, Feature.STATIC_IMPORTS)); + if (!myHolder.hasErrorResults()) myHolder.add(ImportsHighlightUtil.checkStaticOnDemandImportResolvesToClass(statement)); } @Override diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ImportsHighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ImportsHighlightUtil.java new file mode 100644 index 000000000000..0f01b0b5a978 --- /dev/null +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ImportsHighlightUtil.java @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.daemon.impl.analysis; + +import com.intellij.codeInsight.daemon.impl.HighlightInfo; +import com.intellij.codeInsight.daemon.impl.HighlightInfoType; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiImportStaticStatement; +import com.intellij.psi.PsiJavaCodeReferenceElement; +import com.intellij.util.ObjectUtils; + +public class ImportsHighlightUtil { + static HighlightInfo checkStaticOnDemandImportResolvesToClass(PsiImportStaticStatement statement) { + if (statement.isOnDemand() && statement.resolveTargetClass() == null) { + PsiJavaCodeReferenceElement ref = statement.getImportReference(); + if (ref != null) { + PsiElement resolve = ref.resolve(); + if (resolve != null) { + return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR) + .range(ObjectUtils.notNull(ref.getReferenceNameElement(), ref)) + .descriptionAndTooltip("Class " + ref.getCanonicalText() + " not found").create(); + } + } + } + return null; + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/StaticOnDemandImportResolvesToClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/StaticOnDemandImportResolvesToClass.java new file mode 100644 index 000000000000..4598482ef5d3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/StaticOnDemandImportResolvesToClass.java @@ -0,0 +1,3 @@ +import static java.io.*; + +class Main { } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java index eac9f14cb9d4..6d34bef3a548 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java @@ -90,4 +90,8 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase { public void testSpeculateOnUnhandledExceptionsOverResolvedConstructorOnly() throws Exception { doTest(false, false); } + + public void testStaticOnDemandImportResolvesToClass() throws Exception { + doTest(false, false); + } }