Remove write action from refactoring start (KT-11486)
#KT-11486 Fixed
This commit is contained in:
+37
-38
@@ -134,48 +134,47 @@ fun getParametersToRemove(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun IntroduceParameterDescriptor.performRefactoring() {
|
fun IntroduceParameterDescriptor.performRefactoring() {
|
||||||
runWriteAction {
|
val config = object : KotlinChangeSignatureConfiguration {
|
||||||
val config = object : KotlinChangeSignatureConfiguration {
|
override fun configure(originalDescriptor: KotlinMethodDescriptor): KotlinMethodDescriptor {
|
||||||
override fun configure(originalDescriptor: KotlinMethodDescriptor): KotlinMethodDescriptor {
|
return originalDescriptor.modify { methodDescriptor ->
|
||||||
return originalDescriptor.modify { methodDescriptor ->
|
if (!withDefaultValue) {
|
||||||
if (!withDefaultValue) {
|
val parameters = callable.getValueParameters()
|
||||||
val parameters = callable.getValueParameters()
|
val withReceiver = methodDescriptor.receiver != null
|
||||||
val withReceiver = methodDescriptor.receiver != null
|
parametersToRemove
|
||||||
parametersToRemove
|
.map {
|
||||||
.map {
|
if (it is KtParameter) {
|
||||||
if (it is KtParameter) {
|
parameters.indexOf(it) + if (withReceiver) 1 else 0
|
||||||
parameters.indexOf(it) + if (withReceiver) 1 else 0
|
} else 0
|
||||||
} else 0
|
}
|
||||||
}
|
.sortedDescending()
|
||||||
.sortedDescending()
|
.forEach { methodDescriptor.removeParameter(it) }
|
||||||
.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)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
override fun performSilently(affectedFunctions: Collection<PsiElement>): 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
|
override fun performSilently(affectedFunctions: Collection<PsiElement>): Boolean = true
|
||||||
val changeSignature = { runChangeSignature(project, callableDescriptor, config, callable, INTRODUCE_PARAMETER) }
|
}
|
||||||
changeSignature.runRefactoringWithPostprocessing(project, "refactoring.changeSignature") {
|
|
||||||
try {
|
val project = callable.project
|
||||||
occurrencesToReplace.forEach { occurrenceReplacer(it) }
|
val changeSignature = { runChangeSignature(project, callableDescriptor, config, callable, INTRODUCE_PARAMETER) }
|
||||||
}
|
|
||||||
finally {
|
changeSignature.runRefactoringWithPostprocessing(project, "refactoring.changeSignature") {
|
||||||
project.messageBus
|
try {
|
||||||
.syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC)
|
occurrencesToReplace.forEach { occurrenceReplacer(it) }
|
||||||
.refactoringDone(INTRODUCE_PARAMETER_REFACTORING_ID, null)
|
}
|
||||||
}
|
finally {
|
||||||
|
project.messageBus
|
||||||
|
.syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC)
|
||||||
|
.refactoringDone(INTRODUCE_PARAMETER_REFACTORING_ID, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user