From f8be2f23a13e117c3c74f794302601b0a9c03f29 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 25 Dec 2015 14:31:25 +0300 Subject: [PATCH] Add Function Body Quick-Fix: Convert to Kotlin & refactor --- .../kotlin/idea/KotlinBundle.properties | 1 - .../idea/quickfix/AddFunctionBodyFix.kt | 81 ++++++------------- .../kotlin/idea/quickfix/QuickFixRegistrar.kt | 5 +- 3 files changed, 25 insertions(+), 62 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties index 978c737a23c..779db143fb0 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties @@ -1,5 +1,4 @@ #quick fix messages -add.function.body=Add function body add.return.type=Add return type declaration change.accessor.type=Change accessor type change.getter.type=Change getter type to {0} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionBodyFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionBodyFix.kt index f970f409196..de60e71f9cf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionBodyFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionBodyFix.kt @@ -14,69 +14,34 @@ * limitations under the License. */ -package org.jetbrains.kotlin.idea.quickfix; +package org.jetbrains.kotlin.idea.quickfix -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiWhiteSpace; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.diagnostics.Diagnostic; -import org.jetbrains.kotlin.idea.KotlinBundle; -import org.jetbrains.kotlin.psi.KtFile; -import org.jetbrains.kotlin.psi.KtFunction; -import org.jetbrains.kotlin.psi.KtPsiFactory; -import org.jetbrains.kotlin.psi.KtPsiFactoryKt; +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project +import com.intellij.psi.PsiFile +import org.jetbrains.kotlin.diagnostics.Diagnostic +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtFunction +import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType -public class AddFunctionBodyFix extends KotlinQuickFixAction { - public AddFunctionBodyFix(@NotNull KtFunction element) { - super(element); +class AddFunctionBodyFix(element: KtFunction) : KotlinQuickFixAction(element) { + override fun getFamilyName() = "Add function body" + override fun getText() = familyName + + override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + return super.isAvailable(project, editor, file) && !element.hasBody() } - @NotNull - @Override - public String getText() { - return KotlinBundle.message("add.function.body"); - } - - @NotNull - @Override - public String getFamilyName() { - return KotlinBundle.message("add.function.body"); - } - - @Override - public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiFile file) { - return super.isAvailable(project, editor, file) && !getElement().hasBody(); - } - - @Override - public void invoke(@NotNull Project project, Editor editor, @NotNull KtFile file) throws IncorrectOperationException { - KtFunction newElement = (KtFunction) getElement().copy(); - KtPsiFactory psiFactory = KtPsiFactoryKt.KtPsiFactory(file); - if (!(newElement.getLastChild() instanceof PsiWhiteSpace)) { - newElement.add(psiFactory.createWhiteSpace()); + public override fun invoke(project: Project, editor: Editor?, file: KtFile) { + if (!element.hasBody()) { + element.add(KtPsiFactory(project).createEmptyBody()) } - if (!newElement.hasBody()) { - newElement.add(psiFactory.createEmptyBody()); - } - getElement().replace(newElement); } - - public static KotlinSingleIntentionActionFactory createFactory() { - return new KotlinSingleIntentionActionFactory() { - @Nullable - @Override - public KotlinQuickFixAction createAction(@NotNull Diagnostic diagnostic) { - PsiElement element = diagnostic.getPsiElement(); - KtFunction function = PsiTreeUtil.getParentOfType(element, KtFunction.class, false); - if (function == null) return null; - return new AddFunctionBodyFix(function); - } - }; + + companion object : KotlinSingleIntentionActionFactory() { + public override fun createAction(diagnostic: Diagnostic): AddFunctionBodyFix? { + return diagnostic.psiElement.getNonStrictParentOfType()?.let { AddFunctionBodyFix(it) } + } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index b67b5ed73d1..56120346091 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -81,14 +81,13 @@ class QuickFixRegistrar : QuickFixContributor { val removeFunctionBodyFactory = RemoveFunctionBodyFix.createFactory() ABSTRACT_FUNCTION_WITH_BODY.registerFactory(removeAbstractModifierFactory, removeFunctionBodyFactory) - val addFunctionBodyFactory = AddFunctionBodyFix.createFactory() - NON_ABSTRACT_FUNCTION_WITH_NO_BODY.registerFactory(addAbstractModifierFactory, addFunctionBodyFactory) + NON_ABSTRACT_FUNCTION_WITH_NO_BODY.registerFactory(addAbstractModifierFactory, AddFunctionBodyFix) NON_VARARG_SPREAD.registerFactory(RemovePsiElementSimpleFix.createRemoveSpreadFactory()) MIXING_NAMED_AND_POSITIONED_ARGUMENTS.registerFactory(AddNameToArgumentFix) - NON_MEMBER_FUNCTION_NO_BODY.registerFactory(addFunctionBodyFactory) + NON_MEMBER_FUNCTION_NO_BODY.registerFactory(AddFunctionBodyFix) NOTHING_TO_OVERRIDE.registerFactory( RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OVERRIDE_KEYWORD), ChangeMemberFunctionSignatureFix,