KotlinIntroduceImportAliasHandler: remove unnecessary transformations

This commit is contained in:
Dmitry Gridin
2019-12-02 15:48:51 +07:00
parent 9f1f743d55
commit ebf3bfc048
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.idea.core.moveCaret
import org.jetbrains.kotlin.idea.core.util.CodeInsightUtils
import org.jetbrains.kotlin.idea.imports.importableFqName
import org.jetbrains.kotlin.idea.refactoring.selectElement
import org.jetbrains.kotlin.idea.references.KtReference
import org.jetbrains.kotlin.idea.references.findPsiDeclarations
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.references.resolveMainReferenceToDescriptors
@@ -123,23 +124,22 @@ private fun invokeRename(
}
private fun replaceUsages(usages: List<UsageContext>, newName: String) {
usages.filter { it.pointer.element?.safeAs<KtElement>()?.mainReference?.isImportUsage() == false }
.reversed() // case: inner element
.forEach {
val reference = it.pointer.element?.safeAs<KtElement>()?.mainReference ?: return@forEach
val newExpression = reference.handleElementRename(newName) as KtNameReferenceExpression
if (it.isExtension) {
newExpression.getQualifiedElementSelector()?.replace(newExpression)
return@forEach
}
val qualifiedElement = newExpression.getQualifiedElement()
if (qualifiedElement != newExpression) {
val parent = newExpression.parent
if (parent is KtCallExpression || parent is KtUserType) {
newExpression.siblings(forward = false, withItself = false).forEach(PsiElement::delete)
qualifiedElement.replace(parent)
} else qualifiedElement.replace(newExpression)
}
// case: inner element
for (usage in usages.asReversed()) {
val reference = usage.pointer.element?.safeAs<KtElement>()?.mainReference?.takeUnless(KtReference::isImportUsage) ?: continue
val newExpression = reference.handleElementRename(newName) as KtNameReferenceExpression
if (usage.isExtension) {
newExpression.getQualifiedElementSelector()?.replace(newExpression)
continue
}
val qualifiedElement = newExpression.getQualifiedElement()
if (qualifiedElement != newExpression) {
val parent = newExpression.parent
if (parent is KtCallExpression || parent is KtUserType) {
newExpression.siblings(forward = false, withItself = false).forEach(PsiElement::delete)
qualifiedElement.replace(parent)
} else qualifiedElement.replace(newExpression)
}
}
}