From dbce9b3d451391f07f38b2e4197d2e78247c29e0 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Thu, 26 Aug 2021 17:03:35 -0700 Subject: [PATCH] FIR LC: use FirLightParameterList for setter parameter to preserve the parent chain from setter parameter to setter --- .../FirLightAccessorMethodForSymbol.kt | 28 ++++++++----------- .../symbol/methods/FirLightMethodForSymbol.kt | 14 +++++++++- .../parameters/FirLightParameterList.kt | 21 ++++---------- 3 files changed, 29 insertions(+), 34 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt index 9ab74bf5503..f95aea20e7c 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyAccessorSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySymbol +import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightSetterParameterForSymbol import org.jetbrains.kotlin.load.java.JvmAbi.getterName import org.jetbrains.kotlin.load.java.JvmAbi.setterName @@ -168,25 +169,18 @@ internal class FirLightAccessorMethodForSymbol( private val _parametersList by lazyPub { - val builder = LightParameterListBuilder(manager, language) - - FirLightParameterForReceiver.tryGet(containingPropertySymbol, this)?.let { - builder.addParameter(it) - } - - val propertyParameter = (propertyAccessorSymbol as? KtPropertySetterSymbol)?.parameter - - if (propertyParameter != null) { - builder.addParameter( - FirLightSetterParameterForSymbol( - parameterSymbol = propertyParameter, - containingPropertySymbol = containingPropertySymbol, - containingMethod = this@FirLightAccessorMethodForSymbol + FirLightParameterList(this, containingPropertySymbol) { builder -> + val propertyParameter = (propertyAccessorSymbol as? KtPropertySetterSymbol)?.parameter + if (propertyParameter != null) { + builder.addParameter( + FirLightSetterParameterForSymbol( + parameterSymbol = propertyParameter, + containingPropertySymbol = containingPropertySymbol, + containingMethod = this@FirLightAccessorMethodForSymbol + ) ) - ) + } } - - builder } override fun getParameterList(): PsiParameterList = _parametersList diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightMethodForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightMethodForSymbol.kt index d5bf7d104a7..b5d46041b4b 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightMethodForSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightMethodForSymbol.kt @@ -31,7 +31,19 @@ internal abstract class FirLightMethodForSymbol( override fun isVarArgs(): Boolean = _isVarArgs private val _parametersList by lazyPub { - FirLightParameterList(this, functionSymbol, argumentsSkipMask) + FirLightParameterList(this, functionSymbol) { builder -> + functionSymbol.valueParameters.mapIndexed { index, parameter -> + val needToSkip = argumentsSkipMask?.get(index) == true + if (!needToSkip) { + builder.addParameter( + FirLightParameterForSymbol( + parameterSymbol = parameter, + containingMethod = this@FirLightMethodForSymbol + ) + ) + } + } + } } private val _identifier: PsiIdentifier by lazyPub { diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/FirLightParameterList.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/FirLightParameterList.kt index 2e19f4a27c6..b43fc767778 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/FirLightParameterList.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/FirLightParameterList.kt @@ -11,18 +11,17 @@ import com.intellij.psi.impl.light.LightParameterListBuilder import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.elements.KtLightElementBase -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionLikeSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.light.classes.symbol.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.FirLightParameterForReceiver import org.jetbrains.kotlin.light.classes.symbol.FirLightParameterForSymbol import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtParameterList -import java.util.* internal class FirLightParameterList( private val parent: FirLightMethod, - private val functionSymbol: KtFunctionLikeSymbol, - argumentsSkipMask: BitSet? = null + private val callableSymbol: KtCallableSymbol, + parameterPopulator: (LightParameterListBuilder) -> Unit, ) : KtLightElement, // With this, a parent chain is properly built: from FirLightParameter through FirLightParameterList to FirLightMethod KtLightElementBase(parent), @@ -35,21 +34,11 @@ internal class FirLightParameterList( override val clsDelegate: PsiParameterList by lazyPub { val builder = LightParameterListBuilder(manager, language) - FirLightParameterForReceiver.tryGet(functionSymbol, parent)?.let { + FirLightParameterForReceiver.tryGet(callableSymbol, parent)?.let { builder.addParameter(it) } - functionSymbol.valueParameters.mapIndexed { index, parameter -> - val needToSkip = argumentsSkipMask?.get(index) == true - if (!needToSkip) { - builder.addParameter( - FirLightParameterForSymbol( - parameterSymbol = parameter, - containingMethod = parent - ) - ) - } - } + parameterPopulator.invoke(builder) builder }