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 4a5ea2406f70..884aa6684388 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 @@ -139,7 +139,8 @@ class AccessCanBeTightenedInspection extends BaseJavaBatchLocalInspectionTool { } } - private int suggestLevel(@NotNull PsiMember member, PsiClass memberClass, int currentLevel) { + @PsiUtil.AccessLevel + private int suggestLevel(@NotNull PsiMember member, PsiClass memberClass, @PsiUtil.AccessLevel int currentLevel) { if (member.hasModifierProperty(PsiModifier.PRIVATE) || member.hasModifierProperty(PsiModifier.NATIVE)) return currentLevel; if (member instanceof PsiMethod && member instanceof SyntheticElement || !member.isPhysical()) return currentLevel; @@ -199,6 +200,7 @@ class AccessCanBeTightenedInspection extends BaseJavaBatchLocalInspectionTool { return currentLevel; // do not propose private for unused method } + @PsiUtil.AccessLevel int suggestedLevel = maxLevel.get(); if (suggestedLevel == PsiUtil.ACCESS_LEVEL_PRIVATE && memberClass == null) { suggestedLevel = suggestPackageLocal(member); @@ -263,7 +265,7 @@ class AccessCanBeTightenedInspection extends BaseJavaBatchLocalInspectionTool { PsiDirectory directory = file.getContainingDirectory(); PsiPackage aPackage = directory == null ? null : JavaDirectoryService.getInstance().getPackage(directory); if (aPackage == memberPackage || aPackage != null && memberPackage != null && Comparing.strEqual(aPackage.getQualifiedName(), memberPackage.getQualifiedName())) { - return suggestPackageLocal(element); + return suggestPackageLocal(member); } if (innerClass != null && memberClass != null && innerClass.isInheritor(memberClass, true)) { //access from subclass can be via protected, except for constructors @@ -299,7 +301,8 @@ class AccessCanBeTightenedInspection extends BaseJavaBatchLocalInspectionTool { return result[0]; } - private int suggestPackageLocal(@NotNull PsiElement member) { + @PsiUtil.AccessLevel + private int suggestPackageLocal(@NotNull PsiMember member) { boolean suggestPackageLocal = member instanceof PsiClass && ClassUtil.isTopLevelClass((PsiClass)member) ? myVisibilityInspection.SUGGEST_PACKAGE_LOCAL_FOR_TOP_CLASSES : myVisibilityInspection.SUGGEST_PACKAGE_LOCAL_FOR_MEMBERS; diff --git a/plugins/InspectionGadgets/testsrc/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspectionTest.java index 8fe116dd8b0f..57977d5287f9 100644 --- a/plugins/InspectionGadgets/testsrc/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/intellij/codeInspection/visibility/AccessCanBeTightenedInspectionTest.java @@ -23,13 +23,25 @@ import com.siyeh.ig.LightInspectionTestCase; @SuppressWarnings("WeakerAccess") public class AccessCanBeTightenedInspectionTest extends LightInspectionTestCase { + private VisibilityInspection myVisibilityInspection = createTool(); + @Override protected LocalInspectionTool getInspection() { + return myVisibilityInspection.getSharedLocalInspectionTool(); + } + + @Override + protected void tearDown() throws Exception { + myVisibilityInspection = null; + super.tearDown(); + } + + private static VisibilityInspection createTool() { VisibilityInspection inspection = new VisibilityInspection(); inspection.SUGGEST_PRIVATE_FOR_INNERS = true; inspection.SUGGEST_PACKAGE_LOCAL_FOR_TOP_CLASSES = true; inspection.SUGGEST_PACKAGE_LOCAL_FOR_MEMBERS = true; - return inspection.getSharedLocalInspectionTool(); + return inspection; } public void testSimple() { @@ -101,12 +113,8 @@ public class AccessCanBeTightenedInspectionTest extends LightInspectionTestCase } 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; - visibilityInspection.SUGGEST_PRIVATE_FOR_INNERS = false; + myVisibilityInspection.SUGGEST_PACKAGE_LOCAL_FOR_MEMBERS = false; + myVisibilityInspection.SUGGEST_PRIVATE_FOR_INNERS = false; doTest("class C {\n" + " {\n" + @@ -222,4 +230,25 @@ public class AccessCanBeTightenedInspectionTest extends LightInspectionTestCase myFixture.configureByFiles("x/Outer.java", "x/Consumer.java"); myFixture.checkHighlighting(); } + + public void testSuggestPackagePrivateForTopLevelClassSetting() { + myFixture.allowTreeAccessForAllFiles(); + myVisibilityInspection.SUGGEST_PACKAGE_LOCAL_FOR_TOP_CLASSES = false; + myFixture.addFileToProject("x/Outer.java", + "package x;\n" + + "public class Outer {\n" + + "\n" + + "}\n" + + ""); + myFixture.addFileToProject("x/Consumer.java", + "package x;\n" + + "public class Consumer {\n" + + " public void doIt() {\n" + + " System.out.println(Outer.class.hashCode());\n" + + " }\n" + + "}" + + ""); + myFixture.configureByFiles("x/Outer.java", "x/Consumer.java"); + myFixture.checkHighlighting(); + } } \ No newline at end of file