From faf7922884853c5993f74765fec91a1b8824e939 Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Wed, 25 Mar 2015 22:23:56 +0300 Subject: [PATCH] Migrate AddInitKeywordFix & ClassObjectToDefaultObjectFix to JetWholeProjectModalAction --- .../kotlin/idea/JetBundle.properties | 2 ++ .../kotlin/idea/quickfix/AddInitKeywordFix.kt | 26 ++++++++++++------- .../quickfix/ClassObjectToDefaultObjectFix.kt | 20 +++++++++----- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties index c3a94b43096..0773f009f8c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties @@ -15,6 +15,7 @@ add.modifier.family=Add Modifier add.init.keyword=Add 'init' keyword add.init.keyword.family=Add 'init' keyword add.init.keyword.in.whole.project=Add 'init' keyword in whole project +add.init.keyword.in.whole.project.modal.title=Adding 'init' keyword in whole project add.init.keyword.in.whole.project.family=Add 'init' keyword in whole project make.element.in.classifiers.open=Make ''{0}'' in {1} open make.class.annotation.class=Make ''{0}'' an annotation class @@ -189,6 +190,7 @@ migrate.sure=Replace sure() calls by !! in project migrate.class.object.to.companion=Replace 'class' keyword with 'companion' modifier migrate.class.object.to.companion.family=Replace 'class' Keyword with 'companion' Modifier migrate.class.object.to.companion.in.whole.project=Replace 'class' keyword with 'companion' modifier in whole project +migrate.class.object.to.companion.in.whole.project.modal.title=Replacing 'class' keyword with 'companion' modifier in whole project migrate.class.object.to.companion.in.whole.project.family=Replace 'class' Keyword with 'companion' Modifier in Whole Project migrate.lambda.syntax=Migrate lambda syntax migrate.lambda.syntax.family=Migrate lambda syntax diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddInitKeywordFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddInitKeywordFix.kt index 9ec0a9466ff..d154b0b9dcd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddInitKeywordFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddInitKeywordFix.kt @@ -27,6 +27,7 @@ import com.intellij.psi.* import org.jetbrains.kotlin.idea.project.PluginJetFilesProvider import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.psiUtil.* +import java.util.ArrayList public class AddInitKeywordFix(element: JetClassInitializer) : JetIntentionAction(element) { @@ -35,14 +36,14 @@ public class AddInitKeywordFix(element: JetClassInitializer) : JetIntentionActio override fun getFamilyName() = JetBundle.message("add.init.keyword.family") override fun invoke(project: Project, editor: Editor?, file: JetFile) { - addInitKeyword(file, element) + addInitKeyword(element) } companion object Factory : JetSingleIntentionActionFactory() { - fun addInitKeyword(file: JetFile, element: JetClassInitializer) { + fun addInitKeyword(element: JetClassInitializer) { if (element.hasInitKeyword()) return - val psiFactory = JetPsiFactory(file) + val psiFactory = JetPsiFactory(element) val initKeyword = psiFactory.createInitKeyword() val anchor = element.getBody() ?: return element.addBefore(initKeyword, anchor) @@ -59,22 +60,29 @@ public class AddInitKeywordFix(element: JetClassInitializer) : JetIntentionActio } } -public class AddInitKeywordFixInWholeProjectFix(elem: JetClassInitializer) : JetIntentionAction(elem) { +public class AddInitKeywordFixInWholeProjectFix(elem: JetClassInitializer) +: JetWholeProjectModalAction>( + elem, JetBundle.message("add.init.keyword.in.whole.project.modal.title")) { override fun getText(): String = JetBundle.message("add.init.keyword.in.whole.project") override fun getFamilyName(): String = JetBundle.message("add.init.keyword.in.whole.project.family") - override fun invoke(project: Project, editor: Editor, file: JetFile) { - val files = PluginJetFilesProvider.allFilesInProject(file.getProject()) + override fun collectDataForFile(project: Project, file: JetFile): Collection? { + val classInitializers = ArrayList() + file.accept(AddInitKeywordVisitor(classInitializers)) - files.forEach { it.accept(AddInitKeywordVisitor(file)) } + return if (classInitializers.isEmpty()) null else classInitializers } - private class AddInitKeywordVisitor(private val file: JetFile) : JetTreeVisitorVoid() { + override fun applyChangesForFile(project: Project, file: JetFile, data: Collection) { + data.forEach { AddInitKeywordFix.addInitKeyword(it) } + } + + private class AddInitKeywordVisitor(val classInitializers: MutableCollection) : JetTreeVisitorVoid() { override fun visitAnonymousInitializer(initializer: JetClassInitializer) { initializer.acceptChildren(this) if (!initializer.hasInitKeyword()) { - AddInitKeywordFix.addInitKeyword(file, initializer) + classInitializers.add(initializer) } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ClassObjectToDefaultObjectFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ClassObjectToDefaultObjectFix.kt index 696722620d6..fa495d53d58 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ClassObjectToDefaultObjectFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ClassObjectToDefaultObjectFix.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.idea.JetBundle import org.jetbrains.kotlin.idea.project.PluginJetFilesProvider import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* +import java.util.ArrayList public class ClassObjectToCompanionObjectFix(private val elem: JetObjectDeclaration) : JetIntentionAction(elem) { override fun getText(): String = JetBundle.message("migrate.class.object.to.companion") @@ -46,22 +47,29 @@ public class ClassObjectToCompanionObjectFix(private val elem: JetObjectDeclarat } } -public class ClassObjectToCompanionObjectInWholeProjectFix(private val elem: JetObjectDeclaration) : JetIntentionAction(elem) { +public class ClassObjectToCompanionObjectInWholeProjectFix(private val elem: JetObjectDeclaration) + : JetWholeProjectModalAction>( + elem, JetBundle.message("migrate.class.object.to.companion.in.whole.project.modal.title")) { override fun getText(): String = JetBundle.message("migrate.class.object.to.companion.in.whole.project") override fun getFamilyName(): String = JetBundle.message("migrate.class.object.to.companion.in.whole.project.family") - override fun invoke(project: Project, editor: Editor, file: JetFile) { - val files = PluginJetFilesProvider.allFilesInProject(file.getProject()) + override fun collectDataForFile(project: Project, file: JetFile): Collection? { + val classObjects = ArrayList() + file.accept(ClassObjectToCompanionObjectVisitor(classObjects)) - files.forEach { it.accept(ClassObjectToCompanionObjectVisitor) } + return if (classObjects.isEmpty()) null else classObjects } - private object ClassObjectToCompanionObjectVisitor : JetTreeVisitorVoid() { + override fun applyChangesForFile(project: Project, file: JetFile, data: Collection) { + data.forEach { ClassObjectToCompanionObjectFix.classKeywordToCompanionModifier(it) } + } + + private class ClassObjectToCompanionObjectVisitor(val classObjects: MutableCollection) : JetTreeVisitorVoid() { override fun visitObjectDeclaration(objectDeclaration: JetObjectDeclaration) { objectDeclaration.acceptChildren(this) if (objectDeclaration.getClassKeyword() != null) { - ClassObjectToCompanionObjectFix.classKeywordToCompanionModifier(objectDeclaration) + classObjects.add(objectDeclaration) } } }