From 58d193ad7fba5d4adfff32c7d34bc2a181a90b69 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Mon, 25 Sep 2017 14:36:37 +0200 Subject: [PATCH] [jvm-lang] port createVoidMethodIfFixPossible --- .../lang/jvm/actions/methodRequests.kt | 43 +++++++++++++++++++ .../daemon/impl/quickfix/CreateMethodFix.kt | 29 ++++++------- 2 files changed, 57 insertions(+), 15 deletions(-) create mode 100644 java/java-analysis-api/src/com/intellij/lang/jvm/actions/methodRequests.kt diff --git a/java/java-analysis-api/src/com/intellij/lang/jvm/actions/methodRequests.kt b/java/java-analysis-api/src/com/intellij/lang/jvm/actions/methodRequests.kt new file mode 100644 index 000000000000..b709cf2d4d1a --- /dev/null +++ b/java/java-analysis-api/src/com/intellij/lang/jvm/actions/methodRequests.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.lang.jvm.actions + +import com.intellij.lang.jvm.JvmModifier +import com.intellij.lang.jvm.types.JvmSubstitutor +import com.intellij.lang.jvm.types.JvmType +import com.intellij.openapi.project.Project +import com.intellij.psi.PsiJvmSubstitutor +import com.intellij.psi.PsiSubstitutor + +private class SimpleMethodRequest( + override val methodName: String, + override val modifiers: Collection = emptyList(), + override val returnType: ExpectedTypes = emptyList(), + override val annotations: Collection = emptyList(), + override val parameters: List = emptyList(), + override val targetSubstitutor: JvmSubstitutor +) : CreateMethodRequest { + override val isValid: Boolean = true +} + +fun methodRequest(project: Project, methodName: String, modifier: JvmModifier, returnType: JvmType): CreateMethodRequest { + return SimpleMethodRequest( + methodName = methodName, + modifiers = listOf(modifier), + returnType = listOf(expectedType(returnType)), + targetSubstitutor = PsiJvmSubstitutor(project, PsiSubstitutor.EMPTY) + ) +} diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFix.kt b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFix.kt index 3a99537c482b..d44f4f399316 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFix.kt +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFix.kt @@ -16,11 +16,13 @@ package com.intellij.codeInsight.daemon.impl.quickfix import com.intellij.codeInsight.intention.IntentionAction +import com.intellij.codeInspection.IntentionWrapper.wrapToQuickFixes +import com.intellij.codeInspection.LocalQuickFix import com.intellij.codeInspection.LocalQuickFixBase import com.intellij.codeInspection.ProblemDescriptor import com.intellij.lang.jvm.JvmModifier -import com.intellij.lang.jvm.actions.MemberRequest -import com.intellij.lang.jvm.actions.createMethodAction +import com.intellij.lang.jvm.actions.createMethodActions +import com.intellij.lang.jvm.actions.methodRequest import com.intellij.openapi.module.ModuleUtilCore import com.intellij.openapi.project.Project import com.intellij.psi.* @@ -52,18 +54,15 @@ class CreateMethodFix(containingClass: @JvmCommon PsiClass, private val createMe is UMethod -> method.uastBody?.psi else -> method.toUElementOfType()?.uastBody?.psi } - - companion object { - @JvmStatic - fun createVoidMethodIfFixPossible(psiClass: @JvmCommon PsiClass, - methodName: String, - modifier: JvmModifier): CreateMethodFix? { - if (!ModuleUtilCore.projectContainsFile(psiClass.project, psiClass.containingFile.virtualFile, false)) return null - val request = MemberRequest.simpleMethodRequest(methodName, modifier, PsiType.VOID, emptyList()) - val action = createMethodAction(psiClass, request) ?: return null - return CreateMethodFix(psiClass, action) - } - } - } +fun createVoidMethodFixes(psiClass: @JvmCommon PsiClass, methodName: String, modifier: JvmModifier): Array { + if (!ModuleUtilCore.projectContainsFile(psiClass.project, psiClass.containingFile.virtualFile, false)) return LocalQuickFix.EMPTY_ARRAY + val request = methodRequest(psiClass.project, methodName, modifier, PsiType.VOID) + val actions = createMethodActions(psiClass, request) + if (actions.isEmpty()) return LocalQuickFix.EMPTY_ARRAY + return wrapToQuickFixes( + actions, + psiClass.containingFile + ).toTypedArray() +}