diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt index 69b6d26ea27..d607a29b771 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.idea.refactoring.introduce.introduceParameter +import com.intellij.openapi.command.impl.FinishMarkAction +import com.intellij.openapi.command.impl.StartMarkAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.options.ConfigurationException import com.intellij.openapi.project.Project @@ -29,6 +31,7 @@ import com.intellij.usageView.BaseUsageViewDescriptor import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.idea.JetFileType import org.jetbrains.kotlin.idea.core.refactoring.isMultiLine +import org.jetbrains.kotlin.idea.core.refactoring.runRefactoringWithPostprocessing import org.jetbrains.kotlin.idea.refactoring.introduce.extractFunction.ui.KotlinExtractFunctionDialog import org.jetbrains.kotlin.idea.refactoring.introduce.extractFunction.ui.KotlinParameterTablePanel import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.* @@ -89,9 +92,10 @@ public class KotlinIntroduceParameterDialog private constructor( private var defaultValueCheckBox: JCheckBox? = null private val removeParamsCheckBoxes = LinkedHashMap(descriptor.parametersToRemove.size()) private var parameterTablePanel: KotlinParameterTablePanel? = null + private val commandName = if (lambdaExtractionDescriptor != null) INTRODUCE_LAMBDA_PARAMETER else INTRODUCE_PARAMETER init { - setTitle(if (lambdaExtractionDescriptor != null) INTRODUCE_LAMBDA_PARAMETER else INTRODUCE_PARAMETER) + setTitle(commandName) init() nameField.addDataChangedListener { validateButtons() } @@ -269,6 +273,8 @@ public class KotlinIntroduceParameterDialog private constructor( var newArgumentValue = descriptor.newArgumentValue var newReplacer = descriptor.occurrenceReplacer + val startMarkAction = StartMarkAction.start(editor, myProject, commandName) + lambdaExtractionDescriptor?.let { oldDescriptor -> val newDescriptor = KotlinExtractFunctionDialog.createNewDescriptor( oldDescriptor, @@ -316,12 +322,15 @@ public class KotlinIntroduceParameterDialog private constructor( occurrenceReplacer = newReplacer ) - helper.configure(descriptorToRefactor).performRefactoring() + val introduceParameter = { helper.configure(descriptorToRefactor).performRefactoring() } + introduceParameter.runRefactoringWithPostprocessing(myProject, INTRODUCE_PARAMETER_REFACTORING_ID) { + FinishMarkAction.finish(myProject, editor, startMarkAction) + } } override fun createUsageViewDescriptor(usages: Array) = BaseUsageViewDescriptor() - override fun getCommandName() = if (lambdaExtractionDescriptor != null) INTRODUCE_LAMBDA_PARAMETER else INTRODUCE_PARAMETER + override fun getCommandName() = commandName } ) } 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 7a8af5d3ed3..0ab3f640104 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 @@ -25,7 +25,12 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiReference import com.intellij.psi.util.PsiTreeUtil +import com.intellij.refactoring.BaseRefactoringProcessor import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer +import com.intellij.refactoring.listeners.RefactoringEventListener +import com.intellij.usageView.BaseUsageViewDescriptor +import com.intellij.usageView.UsageInfo +import com.intellij.usageView.UsageViewDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -143,7 +148,14 @@ fun IntroduceParameterDescriptor.performRefactoring() { val project = callable.getProject(); val changeSignature = { runChangeSignature(project, callableDescriptor, config, callable.analyze(), callable, INTRODUCE_PARAMETER) } changeSignature.runRefactoringWithPostprocessing(project, "refactoring.changeSignature") { - occurrencesToReplace.forEach { occurrenceReplacer(it) } + try { + occurrencesToReplace.forEach { occurrenceReplacer(it) } + } + finally { + project.getMessageBus() + .syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC) + .refactoringDone(INTRODUCE_PARAMETER_REFACTORING_ID, null) + } } } } @@ -410,5 +422,7 @@ public open class KotlinIntroduceLambdaParameterHandler( } } +val INTRODUCE_PARAMETER_REFACTORING_ID: String = "kotlin.refactoring.introduceParameter" + val INTRODUCE_PARAMETER: String = "Introduce Parameter" val INTRODUCE_LAMBDA_PARAMETER: String = "Introduce Lambda Parameter"