Move out of companion object: don't suggest for @JvmField property inside companion object of interface #KT-28443 Fixed

This commit is contained in:
Toshiaki Kameyama
2018-11-26 23:49:22 +09:00
committed by Mikhail Glukhikh
parent 3ca934e5ea
commit 726b9272f3
3 changed files with 18 additions and 1 deletions
@@ -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
}
@@ -0,0 +1,9 @@
// IS_APPLICABLE: false
// WITH_RUNTIME
interface KotlinInterface {
companion object {
@JvmField
val <caret>bar = Any()
}
}
@@ -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");