Introduce Type Parameter: Do not show duplicate dialog under write action

#KT-20335 Fixed
This commit is contained in:
Alexey Sedunov
2017-09-28 20:28:21 +03:00
parent 25b6dac7b5
commit ee9a6ca53e
@@ -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)
}
} }
} }