From 75c174955fe4eb938696a1b4c95ae7866c614f68 Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 3 May 2012 11:33:42 +0200 Subject: [PATCH] warn about private/static modifiers inside local classes (IDEA-85567) --- .../daemon/impl/analysis/HighlightClassUtil.java | 2 +- .../codeInsight/daemon/impl/analysis/HighlightUtil.java | 2 +- .../advHighlighting/ModifierAllowed.java | 8 ++++++++ .../daemonCodeAnalyzer/advHighlighting/StaticInInner.java | 4 ++-- .../daemonCodeAnalyzer/genericsHighlighting/Enum.java | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java index 4548378a49d0..170dbec1e133 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java @@ -349,7 +349,7 @@ public class HighlightClassUtil { return null; } PsiClass aClass = (PsiClass)keyword.getParent(); - if (PsiUtilCore.hasErrorElementChild(aClass)) return null; + if (PsiUtilCore.hasErrorElementChild(aClass) || (aClass.getQualifiedName() == null && !aClass.isInterface())) return null; // highlight 'static' keyword if any, or class or interface if not PsiElement context = null; PsiModifierList modifierList = aClass.getModifierList(); 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 99483109d7c4..b18dac26941c 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 @@ -824,7 +824,7 @@ public class HighlightUtil { } else if (PsiModifier.STATIC.equals(modifier) || PsiModifier.PRIVATE.equals(modifier) || PsiModifier.PROTECTED.equals(modifier) || PsiModifier.PACKAGE_LOCAL.equals(modifier)) { - isAllowed = modifierOwnerParent instanceof PsiClass; + isAllowed = modifierOwnerParent instanceof PsiClass && ((PsiClass)modifierOwnerParent).getQualifiedName() != null; } if (aClass.isEnum()) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ModifierAllowed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ModifierAllowed.java index 99b79745b48e..d9012650d71f 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ModifierAllowed.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ModifierAllowed.java @@ -66,3 +66,11 @@ interface i3 { transient int m2() { return 0; } synchronized int m3() { return 0; } } + +class LocalClassWithInner { + void foo () { + class A { + private class B {} + } + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticInInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticInInner.java index 14dc7c34bc6f..a8c82f35d016 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticInInner.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticInInner.java @@ -48,7 +48,7 @@ public class a { static final int f2 = x instanceof Integer ? 1 : 0; - static + static class a_ic_c2 {} static @@ -75,7 +75,7 @@ public class a { static final int f2 = x instanceof Integer ? 1 : 0; - static + static class a_ic_c2 {} static diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum.java index d724dc5e0efa..e113157c5841 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum.java @@ -115,7 +115,7 @@ class X extends E enum StaticInEnumConstantInitializer { AN { - static class s { + static class s { } private static final String t = String.valueOf(1); };