Migrate AddInitKeywordFix & ClassObjectToDefaultObjectFix to JetWholeProjectModalAction
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user