diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt index 8e6c6f2899b..8acec2df471 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt @@ -348,7 +348,10 @@ fun KtModifierListOwner.canBeProtected(): Boolean { } fun KtModifierListOwner.canBeInternal(): Boolean { - if (containingClass()?.isInterface() == true && hasJvmFieldAnnotation()) return false + if (containingClass()?.isInterface() == true) { + val objectDeclaration = getStrictParentOfType() ?: return false + if (objectDeclaration.isCompanion() && hasJvmFieldAnnotation()) return false + } return !isAnnotationClassPrimaryConstructor() } diff --git a/idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterface.kt b/idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceCompanion.kt similarity index 100% rename from idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterface.kt rename to idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceCompanion.kt diff --git a/idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceObject.kt b/idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceObject.kt new file mode 100644 index 00000000000..260984be8f8 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceObject.kt @@ -0,0 +1,7 @@ +// WITH_RUNTIME +interface KotlinInterface { + object O { + @JvmField + val bar = Any() + } +} \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceObject.kt.after b/idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceObject.kt.after new file mode 100644 index 00000000000..fc0c1189a81 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceObject.kt.after @@ -0,0 +1,7 @@ +// WITH_RUNTIME +interface KotlinInterface { + object O { + @JvmField + internal val bar = Any() + } +} \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/internal/inInterface.kt b/idea/testData/intentions/changeVisibility/internal/inInterface.kt new file mode 100644 index 00000000000..2509d4cb4e7 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/internal/inInterface.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +interface A { + fun foo(name: String) +} \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/internal/inInterfaceCompanion.kt b/idea/testData/intentions/changeVisibility/internal/inInterfaceCompanion.kt new file mode 100644 index 00000000000..3f4dde69146 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/internal/inInterfaceCompanion.kt @@ -0,0 +1,5 @@ +interface KotlinInterface { + companion object { + val bar = Any() + } +} \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/internal/inInterfaceCompanion.kt.after b/idea/testData/intentions/changeVisibility/internal/inInterfaceCompanion.kt.after new file mode 100644 index 00000000000..50f12836022 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/internal/inInterfaceCompanion.kt.after @@ -0,0 +1,5 @@ +interface KotlinInterface { + companion object { + internal val bar = Any() + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 91e9e9f7060..911232e0c71 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -3333,9 +3333,24 @@ public class IntentionTestGenerated extends AbstractIntentionTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/intentions/changeVisibility/internal"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true); } - @TestMetadata("hasJvmFieldInInterface.kt") - public void testHasJvmFieldInInterface() throws Exception { - runTest("idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterface.kt"); + @TestMetadata("hasJvmFieldInInterfaceCompanion.kt") + public void testHasJvmFieldInInterfaceCompanion() throws Exception { + runTest("idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceCompanion.kt"); + } + + @TestMetadata("hasJvmFieldInInterfaceObject.kt") + public void testHasJvmFieldInInterfaceObject() throws Exception { + runTest("idea/testData/intentions/changeVisibility/internal/hasJvmFieldInInterfaceObject.kt"); + } + + @TestMetadata("inInterface.kt") + public void testInInterface() throws Exception { + runTest("idea/testData/intentions/changeVisibility/internal/inInterface.kt"); + } + + @TestMetadata("inInterfaceCompanion.kt") + public void testInInterfaceCompanion() throws Exception { + runTest("idea/testData/intentions/changeVisibility/internal/inInterfaceCompanion.kt"); } @TestMetadata("notForAnnotationClassPrimaryConstructor.kt")