FIR LC: use FirLightParameterList for setter parameter
to preserve the parent chain from setter parameter to setter
This commit is contained in:
committed by
Ilya Kirillov
parent
5a63498963
commit
dbce9b3d45
+11
-17
@@ -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
|
||||
|
||||
+13
-1
@@ -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 {
|
||||
|
||||
+5
-16
@@ -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<KtParameterList, PsiParameterList>,
|
||||
// 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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user