Migrate AddInitKeywordFix & ClassObjectToDefaultObjectFix to JetWholeProjectModalAction

This commit is contained in:
Stanislav Erokhin
2015-03-25 22:23:56 +03:00
parent f40b503454
commit faf7922884
3 changed files with 33 additions and 15 deletions
@@ -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
@@ -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<JetClassInitializer>(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<JetClassInitializer>(elem) {
public class AddInitKeywordFixInWholeProjectFix(elem: JetClassInitializer)
: JetWholeProjectModalAction<JetClassInitializer, Collection<JetClassInitializer>>(
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<JetClassInitializer>? {
val classInitializers = ArrayList<JetClassInitializer>()
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<JetClassInitializer>) {
data.forEach { AddInitKeywordFix.addInitKeyword(it) }
}
private class AddInitKeywordVisitor(val classInitializers: MutableCollection<JetClassInitializer>) : JetTreeVisitorVoid() {
override fun visitAnonymousInitializer(initializer: JetClassInitializer) {
initializer.acceptChildren(this)
if (!initializer.hasInitKeyword()) {
AddInitKeywordFix.addInitKeyword(file, initializer)
classInitializers.add(initializer)
}
}
}
@@ -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<JetObjectDeclaration>(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<JetObjectDeclaration>(elem) {
public class ClassObjectToCompanionObjectInWholeProjectFix(private val elem: JetObjectDeclaration)
: JetWholeProjectModalAction<JetObjectDeclaration, Collection<JetObjectDeclaration>>(
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<JetObjectDeclaration>? {
val classObjects = ArrayList<JetObjectDeclaration>()
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<JetObjectDeclaration>) {
data.forEach { ClassObjectToCompanionObjectFix.classKeywordToCompanionModifier(it) }
}
private class ClassObjectToCompanionObjectVisitor(val classObjects: MutableCollection<JetObjectDeclaration>) : JetTreeVisitorVoid() {
override fun visitObjectDeclaration(objectDeclaration: JetObjectDeclaration) {
objectDeclaration.acceptChildren(this)
if (objectDeclaration.getClassKeyword() != null) {
ClassObjectToCompanionObjectFix.classKeywordToCompanionModifier(objectDeclaration)
classObjects.add(objectDeclaration)
}
}
}