mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[jvm-lang] port createVoidMethodIfFixPossible
This commit is contained in:
@@ -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<JvmModifier> = emptyList(),
|
||||
override val returnType: ExpectedTypes = emptyList(),
|
||||
override val annotations: Collection<AnnotationRequest> = emptyList(),
|
||||
override val parameters: List<ExpectedParameter> = 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)
|
||||
)
|
||||
}
|
||||
+14
-15
@@ -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<UMethod>()?.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<LocalQuickFix> {
|
||||
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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user