Move out of companion object: don't suggest for @JvmField property inside companion object of interface #KT-28443 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
3ca934e5ea
commit
726b9272f3
+4
-1
@@ -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.caches.resolve.unsafeResolveToDescriptor
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
||||||
import org.jetbrains.kotlin.idea.refactoring.getUsageContext
|
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.runSynchronouslyWithProgress
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
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.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
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
|
if (element !is KtNamedFunction && element !is KtProperty && element !is KtClassOrObject) return null
|
||||||
val container = element.containingClassOrObject
|
val container = element.containingClassOrObject
|
||||||
if (!(container is KtObjectDeclaration && container.isCompanion())) return null
|
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
|
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");
|
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")
|
@TestMetadata("moveAndDropCompanion.kt")
|
||||||
public void testMoveAndDropCompanion() throws Exception {
|
public void testMoveAndDropCompanion() throws Exception {
|
||||||
runTest("idea/testData/intentions/moveOutOfCompanion/moveAndDropCompanion.kt");
|
runTest("idea/testData/intentions/moveOutOfCompanion/moveAndDropCompanion.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user