From e95d1a20652cba82c50425523192dba45cecc42a Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Fri, 22 Mar 2019 17:56:04 +0300 Subject: [PATCH] [jvm-lang] `updateMethodParametersRequest` added. `ExistingParameterWrapper` marked as not for public use --- .../jvm/actions/ChangeParametersRequest.java | 4 ++++ .../lang/jvm/actions/methodRequests.kt | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/java/java-analysis-api/src/com/intellij/lang/jvm/actions/ChangeParametersRequest.java b/java/java-analysis-api/src/com/intellij/lang/jvm/actions/ChangeParametersRequest.java index 9fe148310e05..fb78006bbca6 100644 --- a/java/java-analysis-api/src/com/intellij/lang/jvm/actions/ChangeParametersRequest.java +++ b/java/java-analysis-api/src/com/intellij/lang/jvm/actions/ChangeParametersRequest.java @@ -12,6 +12,10 @@ public interface ChangeParametersRequest extends ActionRequest { List 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; 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 index 7f81603cb545..311def8e1af4 100644 --- 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 @@ -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>): ChangeParametersRequest = SimpleChangeParametersRequest(parameters.map { expectedParameter(it.value, it.key) }) +fun updateMethodParametersRequest(parametersOwnerPointer: () -> JvmMethod?, + updateFunction: (List) -> List): ChangeParametersRequest = + UpdateParametersRequest(parametersOwnerPointer, updateFunction) + private class SimpleChangeParametersRequest(private val parameters: List) : ChangeParametersRequest { override fun getExpectedParameters(): List = parameters override fun isValid(): Boolean = true } + +private class UpdateParametersRequest(val parametersOwnerPointer: () -> JvmMethod?, + val updateFunction: (List) -> List) : ChangeParametersRequest { + + override fun getExpectedParameters(): List { + 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 + +}