From ee9a6ca53e217c33dc5f896d6abfff633dabe74d Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 28 Sep 2017 20:28:21 +0300 Subject: [PATCH] Introduce Type Parameter: Do not show duplicate dialog under write action #KT-20335 Fixed --- .../KotlinIntroduceTypeParameterHandler.kt | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeParameter/KotlinIntroduceTypeParameterHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeParameter/KotlinIntroduceTypeParameterHandler.kt index 3ab93c5eabc..65d6dd230c3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeParameter/KotlinIntroduceTypeParameterHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeParameter/KotlinIntroduceTypeParameterHandler.kt @@ -113,38 +113,38 @@ object KotlinIntroduceTypeParameterHandler : RefactoringActionHandler { val restoredOwner = restoredTypeParameter.getStrictParentOfType() ?: 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 { - 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) + } - processDuplicates( - duplicateRanges.keysToMap { - { - it.elements.singleOrNull()?.replace(parameterRefElement) - Unit - } - }, - project, - editor, - ElementDescriptionUtil.getElementDescription(restoredOwner, UsageViewTypeLocation.INSTANCE) + " '${restoredOwner.name}'", - "a reference to extracted type parameter" - ) + processDuplicates( + duplicateRanges.keysToMap { + { + it.elements.singleOrNull()?.replace(parameterRefElement) + Unit + } + }, + project, + editor, + ElementDescriptionUtil.getElementDescription(restoredOwner, UsageViewTypeLocation.INSTANCE) + " '${restoredOwner.name}'", + "a reference to extracted type parameter" + ) - restoredTypeParameter.extendsBound?.let { - editor.selectionModel.setSelection(it.startOffset, it.endOffset) - editor.caretModel.moveToOffset(it.startOffset) - } + restoredTypeParameter.extendsBound?.let { + editor.selectionModel.setSelection(it.startOffset, it.endOffset) + editor.caretModel.moveToOffset(it.startOffset) } }