From 00e6afd5e3f1734b1fde34d5d7d9a829d10e7983 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Wed, 31 May 2017 12:04:18 +0300 Subject: [PATCH] `JvmCommonIntentionActionsFactory` api refactoring --- .../JvmCommonIntentionActionsFactory.kt | 67 ++++++++++--------- .../impl/quickfix/UastCreateMethodFix.kt | 4 +- .../impl/JavaCommonIntentionActionsFactory.kt | 25 ++++--- .../CreateBeanPropertyFixes.java | 4 +- 4 files changed, 53 insertions(+), 47 deletions(-) diff --git a/java/java-analysis-api/src/com/intellij/codeInsight/intention/JvmCommonIntentionActionsFactory.kt b/java/java-analysis-api/src/com/intellij/codeInsight/intention/JvmCommonIntentionActionsFactory.kt index c2e13987e786..675cef723f0e 100644 --- a/java/java-analysis-api/src/com/intellij/codeInsight/intention/JvmCommonIntentionActionsFactory.kt +++ b/java/java-analysis-api/src/com/intellij/codeInsight/intention/JvmCommonIntentionActionsFactory.kt @@ -21,10 +21,8 @@ import com.intellij.psi.PsiModifier import com.intellij.psi.PsiType import com.intellij.psi.PsiTypeParameter import org.jetbrains.annotations.ApiStatus -import org.jetbrains.annotations.NonNls import org.jetbrains.uast.UClass import org.jetbrains.uast.UDeclaration -import org.jetbrains.uast.UElement import org.jetbrains.uast.UParameter /** @@ -41,18 +39,17 @@ import org.jetbrains.uast.UParameter abstract class JvmCommonIntentionActionsFactory { open fun createChangeModifierAction(declaration: UDeclaration, - @PsiModifier.ModifierConstant @NonNls modifier: String, + @PsiModifier.ModifierConstant modifier: String, shouldPresent: Boolean): IntentionAction? = null - open fun createAddCallableMemberActions(info: NewCallableMemberInfo): List = emptyList() + open fun createAddCallableMemberActions(info: MethodInsertionInfo): List = emptyList() open fun createAddBeanPropertyActions(uClass: UClass, propertyName: String, @PsiModifier.ModifierConstant visibilityModifier: String, propertyType: PsiType, setterRequired: Boolean, - getterRequired: Boolean): Array = emptyArray() - + getterRequired: Boolean): List = emptyList() companion object : LanguageExtension( "com.intellij.codeInsight.intention.jvmCommonIntentionActionsFactory") { @@ -63,39 +60,47 @@ abstract class JvmCommonIntentionActionsFactory { } -data class NewCallableMemberInfo( - val kind: CallableKind, +sealed class MethodInsertionInfo( val containingClass: UClass, - val name: String? = null, + @PsiModifier.ModifierConstant val modifiers: List = emptyList(), val typeParams: List = emptyList(), - val returnType: PsiType? = null, - val parameters: List = emptyList(), - val caller: UElement? = null, - val isAbstract: Boolean = false, - val focusAfterInserting: Boolean = false + val parameters: List = emptyList() ) { - - enum class CallableKind { - FUNCTION, - CONSTRUCTOR - } - companion object { @JvmStatic - fun constructorInfo(uClass: UClass, parameters: List) = - NewCallableMemberInfo(kind = CallableKind.CONSTRUCTOR, containingClass = uClass, parameters = parameters) + fun constructorInfo(containingClass: UClass, parameters: List) = + Constructor(containingClass = containingClass, parameters = parameters) @JvmStatic - fun simpleMethodInfo(uClass: UClass, methodName: String, modifier: String, returnType: PsiType, parameters: List) = - NewCallableMemberInfo(kind = CallableKind.FUNCTION, - name = methodName, - modifiers = listOf(modifier), - containingClass = uClass, - returnType = returnType, - parameters = parameters) - + fun simpleMethodInfo(containingClass: UClass, + methodName: String, + @PsiModifier.ModifierConstant modifier: String, + returnType: PsiType, + parameters: List) = + Method(name = methodName, + modifiers = listOf(modifier), + containingClass = containingClass, + returnType = returnType, + parameters = parameters) } -} + class Method( + containingClass: UClass, + val name: String, + modifiers: List = emptyList(), + typeParams: List = emptyList(), + val returnType: PsiType, + parameters: List = emptyList(), + val isAbstract: Boolean = false + ) : MethodInsertionInfo(containingClass, modifiers, typeParams, parameters) + + class Constructor( + containingClass: UClass, + modifiers: List = emptyList(), + typeParams: List = emptyList(), + parameters: List = emptyList() + ) : MethodInsertionInfo(containingClass, modifiers, typeParams, parameters) + +} \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/UastCreateMethodFix.kt b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/UastCreateMethodFix.kt index e890fffc5d18..fba05a6ef16e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/UastCreateMethodFix.kt +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/UastCreateMethodFix.kt @@ -17,7 +17,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.JvmCommonIntentionActionsFactory -import com.intellij.codeInsight.intention.NewCallableMemberInfo +import com.intellij.codeInsight.intention.MethodInsertionInfo import com.intellij.codeInspection.LocalQuickFixBase import com.intellij.codeInspection.ProblemDescriptor import com.intellij.openapi.module.ModuleUtilCore @@ -57,7 +57,7 @@ class UastCreateMethodFix(containingClass: UClass, private val createMethodActio if (!ModuleUtilCore.projectContainsFile(uClass.project, uClass.containingFile.virtualFile, false)) return null val actionsFactory = JvmCommonIntentionActionsFactory.forLanguage(uClass.language) ?: return null val action = actionsFactory.createAddCallableMemberActions( - NewCallableMemberInfo.simpleMethodInfo(uClass, methodName, modifier, PsiType.VOID, emptyList()) + MethodInsertionInfo.simpleMethodInfo(uClass, methodName, modifier, PsiType.VOID, emptyList()) ).firstOrNull() ?: return null return UastCreateMethodFix(uClass, action) } diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/JavaCommonIntentionActionsFactory.kt b/java/java-impl/src/com/intellij/codeInsight/intention/impl/JavaCommonIntentionActionsFactory.kt index 3f581f7f8d39..1326d89477b2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/JavaCommonIntentionActionsFactory.kt +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/JavaCommonIntentionActionsFactory.kt @@ -21,7 +21,7 @@ import com.intellij.codeInsight.daemon.impl.quickfix.ModifierFix import com.intellij.codeInsight.intention.AbstractIntentionAction import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.JvmCommonIntentionActionsFactory -import com.intellij.codeInsight.intention.NewCallableMemberInfo +import com.intellij.codeInsight.intention.MethodInsertionInfo import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.* @@ -39,15 +39,14 @@ class JavaCommonIntentionActionsFactory : JvmCommonIntentionActionsFactory() { return ModifierFix(declaration.modifierList, modifier, shouldPresent, false) } - override fun createAddCallableMemberActions(info: NewCallableMemberInfo): List { - return when (info.kind) { - NewCallableMemberInfo.CallableKind.FUNCTION -> - with(info) { - createAddMethodAction(containingClass, name!!, modifiers.joinToString(" "), returnType!!, parameters) - ?.let { listOf(it) } ?: emptyList() - } + override fun createAddCallableMemberActions(info: MethodInsertionInfo): List { + return when (info) { + is MethodInsertionInfo.Method -> with(info) { + createAddMethodAction(containingClass, name, modifiers.joinToString(" "), returnType, parameters) + ?.let { listOf(it) } ?: emptyList() + } - NewCallableMemberInfo.CallableKind.CONSTRUCTOR -> + is MethodInsertionInfo.Constructor -> listOf(AddConstructorFix(info.containingClass.psi, info.parameters.map { it.psi })) } } @@ -81,22 +80,22 @@ class JavaCommonIntentionActionsFactory : JvmCommonIntentionActionsFactory() { @PsiModifier.ModifierConstant visibilityModifier: String, propertyType: PsiType, setterRequired: Boolean, - getterRequired: Boolean): Array { + getterRequired: Boolean): List { if (getterRequired && setterRequired) - return arrayOf( + return listOf( CreateJavaBeanPropertyFix(uClass.psi, propertyName, propertyType, getterRequired, setterRequired, true), CreateJavaBeanPropertyFix(uClass.psi, propertyName, propertyType, getterRequired, setterRequired, false)) if (getterRequired || setterRequired) - return arrayOf( + return listOf( CreateJavaBeanPropertyFix(uClass.psi, propertyName, propertyType, getterRequired, setterRequired, true), CreateJavaBeanPropertyFix(uClass.psi, propertyName, propertyType, getterRequired, setterRequired, false), CreateJavaBeanPropertyFix(uClass.psi, propertyName, propertyType, true, true, true)) - return arrayOf( + return listOf( CreateJavaBeanPropertyFix(uClass.psi, propertyName, propertyType, getterRequired, setterRequired, true)) } diff --git a/java/java-impl/src/com/intellij/psi/impl/beanProperties/CreateBeanPropertyFixes.java b/java/java-impl/src/com/intellij/psi/impl/beanProperties/CreateBeanPropertyFixes.java index ea61ebaa455a..b300bb34803e 100644 --- a/java/java-impl/src/com/intellij/psi/impl/beanProperties/CreateBeanPropertyFixes.java +++ b/java/java-impl/src/com/intellij/psi/impl/beanProperties/CreateBeanPropertyFixes.java @@ -29,6 +29,7 @@ import org.jetbrains.uast.UClass; import org.jetbrains.uast.UastContextKt; import static com.intellij.psi.CommonClassNames.JAVA_LANG_STRING; +import static com.intellij.util.ArrayUtil.toObjectArray; @ApiStatus.Experimental public class CreateBeanPropertyFixes { @@ -56,6 +57,7 @@ public class CreateBeanPropertyFixes { if (factory == null) return IntentionAction.EMPTY_ARRAY; UClass uClass = UastContextKt.toUElement(psiClass, UClass.class); if (uClass == null) return IntentionAction.EMPTY_ARRAY; - return factory.createAddBeanPropertyActions(uClass, propertyName, PsiModifier.PUBLIC, type, createSetter, !createSetter); + return toObjectArray(factory.createAddBeanPropertyActions(uClass, propertyName, PsiModifier.PUBLIC, type, createSetter, !createSetter), + IntentionAction.class); } }