From 9664a066a44722b2fa391f88631b484061ef0cf2 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 31 Jan 2017 20:54:01 +0300 Subject: [PATCH] Generate test support: ask everything before write action to avoid AWT events inside --- .../KotlinGenerateTestSupportActionBase.kt | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateTestSupportActionBase.kt b/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateTestSupportActionBase.kt index 9316fc5daf8..33a9a566c69 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateTestSupportActionBase.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateTestSupportActionBase.kt @@ -149,33 +149,34 @@ abstract class KotlinGenerateTestSupportActionBase( private fun doGenerate(editor: Editor, file: PsiFile, klass: KtClassOrObject, framework: TestFramework) { val project = file.project val commandName = "Generate test function" + + val fileTemplateDescriptor = methodKind.getFileTemplateDescriptor(framework) + val fileTemplate = FileTemplateManager.getInstance(project).getCodeTemplate(fileTemplateDescriptor.fileName) + var templateText = fileTemplate.text.replace(BODY_VAR, "") + var name: String? = null + if (templateText.contains(NAME_VAR)) { + name = if (templateText.contains("test$NAME_VAR")) "Name" else "name" + if (!ApplicationManager.getApplication().isUnitTestMode) { + name = Messages.showInputDialog("Choose test name: ", commandName, null, name, NAME_VALIDATOR) + ?: return + } + + templateText = fileTemplate.text.replace(NAME_VAR, DUMMY_NAME) + } + project.executeWriteCommand(commandName) { try { PsiDocumentManager.getInstance(project).commitAllDocuments() - val fileTemplateDescriptor = methodKind.getFileTemplateDescriptor(framework) - val fileTemplate = FileTemplateManager.getInstance(project).getCodeTemplate(fileTemplateDescriptor.fileName) - var templateText = fileTemplate.text.replace(BODY_VAR, "") - var name: String? = null - if (templateText.contains(NAME_VAR)) { - name = if (templateText.contains("test$NAME_VAR")) "Name" else "name" - if (!ApplicationManager.getApplication().isUnitTestMode) { - name = Messages.showInputDialog("Choose test name: ", commandName, null, name, NAME_VALIDATOR) - ?: return@executeWriteCommand - } - - templateText = fileTemplate.text.replace(NAME_VAR, DUMMY_NAME) - } val factory = PsiElementFactory.SERVICE.getInstance(project) val psiMethod = factory.createMethodFromText(templateText, null) psiMethod.throwsList.referenceElements.forEach { it.delete() } - var function = psiMethod.j2k() as? KtNamedFunction - if (function == null) { + var function = psiMethod.j2k() as? KtNamedFunction ?: run { HintManager.getInstance().showErrorHint(editor, "Couldn't convert Java template to Kotlin") return@executeWriteCommand } - if (name != null) { - function = substituteNewName(function, name) + name?.let { + function = substituteNewName(function, it) } val functionInPlace = insertMember(editor, klass, function)