IDEA-85507: JavaCommonIntentionActionsFactory#createAddMethodAction implementation

This commit is contained in:
Nicolay Mitropolsky
2017-05-09 10:16:23 +02:00
parent bed692fa81
commit a38fcecefe
2 changed files with 39 additions and 3 deletions
@@ -38,8 +38,13 @@ abstract class JvmCommonIntentionActionsFactory {
open fun createChangeModifierAction(declaration: UDeclaration, @PsiModifier.ModifierConstant @NonNls modifier: String, shouldPresent: Boolean): IntentionAction? = null
open fun createAddMethodAction(u: UClass, methodName: String, returnType: PsiType, vararg parameters: PsiType): IntentionAction? = null
open fun createAddMethodAction(u: UClass,
methodName: String,
@PsiModifier.ModifierConstant visibilityModifier: String,
returnType: PsiType,
vararg parameters: PsiType): IntentionAction? = null
companion object : LanguageExtension<JvmCommonIntentionActionsFactory>("com.intellij.codeInsight.intention.jvmCommonIntentionActionsFactory")
companion object : LanguageExtension<JvmCommonIntentionActionsFactory>(
"com.intellij.codeInsight.intention.jvmCommonIntentionActionsFactory") {}
}
@@ -15,10 +15,18 @@
*/
package com.intellij.codeInsight.intention.impl
import com.intellij.codeInsight.daemon.QuickFixBundle
import com.intellij.codeInsight.daemon.impl.quickfix.ModifierFix
import com.intellij.codeInsight.intention.AbstractIntentionAction
import com.intellij.codeInsight.intention.IntentionAction
import org.jetbrains.uast.UDeclaration
import com.intellij.codeInsight.intention.JvmCommonIntentionActionsFactory
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.*
import com.intellij.util.VisibilityUtil
import org.jetbrains.annotations.NotNull
import org.jetbrains.uast.UClass
import org.jetbrains.uast.UDeclaration
class JavaCommonIntentionActionsFactory : JvmCommonIntentionActionsFactory() {
@@ -27,4 +35,27 @@ class JavaCommonIntentionActionsFactory : JvmCommonIntentionActionsFactory() {
return ModifierFix(declaration.modifierList, modifier, shouldPresent, false)
}
override fun createAddMethodAction(u: UClass,
methodName: String,
@PsiModifier.ModifierConstant @NotNull visibilityModifier: String,
returnType: PsiType,
vararg parameters: PsiType): IntentionAction? {
val paramsString = parameters.mapIndexed { i, t -> "${t.presentableText} arg$i" }.joinToString()
val signatureString =
"${VisibilityUtil.getVisibilityString(visibilityModifier)} ${returnType.presentableText} $methodName($paramsString){}"
val smartPsi = SmartPointerManager.getInstance(u.project).createSmartPsiElementPointer(u.psi)
return object : AbstractIntentionAction() {
private val text = QuickFixBundle.message("add.method.text", methodName, u.name)
override fun getText(): String = text
override fun invoke(project: Project, editor: Editor?, file: PsiFile) {
val psi = smartPsi.element ?: return
val createMethodFromText = PsiElementFactory.SERVICE.getInstance(u.project)
.createMethodFromText(signatureString, psi)
psi.add(createMethodFromText)
}
}
}
}