From 2787a3a5f4cffe36803e810b4622dcac9c88d3f5 Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 23 Aug 2011 20:33:57 +0200 Subject: [PATCH] add warning on switch by inaccessible enums (IDEA-65961 ) --- .../daemon/impl/analysis/HighlightUtil.java | 8 +++++++ .../SwitchByInaccessibleEnum.java | 23 +++++++++++++++++++ .../daemon/LightAdvHighlightingJdk7Test.java | 4 ++++ 3 files changed, 35 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByInaccessibleEnum.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 420ec4aecd16..bdccec573799 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -47,9 +47,11 @@ import com.intellij.psi.scope.processor.VariablesNotProcessor; import com.intellij.psi.scope.util.PsiScopesUtil; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.*; +import com.intellij.refactoring.util.RefactoringUIUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.VisibilityUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.xml.util.XmlStringUtil; import gnu.trove.THashMap; @@ -1068,6 +1070,12 @@ public class HighlightUtil { if (PsiType.LONG.equals(type) || PsiType.FLOAT.equals(type) || PsiType.DOUBLE.equals(type)) { QuickFixAction.registerQuickFixAction(errorResult, new AddTypeCastFix(PsiType.INT, expression)); } + } else { + final PsiClass member = PsiUtil.resolveClassInClassTypeOnly(type); + if (member != null && !PsiUtil.isAccessible(member, expression, null)) { + String message = PsiFormatUtil.formatClass(member, PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_FQ_NAME) + " is inaccessible here"; + errorResult = HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, expression, message); + } } } return errorResult; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByInaccessibleEnum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByInaccessibleEnum.java new file mode 100644 index 000000000000..7cdd90fece61 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByInaccessibleEnum.java @@ -0,0 +1,23 @@ +interface A { + B getB(); + + class B { + public C c; + + private enum C { + SOME + } + } +} + +class D { + public static void f(A a) { + A.B b = a.getB(); + switch (b.c) { + case SOME: + break; + } + } + + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java index a9d2caca6e80..515d20ba8472 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java @@ -75,6 +75,10 @@ public class LightAdvHighlightingJdk7Test extends LightDaemonAnalyzerTestCase { doTest(false, false); } + public void testSwitchByInaccessibleEnum() throws Exception { + doTest(false, false); + } + public void testDiamondPos1() throws Exception { doTest(false, false); }