From 67cc6bb004fcf836f4ea73a3f09979405a40d7f6 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 18 Oct 2016 16:49:05 +0300 Subject: [PATCH] Insert '()' under write action in finishing anonymous object template (EA-82700) (cherry picked from commit 3234d76) --- .../macro/AnonymousTemplateEditingListener.kt | 6 +++++- .../testData/object_ForClass.exp.kt | 7 +++++++ idea/idea-live-templates/testData/object_ForClass.kt | 5 +++++ .../kotlin/idea/liveTemplates/LiveTemplatesTest.kt | 10 +++++++++- 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 idea/idea-live-templates/testData/object_ForClass.exp.kt create mode 100644 idea/idea-live-templates/testData/object_ForClass.kt diff --git a/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/AnonymousTemplateEditingListener.kt b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/AnonymousTemplateEditingListener.kt index 442e97a8d78..cf82dc21af1 100644 --- a/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/AnonymousTemplateEditingListener.kt +++ b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/AnonymousTemplateEditingListener.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler +import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.KtReferenceExpression import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -58,7 +59,10 @@ internal class AnonymousTemplateEditingListener(private val psiFile: PsiFile, pr if (classDescriptor != null) { if (classDescriptor!!.kind == ClassKind.CLASS) { val placeToInsert = classRef!!.textRange.endOffset - PsiDocumentManager.getInstance(psiFile.project).getDocument(psiFile)!!.insertString(placeToInsert, "()") + + runWriteAction { + PsiDocumentManager.getInstance(psiFile.project).getDocument(psiFile)!!.insertString(placeToInsert, "()") + } var hasConstructorsParameters = false for (cd in classDescriptor!!.constructors) { diff --git a/idea/idea-live-templates/testData/object_ForClass.exp.kt b/idea/idea-live-templates/testData/object_ForClass.exp.kt new file mode 100644 index 00000000000..9e559537b0d --- /dev/null +++ b/idea/idea-live-templates/testData/object_ForClass.exp.kt @@ -0,0 +1,7 @@ +// Using class is important +// Test for EA-82700 + +open class A +val test = object : A() { + +} \ No newline at end of file diff --git a/idea/idea-live-templates/testData/object_ForClass.kt b/idea/idea-live-templates/testData/object_ForClass.kt new file mode 100644 index 00000000000..3b90f31f843 --- /dev/null +++ b/idea/idea-live-templates/testData/object_ForClass.kt @@ -0,0 +1,5 @@ +// Using class is important +// Test for EA-82700 + +open class A +val test = \ No newline at end of file diff --git a/idea/idea-live-templates/tests/org/jetbrains/kotlin/idea/liveTemplates/LiveTemplatesTest.kt b/idea/idea-live-templates/tests/org/jetbrains/kotlin/idea/liveTemplates/LiveTemplatesTest.kt index 11c6be9de1f..ac9e7c5cf78 100644 --- a/idea/idea-live-templates/tests/org/jetbrains/kotlin/idea/liveTemplates/LiveTemplatesTest.kt +++ b/idea/idea-live-templates/tests/org/jetbrains/kotlin/idea/liveTemplates/LiveTemplatesTest.kt @@ -213,6 +213,14 @@ class LiveTemplatesTest : KotlinLightCodeInsightFixtureTestCase() { checkAfter() } + fun testObject_ForClass() { + start() + + typeAndNextTab("A") + + checkAfter() + } + private fun doTestIfnInn() { start() @@ -272,7 +280,7 @@ class LiveTemplatesTest : KotlinLightCodeInsightFixtureTestCase() { CommandProcessor.getInstance().executeCommand( project, { - ApplicationManager.getApplication().runWriteAction { templateState!!.nextTab() } + templateState!!.nextTab() }, "nextTab", null)