From ec51643dffebb357d70ab8818b65bd23f344e000 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 22 Dec 2015 16:05:32 +0300 Subject: [PATCH] respect "do not suggest private for inners" in case of anonymous class --- .../AccessCanBeTightenedInspection.java | 3 ++- .../visibility/VisibilityInspection.java | 4 +++- .../AccessCanBeTightenedInspectionTest.java | 24 +++++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) rename plugins/InspectionGadgets/testsrc/com/{siyeh/ig => intellij/codeInspection}/visibility/AccessCanBeTightenedInspectionTest.java (75%) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspection.java index 9637cdc5cbac..9c7b83744c01 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspection.java @@ -225,7 +225,8 @@ class AccessCanBeTightenedInspection extends BaseJavaBatchLocalInspectionTool { if (annotation != null && annotation.getParent() instanceof PsiModifierList && annotation.getParent().getParent() == aClass) { return suggestPackageLocal(member); } - return myVisibilityInspection.SUGGEST_PRIVATE_FOR_INNERS || memberClass == aClass ? PsiUtil.ACCESS_LEVEL_PRIVATE : suggestPackageLocal(member); + return myVisibilityInspection.SUGGEST_PRIVATE_FOR_INNERS || + memberClass == aClass && memberClass.getContainingClass() == null ? PsiUtil.ACCESS_LEVEL_PRIVATE : suggestPackageLocal(member); } //if (file == memberFile) { // return PsiUtil.ACCESS_LEVEL_PACKAGE_LOCAL; diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java index 5b47331cddb9..de749c754971 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java @@ -367,7 +367,9 @@ public class VisibilityInspection extends GlobalJavaBatchInspectionTool { if (fromTopLevelElement != null && isInExtendsList(to, fromTopLevelElement.getExtendsList())) return false; if (fromTopLevelElement != null && isInExtendsList(to, fromTopLevelElement.getImplementsList())) return false; if (fromTopLevelElement != null && isInAnnotations(to, fromTopLevelElement)) return false; - return fromTopLevel == toOwner || fromOwner == toTopLevel || toOwner != null && refUtil.getOwnerClass(toOwner) == from; + return fromTopLevel == toOwner || fromOwner == toTopLevel || toOwner != null && ( + refUtil.getOwnerClass(toOwner) == from || from instanceof RefMethod && toOwner == ((RefMethod)from).getOwnerClass() || + from instanceof RefField && toOwner == ((RefField)from).getOwnerClass()); } if (fromOwner != null && fromOwner.isStatic() && !to.isStatic() && refUtil.isInheritor(fromOwner, toOwner)) return false; diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/visibility/AccessCanBeTightenedInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspectionTest.java similarity index 75% rename from plugins/InspectionGadgets/testsrc/com/siyeh/ig/visibility/AccessCanBeTightenedInspectionTest.java rename to plugins/InspectionGadgets/testsrc/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspectionTest.java index bf7363e5a395..b61f6e0d2e2b 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/visibility/AccessCanBeTightenedInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspectionTest.java @@ -13,10 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.siyeh.ig.visibility; +package com.intellij.codeInspection.visibility; import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.visibility.VisibilityInspection; +import com.intellij.codeInspection.ex.InspectionProfileImpl; +import com.intellij.profile.codeInspection.InspectionProjectProfileManager; +import com.intellij.util.ReflectionUtil; import com.siyeh.ig.LightInspectionTestCase; public class AccessCanBeTightenedInspectionTest extends LightInspectionTestCase { @@ -88,6 +90,24 @@ public class AccessCanBeTightenedInspectionTest extends LightInspectionTestCase myFixture.checkHighlighting(); } + public void testDoNotSuggestPrivateInAnonymousClassIfPrivatesForInnersIsOff() { + InspectionProfileImpl profile = (InspectionProfileImpl)InspectionProjectProfileManager.getInstance(getProject()).getInspectionProfile(); + AccessCanBeTightenedInspection inspection = (AccessCanBeTightenedInspection)profile.getInspectionTool(VisibilityInspection.SHORT_NAME, getProject()).getTool(); + VisibilityInspection visibilityInspection = + ReflectionUtil.getField(inspection.getClass(), inspection, VisibilityInspection.class, "myVisibilityInspection"); + visibilityInspection.SUGGEST_PACKAGE_LOCAL_FOR_MEMBERS = false; + + doTest("class C {\n" + + " {\n" + + " new Runnable() {\n" + + " @Override\n" + + " public void run() {}\n"+ + " boolean isVisible() { return true; }\n" + + " }.run();\n" + + " }\n"+ + "}"); + } + @Override protected LocalInspectionTool getInspection() { VisibilityInspection inspection = new VisibilityInspection();