Introduce Type Parameter: Do not show duplicate dialog under write action
#KT-20335 Fixed
This commit is contained in:
+28
-28
@@ -113,38 +113,38 @@ object KotlinIntroduceTypeParameterHandler : RefactoringActionHandler {
|
|||||||
val restoredOwner = restoredTypeParameter.getStrictParentOfType<KtTypeParameterListOwner>() ?: return@postRename
|
val restoredOwner = restoredTypeParameter.getStrictParentOfType<KtTypeParameterListOwner>() ?: return@postRename
|
||||||
val restoredOriginalTypeElement = typeElementToExtractPointer.element ?: return@postRename
|
val restoredOriginalTypeElement = typeElementToExtractPointer.element ?: return@postRename
|
||||||
|
|
||||||
|
val parameterRefElement = KtPsiFactory(project).createType(restoredTypeParameter.name ?: "_").typeElement!!
|
||||||
|
|
||||||
|
val duplicateRanges = restoredOriginalTypeElement
|
||||||
|
.toRange()
|
||||||
|
.match(restoredOwner, KotlinPsiUnifier.DEFAULT)
|
||||||
|
.filterNot {
|
||||||
|
val textRange = it.range.getTextRange()
|
||||||
|
restoredOriginalTypeElement.textRange.intersects(textRange)
|
||||||
|
|| restoredOwner.typeParameterList?.textRange?.intersects(textRange) ?: false
|
||||||
|
}
|
||||||
|
.map { it.range.elements.toRange() }
|
||||||
|
|
||||||
runWriteAction {
|
runWriteAction {
|
||||||
val parameterRefElement = KtPsiFactory(project).createType(restoredTypeParameter.name ?: "_").typeElement!!
|
|
||||||
|
|
||||||
val duplicateRanges = restoredOriginalTypeElement
|
|
||||||
.toRange()
|
|
||||||
.match(restoredOwner, KotlinPsiUnifier.DEFAULT)
|
|
||||||
.filterNot {
|
|
||||||
val textRange = it.range.getTextRange()
|
|
||||||
restoredOriginalTypeElement.textRange.intersects(textRange)
|
|
||||||
|| restoredOwner.typeParameterList?.textRange?.intersects(textRange) ?: false
|
|
||||||
}
|
|
||||||
.map { it.range.elements.toRange() }
|
|
||||||
|
|
||||||
restoredOriginalTypeElement.replace(parameterRefElement)
|
restoredOriginalTypeElement.replace(parameterRefElement)
|
||||||
|
}
|
||||||
|
|
||||||
processDuplicates(
|
processDuplicates(
|
||||||
duplicateRanges.keysToMap {
|
duplicateRanges.keysToMap {
|
||||||
{
|
{
|
||||||
it.elements.singleOrNull()?.replace(parameterRefElement)
|
it.elements.singleOrNull()?.replace(parameterRefElement)
|
||||||
Unit
|
Unit
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
project,
|
project,
|
||||||
editor,
|
editor,
|
||||||
ElementDescriptionUtil.getElementDescription(restoredOwner, UsageViewTypeLocation.INSTANCE) + " '${restoredOwner.name}'",
|
ElementDescriptionUtil.getElementDescription(restoredOwner, UsageViewTypeLocation.INSTANCE) + " '${restoredOwner.name}'",
|
||||||
"a reference to extracted type parameter"
|
"a reference to extracted type parameter"
|
||||||
)
|
)
|
||||||
|
|
||||||
restoredTypeParameter.extendsBound?.let {
|
restoredTypeParameter.extendsBound?.let {
|
||||||
editor.selectionModel.setSelection(it.startOffset, it.endOffset)
|
editor.selectionModel.setSelection(it.startOffset, it.endOffset)
|
||||||
editor.caretModel.moveToOffset(it.startOffset)
|
editor.caretModel.moveToOffset(it.startOffset)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user