diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanPrivateInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanPrivateInspection.kt index 5c9f3395a47..36e5f5a4b83 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanPrivateInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanPrivateInspection.kt @@ -26,11 +26,13 @@ import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.PsiSearchHelper import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.util.Processor +import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.idea.quickfix.AddModifierFix import org.jetbrains.kotlin.idea.refactoring.isConstructorDeclaredProperty import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* +import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmFieldAnnotation class MemberVisibilityCanPrivateInspection : AbstractKotlinInspection() { @@ -67,6 +69,7 @@ class MemberVisibilityCanPrivateInspection : AbstractKotlinInspection() { val inheritable = classOrObject is KtClass && classOrObject.isInheritable() if (!inheritable && declaration.hasModifier(KtTokens.PROTECTED_KEYWORD)) return false //reported by ProtectedInFinalInspection if (declaration.isOverridable()) return false + if (declaration.toDescriptor()?.hasJvmFieldAnnotation() != false) return false val psiSearchHelper = PsiSearchHelper.SERVICE.getInstance(declaration.project) val useScope = declaration.useScope diff --git a/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/.inspection b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/.inspection new file mode 100644 index 00000000000..1929dd8bad2 --- /dev/null +++ b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/.inspection @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.inspections.MemberVisibilityCanPrivateInspection diff --git a/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnParameter.kt b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnParameter.kt new file mode 100644 index 00000000000..575c4d87cb3 --- /dev/null +++ b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnParameter.kt @@ -0,0 +1,9 @@ +// WITH_RUNTIME +// PROBLEM: none + +class J(@JvmField val a: String) { + + fun foo() { + println(a) + } +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnProperty.kt b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnProperty.kt new file mode 100644 index 00000000000..937041c6f24 --- /dev/null +++ b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnProperty.kt @@ -0,0 +1,11 @@ +// WITH_RUNTIME +// PROBLEM: none + +class J { + @JvmField + val b = "" + + fun foo() { + println(b) + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index d7fbf2a6089..7c877f98e3c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -939,6 +939,27 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { } } + @TestMetadata("idea/testData/inspectionsLocal/memberVisibilityCanBePrivate") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class MemberVisibilityCanBePrivate extends AbstractLocalInspectionTest { + public void testAllFilesPresentInMemberVisibilityCanBePrivate() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/inspectionsLocal/memberVisibilityCanBePrivate"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("JvmFieldOnParameter.kt") + public void testJvmFieldOnParameter() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnParameter.kt"); + doTest(fileName); + } + + @TestMetadata("JvmFieldOnProperty.kt") + public void testJvmFieldOnProperty() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnProperty.kt"); + doTest(fileName); + } + } + @TestMetadata("idea/testData/inspectionsLocal/moveSuspiciousCallableReferenceIntoParentheses") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)