Generate test support: ask everything before write action to avoid AWT events inside

This commit is contained in:
Mikhail Glukhikh
2017-01-31 20:54:01 +03:00
parent 70c5d8b9ad
commit 9664a066a4
@@ -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)