From ab79deacbdebfdcde8976c0e413125ae473252d4 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 6 May 2016 22:29:36 +0300 Subject: [PATCH] Remove write action from refactoring start (KT-11486) #KT-11486 Fixed --- .../KotlinIntroduceParameterHandler.kt | 75 +++++++++---------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt index 35ab1e7744d..80125e0a23e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt @@ -134,48 +134,47 @@ fun getParametersToRemove( } fun IntroduceParameterDescriptor.performRefactoring() { - runWriteAction { - val config = object : KotlinChangeSignatureConfiguration { - override fun configure(originalDescriptor: KotlinMethodDescriptor): KotlinMethodDescriptor { - return originalDescriptor.modify { methodDescriptor -> - if (!withDefaultValue) { - val parameters = callable.getValueParameters() - val withReceiver = methodDescriptor.receiver != null - parametersToRemove - .map { - if (it is KtParameter) { - parameters.indexOf(it) + if (withReceiver) 1 else 0 - } else 0 - } - .sortedDescending() - .forEach { methodDescriptor.removeParameter(it) } - } - - val defaultValue = if (newArgumentValue is KtProperty) (newArgumentValue as KtProperty).initializer else newArgumentValue - val parameterInfo = KotlinParameterInfo(callableDescriptor = callableDescriptor, - name = newParameterName, - defaultValueForCall = if (withDefaultValue) null else defaultValue, - defaultValueForParameter = if (withDefaultValue) defaultValue else null, - valOrVar = valVar) - parameterInfo.currentTypeInfo = KotlinTypeInfo(false, null, newParameterTypeText) - methodDescriptor.addParameter(parameterInfo) + val config = object : KotlinChangeSignatureConfiguration { + override fun configure(originalDescriptor: KotlinMethodDescriptor): KotlinMethodDescriptor { + return originalDescriptor.modify { methodDescriptor -> + if (!withDefaultValue) { + val parameters = callable.getValueParameters() + val withReceiver = methodDescriptor.receiver != null + parametersToRemove + .map { + if (it is KtParameter) { + parameters.indexOf(it) + if (withReceiver) 1 else 0 + } else 0 + } + .sortedDescending() + .forEach { methodDescriptor.removeParameter(it) } } - } - override fun performSilently(affectedFunctions: Collection): Boolean = true + val defaultValue = if (newArgumentValue is KtProperty) (newArgumentValue as KtProperty).initializer else newArgumentValue + val parameterInfo = KotlinParameterInfo(callableDescriptor = callableDescriptor, + name = newParameterName, + defaultValueForCall = if (withDefaultValue) null else defaultValue, + defaultValueForParameter = if (withDefaultValue) defaultValue else null, + valOrVar = valVar) + parameterInfo.currentTypeInfo = KotlinTypeInfo(false, null, newParameterTypeText) + methodDescriptor.addParameter(parameterInfo) + } } - val project = callable.project - val changeSignature = { runChangeSignature(project, callableDescriptor, config, callable, INTRODUCE_PARAMETER) } - changeSignature.runRefactoringWithPostprocessing(project, "refactoring.changeSignature") { - try { - occurrencesToReplace.forEach { occurrenceReplacer(it) } - } - finally { - project.messageBus - .syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC) - .refactoringDone(INTRODUCE_PARAMETER_REFACTORING_ID, null) - } + override fun performSilently(affectedFunctions: Collection): Boolean = true + } + + val project = callable.project + val changeSignature = { runChangeSignature(project, callableDescriptor, config, callable, INTRODUCE_PARAMETER) } + + changeSignature.runRefactoringWithPostprocessing(project, "refactoring.changeSignature") { + try { + occurrencesToReplace.forEach { occurrenceReplacer(it) } + } + finally { + project.messageBus + .syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC) + .refactoringDone(INTRODUCE_PARAMETER_REFACTORING_ID, null) } } }