Add Function Body Quick-Fix: Convert to Kotlin & refactor
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
#quick fix messages
|
#quick fix messages
|
||||||
add.function.body=Add function body
|
|
||||||
add.return.type=Add return type declaration
|
add.return.type=Add return type declaration
|
||||||
change.accessor.type=Change accessor type
|
change.accessor.type=Change accessor type
|
||||||
change.getter.type=Change getter type to {0}
|
change.getter.type=Change getter type to {0}
|
||||||
|
|||||||
@@ -14,69 +14,34 @@
|
|||||||
* limitations under the License.
|
* 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.editor.Editor
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.psi.PsiFile;
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import com.intellij.psi.PsiWhiteSpace;
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import org.jetbrains.kotlin.psi.KtFunction
|
||||||
import com.intellij.util.IncorrectOperationException;
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
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;
|
|
||||||
|
|
||||||
public class AddFunctionBodyFix extends KotlinQuickFixAction<KtFunction> {
|
class AddFunctionBodyFix(element: KtFunction) : KotlinQuickFixAction<KtFunction>(element) {
|
||||||
public AddFunctionBodyFix(@NotNull KtFunction element) {
|
override fun getFamilyName() = "Add function body"
|
||||||
super(element);
|
override fun getText() = familyName
|
||||||
|
|
||||||
|
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean {
|
||||||
|
return super.isAvailable(project, editor, file) && !element.hasBody()
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
public override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||||
@Override
|
if (!element.hasBody()) {
|
||||||
public String getText() {
|
element.add(KtPsiFactory(project).createEmptyBody())
|
||||||
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());
|
|
||||||
}
|
}
|
||||||
if (!newElement.hasBody()) {
|
|
||||||
newElement.add(psiFactory.createEmptyBody());
|
|
||||||
}
|
|
||||||
getElement().replace(newElement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static KotlinSingleIntentionActionFactory createFactory() {
|
companion object : KotlinSingleIntentionActionFactory() {
|
||||||
return new KotlinSingleIntentionActionFactory() {
|
public override fun createAction(diagnostic: Diagnostic): AddFunctionBodyFix? {
|
||||||
@Nullable
|
return diagnostic.psiElement.getNonStrictParentOfType<KtFunction>()?.let { AddFunctionBodyFix(it) }
|
||||||
@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);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,14 +81,13 @@ class QuickFixRegistrar : QuickFixContributor {
|
|||||||
val removeFunctionBodyFactory = RemoveFunctionBodyFix.createFactory()
|
val removeFunctionBodyFactory = RemoveFunctionBodyFix.createFactory()
|
||||||
ABSTRACT_FUNCTION_WITH_BODY.registerFactory(removeAbstractModifierFactory, removeFunctionBodyFactory)
|
ABSTRACT_FUNCTION_WITH_BODY.registerFactory(removeAbstractModifierFactory, removeFunctionBodyFactory)
|
||||||
|
|
||||||
val addFunctionBodyFactory = AddFunctionBodyFix.createFactory()
|
NON_ABSTRACT_FUNCTION_WITH_NO_BODY.registerFactory(addAbstractModifierFactory, AddFunctionBodyFix)
|
||||||
NON_ABSTRACT_FUNCTION_WITH_NO_BODY.registerFactory(addAbstractModifierFactory, addFunctionBodyFactory)
|
|
||||||
|
|
||||||
NON_VARARG_SPREAD.registerFactory(RemovePsiElementSimpleFix.createRemoveSpreadFactory())
|
NON_VARARG_SPREAD.registerFactory(RemovePsiElementSimpleFix.createRemoveSpreadFactory())
|
||||||
|
|
||||||
MIXING_NAMED_AND_POSITIONED_ARGUMENTS.registerFactory(AddNameToArgumentFix)
|
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),
|
NOTHING_TO_OVERRIDE.registerFactory( RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OVERRIDE_KEYWORD),
|
||||||
ChangeMemberFunctionSignatureFix,
|
ChangeMemberFunctionSignatureFix,
|
||||||
|
|||||||
Reference in New Issue
Block a user