[jvm-lang] updateMethodParametersRequest added. ExistingParameterWrapper marked as not for public use

This commit is contained in:
Nicolay Mitropolsky
2019-03-22 19:18:42 +03:00
parent a88be87f92
commit e95d1a2065
2 changed files with 23 additions and 0 deletions
@@ -12,6 +12,10 @@ public interface ChangeParametersRequest extends ActionRequest {
List<ExpectedParameter> getExpectedParameters();
/**
* Designed to be used inside {@link JvmElementActionsFactory} implementations.
* From the API calling side use {@link MethodRequestsKt#updateMethodParametersRequest(kotlin.jvm.functions.Function0, kotlin.jvm.functions.Function1)}
*/
class ExistingParameterWrapper implements ExpectedParameter {
private final JvmParameter myExistingParameter;
@@ -1,7 +1,9 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.lang.jvm.actions
import com.intellij.lang.jvm.JvmMethod
import com.intellij.lang.jvm.JvmModifier
import com.intellij.lang.jvm.JvmParameter
import com.intellij.lang.jvm.types.JvmSubstitutor
import com.intellij.lang.jvm.types.JvmType
import com.intellij.openapi.project.Project
@@ -55,9 +57,26 @@ fun constructorRequest(project: Project, parameters: List<JBPair<String, PsiType
fun setMethodParametersRequest(parameters: Iterable<Map.Entry<String, JvmType>>): ChangeParametersRequest =
SimpleChangeParametersRequest(parameters.map { expectedParameter(it.value, it.key) })
fun updateMethodParametersRequest(parametersOwnerPointer: () -> JvmMethod?,
updateFunction: (List<ExpectedParameter>) -> List<ExpectedParameter>): ChangeParametersRequest =
UpdateParametersRequest(parametersOwnerPointer, updateFunction)
private class SimpleChangeParametersRequest(private val parameters: List<ExpectedParameter>) : ChangeParametersRequest {
override fun getExpectedParameters(): List<ExpectedParameter> = parameters
override fun isValid(): Boolean = true
}
private class UpdateParametersRequest(val parametersOwnerPointer: () -> JvmMethod?,
val updateFunction: (List<ExpectedParameter>) -> List<ExpectedParameter>) : ChangeParametersRequest {
override fun getExpectedParameters(): List<ExpectedParameter> {
val jvmMethod = parametersOwnerPointer()
?: throw IllegalStateException("parametersOwnerPointer is invalid, please check isValid() before calling this method")
return updateFunction(jvmMethod.parameters.map { ChangeParametersRequest.ExistingParameterWrapper(it) })
}
override fun isValid(): Boolean = parametersOwnerPointer() != null
}