mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] Move MoveUsage to common refactoring module
^KTIJ-23273 Also makes it sealed and renames to 'KotlinMoveUsage' GitOrigin-RevId: 4d86e86269640bc2ad89823e5912be815e2ea65a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
720c97c795
commit
e3de2c2f54
@@ -204,108 +204,6 @@ class ImplicitCompanionAsDispatchReceiverUsageInfo(
|
||||
val companionDescriptor: ClassDescriptor
|
||||
) : UsageInfo(callee)
|
||||
|
||||
interface KotlinMoveUsage {
|
||||
val isInternal: Boolean
|
||||
|
||||
fun refresh(refExpr: KtSimpleNameExpression, referencedElement: PsiElement): UsageInfo?
|
||||
}
|
||||
|
||||
class UnqualifiableMoveRenameUsageInfo(
|
||||
element: PsiElement,
|
||||
reference: PsiReference,
|
||||
referencedElement: PsiElement,
|
||||
val originalFile: PsiFile,
|
||||
val addImportToOriginalFile: Boolean,
|
||||
override val isInternal: Boolean
|
||||
) : MoveRenameUsageInfo(
|
||||
element,
|
||||
reference,
|
||||
reference.rangeInElement.startOffset,
|
||||
reference.rangeInElement.endOffset,
|
||||
referencedElement,
|
||||
false
|
||||
), KotlinMoveUsage {
|
||||
override fun refresh(refExpr: KtSimpleNameExpression, referencedElement: PsiElement): UsageInfo {
|
||||
return UnqualifiableMoveRenameUsageInfo(
|
||||
refExpr,
|
||||
refExpr.mainReference,
|
||||
referencedElement,
|
||||
originalFile,
|
||||
addImportToOriginalFile,
|
||||
isInternal
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class QualifiableMoveRenameUsageInfo(
|
||||
element: PsiElement,
|
||||
reference: PsiReference,
|
||||
referencedElement: PsiElement,
|
||||
override val isInternal: Boolean
|
||||
) : MoveRenameUsageInfo(
|
||||
element,
|
||||
reference,
|
||||
reference.rangeInElement.startOffset,
|
||||
reference.rangeInElement.endOffset,
|
||||
referencedElement,
|
||||
false
|
||||
),
|
||||
KotlinMoveUsage {
|
||||
override fun refresh(refExpr: KtSimpleNameExpression, referencedElement: PsiElement): UsageInfo {
|
||||
return QualifiableMoveRenameUsageInfo(refExpr, refExpr.mainReference, referencedElement, isInternal)
|
||||
}
|
||||
}
|
||||
|
||||
interface DeferredKotlinMoveUsage : KotlinMoveUsage {
|
||||
fun resolve(newElement: PsiElement): UsageInfo?
|
||||
}
|
||||
|
||||
class CallableReferenceMoveRenameUsageInfo(
|
||||
element: PsiElement,
|
||||
reference: PsiReference,
|
||||
referencedElement: PsiElement,
|
||||
val originalFile: PsiFile,
|
||||
private val addImportToOriginalFile: Boolean,
|
||||
override val isInternal: Boolean
|
||||
) : MoveRenameUsageInfo(
|
||||
element,
|
||||
reference,
|
||||
reference.rangeInElement.startOffset,
|
||||
reference.rangeInElement.endOffset,
|
||||
referencedElement,
|
||||
false
|
||||
), DeferredKotlinMoveUsage {
|
||||
override fun refresh(refExpr: KtSimpleNameExpression, referencedElement: PsiElement): UsageInfo {
|
||||
return CallableReferenceMoveRenameUsageInfo(
|
||||
refExpr,
|
||||
refExpr.mainReference,
|
||||
referencedElement,
|
||||
originalFile,
|
||||
addImportToOriginalFile,
|
||||
isInternal
|
||||
)
|
||||
}
|
||||
|
||||
override fun resolve(newElement: PsiElement): UsageInfo? {
|
||||
val target = newElement.unwrapped
|
||||
val element = element ?: return null
|
||||
val reference = reference ?: return null
|
||||
val referencedElement = referencedElement ?: return null
|
||||
if (target != null && target.isTopLevelKtOrJavaMember()) {
|
||||
element.getStrictParentOfType<KtCallableReferenceExpression>()?.receiverExpression?.delete()
|
||||
return UnqualifiableMoveRenameUsageInfo(
|
||||
element,
|
||||
reference,
|
||||
referencedElement,
|
||||
element.containingFile!!,
|
||||
addImportToOriginalFile,
|
||||
isInternal
|
||||
)
|
||||
}
|
||||
return QualifiableMoveRenameUsageInfo(element, reference, referencedElement, isInternal)
|
||||
}
|
||||
}
|
||||
|
||||
fun createMoveUsageInfoIfPossible(
|
||||
reference: PsiReference,
|
||||
referencedElement: PsiElement,
|
||||
@@ -314,13 +212,13 @@ fun createMoveUsageInfoIfPossible(
|
||||
): UsageInfo? {
|
||||
val element = reference.element
|
||||
return when (getReferenceKind(reference, referencedElement)) {
|
||||
ReferenceKind.QUALIFIABLE -> QualifiableMoveRenameUsageInfo(
|
||||
ReferenceKind.QUALIFIABLE -> KotlinMoveUsage.Qualifiable(
|
||||
element, reference, referencedElement, isInternal
|
||||
)
|
||||
ReferenceKind.UNQUALIFIABLE -> UnqualifiableMoveRenameUsageInfo(
|
||||
ReferenceKind.UNQUALIFIABLE -> KotlinMoveUsage.Unqualifiable(
|
||||
element, reference, referencedElement, element.containingFile!!, addImportToOriginalFile, isInternal
|
||||
)
|
||||
ReferenceKind.CALLABLE_REFERENCE -> CallableReferenceMoveRenameUsageInfo(
|
||||
ReferenceKind.CALLABLE_REFERENCE -> KotlinMoveUsage.Deferred.CallableReference(
|
||||
element, reference, referencedElement, element.containingFile!!, addImportToOriginalFile, isInternal
|
||||
)
|
||||
else -> null
|
||||
@@ -441,12 +339,12 @@ private fun postProcessMoveUsage(
|
||||
val newElement = mapToNewOrThis(oldElement, oldToNewElementsMapping)
|
||||
|
||||
when (usage) {
|
||||
is DeferredKotlinMoveUsage -> {
|
||||
is KotlinMoveUsage.Deferred -> {
|
||||
val newUsage = usage.resolve(newElement) ?: return
|
||||
postProcessMoveUsage(newUsage, oldToNewElementsMapping, nonCodeUsages, shorteningMode)
|
||||
}
|
||||
|
||||
is UnqualifiableMoveRenameUsageInfo -> {
|
||||
is KotlinMoveUsage.Unqualifiable -> {
|
||||
val file = with(usage) {
|
||||
if (addImportToOriginalFile) originalFile else mapToNewOrThis(
|
||||
originalFile,
|
||||
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.refactoring.move
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiReference
|
||||
import com.intellij.refactoring.util.MoveRenameUsageInfo
|
||||
import com.intellij.usageView.UsageInfo
|
||||
import org.jetbrains.kotlin.asJava.unwrapped
|
||||
import org.jetbrains.kotlin.idea.references.mainReference
|
||||
import org.jetbrains.kotlin.psi.KtCallableReferenceExpression
|
||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isTopLevelKtOrJavaMember
|
||||
|
||||
sealed interface KotlinMoveUsage {
|
||||
val isInternal: Boolean
|
||||
|
||||
fun refresh(refExpr: KtSimpleNameExpression, referencedElement: PsiElement): UsageInfo
|
||||
|
||||
sealed interface Deferred : KotlinMoveUsage {
|
||||
fun resolve(newElement: PsiElement): UsageInfo?
|
||||
|
||||
class CallableReference(
|
||||
element: PsiElement,
|
||||
reference: PsiReference,
|
||||
referencedElement: PsiElement,
|
||||
val originalFile: PsiFile,
|
||||
private val addImportToOriginalFile: Boolean,
|
||||
override val isInternal: Boolean
|
||||
) : Deferred, MoveRenameUsageInfo(
|
||||
element,
|
||||
reference,
|
||||
reference.rangeInElement.startOffset,
|
||||
reference.rangeInElement.endOffset,
|
||||
referencedElement,
|
||||
false
|
||||
) {
|
||||
override fun refresh(refExpr: KtSimpleNameExpression, referencedElement: PsiElement): UsageInfo {
|
||||
return CallableReference(
|
||||
refExpr,
|
||||
refExpr.mainReference,
|
||||
referencedElement,
|
||||
originalFile,
|
||||
addImportToOriginalFile,
|
||||
isInternal
|
||||
)
|
||||
}
|
||||
|
||||
override fun resolve(newElement: PsiElement): UsageInfo? {
|
||||
val target = newElement.unwrapped
|
||||
val element = element ?: return null
|
||||
val reference = reference ?: return null
|
||||
val referencedElement = referencedElement ?: return null
|
||||
if (target != null && target.isTopLevelKtOrJavaMember()) {
|
||||
element.getStrictParentOfType<KtCallableReferenceExpression>()?.receiverExpression?.delete()
|
||||
return Unqualifiable(
|
||||
element,
|
||||
reference,
|
||||
referencedElement,
|
||||
element.containingFile!!,
|
||||
addImportToOriginalFile,
|
||||
isInternal
|
||||
)
|
||||
}
|
||||
return Qualifiable(element, reference, referencedElement, isInternal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Unqualifiable(
|
||||
element: PsiElement,
|
||||
reference: PsiReference,
|
||||
referencedElement: PsiElement,
|
||||
val originalFile: PsiFile,
|
||||
val addImportToOriginalFile: Boolean,
|
||||
override val isInternal: Boolean
|
||||
) : KotlinMoveUsage, MoveRenameUsageInfo(
|
||||
element,
|
||||
reference,
|
||||
reference.rangeInElement.startOffset,
|
||||
reference.rangeInElement.endOffset,
|
||||
referencedElement,
|
||||
false
|
||||
) {
|
||||
override fun refresh(refExpr: KtSimpleNameExpression, referencedElement: PsiElement): UsageInfo {
|
||||
return Unqualifiable(
|
||||
refExpr,
|
||||
refExpr.mainReference,
|
||||
referencedElement,
|
||||
originalFile,
|
||||
addImportToOriginalFile,
|
||||
isInternal
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class Qualifiable(
|
||||
element: PsiElement,
|
||||
reference: PsiReference,
|
||||
referencedElement: PsiElement,
|
||||
override val isInternal: Boolean
|
||||
) : KotlinMoveUsage, MoveRenameUsageInfo(
|
||||
element,
|
||||
reference,
|
||||
reference.rangeInElement.startOffset,
|
||||
reference.rangeInElement.endOffset,
|
||||
referencedElement,
|
||||
false
|
||||
) {
|
||||
override fun refresh(refExpr: KtSimpleNameExpression, referencedElement: PsiElement): UsageInfo {
|
||||
return Qualifiable(refExpr, refExpr.mainReference, referencedElement, isInternal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user