diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt index aec641d6730..727b81eb52b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt @@ -28,8 +28,10 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.refactoring.getUsageContext +import org.jetbrains.kotlin.idea.refactoring.isInterfaceClass import org.jetbrains.kotlin.idea.runSynchronouslyWithProgress import org.jetbrains.kotlin.idea.util.application.runReadAction +import org.jetbrains.kotlin.idea.util.hasJvmFieldAnnotation import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.parents @@ -88,7 +90,8 @@ class MoveMemberOutOfCompanionObjectIntention : MoveMemberOutOfObjectIntention(" if (element !is KtNamedFunction && element !is KtProperty && element !is KtClassOrObject) return null val container = element.containingClassOrObject if (!(container is KtObjectDeclaration && container.isCompanion())) return null - if (container.containingClassOrObject == null) return null + val containingClassOrObject = container.containingClassOrObject ?: return null + if (containingClassOrObject.isInterfaceClass() && element.hasJvmFieldAnnotation()) return null return element.nameIdentifier?.textRange } diff --git a/idea/testData/intentions/moveOutOfCompanion/hasJvmFieldInInterface.kt b/idea/testData/intentions/moveOutOfCompanion/hasJvmFieldInInterface.kt new file mode 100644 index 00000000000..e4b9ad7a934 --- /dev/null +++ b/idea/testData/intentions/moveOutOfCompanion/hasJvmFieldInInterface.kt @@ -0,0 +1,9 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME + +interface KotlinInterface { + companion object { + @JvmField + 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 d86e3c80c5f..cfd9ad03197 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -11899,6 +11899,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/moveOutOfCompanion/companionAsImplicitReceiver.kt"); } + @TestMetadata("hasJvmFieldInInterface.kt") + public void testHasJvmFieldInInterface() throws Exception { + runTest("idea/testData/intentions/moveOutOfCompanion/hasJvmFieldInInterface.kt"); + } + @TestMetadata("moveAndDropCompanion.kt") public void testMoveAndDropCompanion() throws Exception { runTest("idea/testData/intentions/moveOutOfCompanion/moveAndDropCompanion.kt");