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.KtPropertyGetterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySymbol
|
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.light.classes.symbol.parameters.FirLightSetterParameterForSymbol
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi.getterName
|
import org.jetbrains.kotlin.load.java.JvmAbi.getterName
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi.setterName
|
import org.jetbrains.kotlin.load.java.JvmAbi.setterName
|
||||||
@@ -168,25 +169,18 @@ internal class FirLightAccessorMethodForSymbol(
|
|||||||
|
|
||||||
|
|
||||||
private val _parametersList by lazyPub {
|
private val _parametersList by lazyPub {
|
||||||
val builder = LightParameterListBuilder(manager, language)
|
FirLightParameterList(this, containingPropertySymbol) { builder ->
|
||||||
|
val propertyParameter = (propertyAccessorSymbol as? KtPropertySetterSymbol)?.parameter
|
||||||
FirLightParameterForReceiver.tryGet(containingPropertySymbol, this)?.let {
|
if (propertyParameter != null) {
|
||||||
builder.addParameter(it)
|
builder.addParameter(
|
||||||
}
|
FirLightSetterParameterForSymbol(
|
||||||
|
parameterSymbol = propertyParameter,
|
||||||
val propertyParameter = (propertyAccessorSymbol as? KtPropertySetterSymbol)?.parameter
|
containingPropertySymbol = containingPropertySymbol,
|
||||||
|
containingMethod = this@FirLightAccessorMethodForSymbol
|
||||||
if (propertyParameter != null) {
|
)
|
||||||
builder.addParameter(
|
|
||||||
FirLightSetterParameterForSymbol(
|
|
||||||
parameterSymbol = propertyParameter,
|
|
||||||
containingPropertySymbol = containingPropertySymbol,
|
|
||||||
containingMethod = this@FirLightAccessorMethodForSymbol
|
|
||||||
)
|
)
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
builder
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getParameterList(): PsiParameterList = _parametersList
|
override fun getParameterList(): PsiParameterList = _parametersList
|
||||||
|
|||||||
+13
-1
@@ -31,7 +31,19 @@ internal abstract class FirLightMethodForSymbol(
|
|||||||
override fun isVarArgs(): Boolean = _isVarArgs
|
override fun isVarArgs(): Boolean = _isVarArgs
|
||||||
|
|
||||||
private val _parametersList by lazyPub {
|
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 {
|
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.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
|
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.FirLightMethod
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.FirLightParameterForReceiver
|
import org.jetbrains.kotlin.light.classes.symbol.FirLightParameterForReceiver
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.FirLightParameterForSymbol
|
import org.jetbrains.kotlin.light.classes.symbol.FirLightParameterForSymbol
|
||||||
import org.jetbrains.kotlin.psi.KtFunction
|
import org.jetbrains.kotlin.psi.KtFunction
|
||||||
import org.jetbrains.kotlin.psi.KtParameterList
|
import org.jetbrains.kotlin.psi.KtParameterList
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
internal class FirLightParameterList(
|
internal class FirLightParameterList(
|
||||||
private val parent: FirLightMethod,
|
private val parent: FirLightMethod,
|
||||||
private val functionSymbol: KtFunctionLikeSymbol,
|
private val callableSymbol: KtCallableSymbol,
|
||||||
argumentsSkipMask: BitSet? = null
|
parameterPopulator: (LightParameterListBuilder) -> Unit,
|
||||||
) : KtLightElement<KtParameterList, PsiParameterList>,
|
) : KtLightElement<KtParameterList, PsiParameterList>,
|
||||||
// With this, a parent chain is properly built: from FirLightParameter through FirLightParameterList to FirLightMethod
|
// With this, a parent chain is properly built: from FirLightParameter through FirLightParameterList to FirLightMethod
|
||||||
KtLightElementBase(parent),
|
KtLightElementBase(parent),
|
||||||
@@ -35,21 +34,11 @@ internal class FirLightParameterList(
|
|||||||
override val clsDelegate: PsiParameterList by lazyPub {
|
override val clsDelegate: PsiParameterList by lazyPub {
|
||||||
val builder = LightParameterListBuilder(manager, language)
|
val builder = LightParameterListBuilder(manager, language)
|
||||||
|
|
||||||
FirLightParameterForReceiver.tryGet(functionSymbol, parent)?.let {
|
FirLightParameterForReceiver.tryGet(callableSymbol, parent)?.let {
|
||||||
builder.addParameter(it)
|
builder.addParameter(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
functionSymbol.valueParameters.mapIndexed { index, parameter ->
|
parameterPopulator.invoke(builder)
|
||||||
val needToSkip = argumentsSkipMask?.get(index) == true
|
|
||||||
if (!needToSkip) {
|
|
||||||
builder.addParameter(
|
|
||||||
FirLightParameterForSymbol(
|
|
||||||
parameterSymbol = parameter,
|
|
||||||
containingMethod = parent
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
builder
|
builder
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user