[SLC] drop KtAnalysisSession from SymbolLightParameterList

^KT-54051
This commit is contained in:
Dmitrii Gridin
2022-11-17 09:41:24 +01:00
committed by Space Team
parent 029d6bb3a0
commit e1cc244be0
4 changed files with 35 additions and 30 deletions
@@ -239,9 +239,12 @@ internal class SymbolLightAccessorMethod(
{ }
}
analyzeForLightClasses(ktModule) {
SymbolLightParameterList(this@SymbolLightAccessorMethod, propertySymbol(), parameterPopulator)
}
SymbolLightParameterList(
ktModule = ktModule,
parent = this@SymbolLightAccessorMethod,
callableWithReceiverSymbolPointer = containingPropertySymbolPointer,
parameterPopulator = parameterPopulator,
)
}
override fun getParameterList(): PsiParameterList = _parametersList
@@ -56,15 +56,19 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>(
override fun isVarArgs(): Boolean = _isVarArgs
private val _parametersList by lazyPub {
withFunctionSymbol { functionSymbol ->
SymbolLightParameterList(this@SymbolLightMethod, functionSymbol) { builder ->
SymbolLightParameterList(
ktModule = ktModule,
parent = this@SymbolLightMethod,
callableWithReceiverSymbolPointer = functionSymbolPointer,
) { builder ->
withFunctionSymbol { functionSymbol ->
functionSymbol.valueParameters.mapIndexed { index, parameter ->
val needToSkip = argumentsSkipMask?.get(index) == true
if (!needToSkip) {
builder.addParameter(
SymbolLightParameter(
parameterSymbol = parameter,
containingMethod = this@SymbolLightMethod
containingMethod = this@SymbolLightMethod,
)
)
}
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject
import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
@@ -45,9 +44,7 @@ internal class SymbolLightNoArgConstructor(
override fun getModifierList(): PsiModifierList = _modifierList
private val _parameterList: PsiParameterList by lazyPub {
analyzeForLightClasses(containingClass.ktModule) {
SymbolLightParameterList(this@SymbolLightNoArgConstructor, callableSymbol = null) {}
}
SymbolLightParameterList(ktModule = ktModule, parent = this@SymbolLightNoArgConstructor)
}
override fun getParameterList(): PsiParameterList = _parameterList
@@ -8,20 +8,24 @@ package org.jetbrains.kotlin.light.classes.symbol.parameters
import com.intellij.psi.PsiParameter
import com.intellij.psi.PsiParameterList
import com.intellij.psi.impl.light.LightParameterListBuilder
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.project.structure.KtModule
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.light.classes.symbol.allowLightClassesOnEdt
import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.restoreSymbolOrThrowIfDisposed
import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtParameterList
context(KtAnalysisSession)
internal class SymbolLightParameterList(
private val ktModule: KtModule,
private val parent: SymbolLightMethodBase,
private val callableSymbol: KtCallableSymbol?,
parameterPopulator: (LightParameterListBuilder) -> Unit,
private val callableWithReceiverSymbolPointer: KtSymbolPointer<KtCallableSymbol>? = null,
parameterPopulator: (LightParameterListBuilder) -> Unit = {},
) : KtLightElement<KtParameterList, PsiParameterList>,
// With this, a parent chain is properly built: from SymbolLightParameter through SymbolLightParameterList to SymbolLightMethod
KtLightElementBase(parent),
@@ -31,29 +35,26 @@ internal class SymbolLightParameterList(
override val kotlinOrigin: KtParameterList?
get() = (parent.kotlinOrigin as? KtFunction)?.valueParameterList
private val clsDelegate: PsiParameterList by lazyPub {
private val clsDelegate: PsiParameterList by lazy {
val builder = LightParameterListBuilder(manager, language)
callableSymbol?.let {
SymbolLightParameterForReceiver.tryGet(it, parent)?.let { receiver ->
builder.addParameter(receiver)
callableWithReceiverSymbolPointer?.let {
analyzeForLightClasses(ktModule) {
SymbolLightParameterForReceiver.tryGet(it.restoreSymbolOrThrowIfDisposed(), parent)?.let { receiver ->
builder.addParameter(receiver)
}
}
}
parameterPopulator.invoke(builder)
allowLightClassesOnEdt {
parameterPopulator.invoke(builder)
}
builder
}
override fun getParameters(): Array<PsiParameter> {
return clsDelegate.parameters
}
override fun getParameterIndex(p: PsiParameter): Int {
return clsDelegate.getParameterIndex(p)
}
override fun getParametersCount(): Int {
return clsDelegate.parametersCount
}
override fun getParameter(index: Int): PsiParameter? = clsDelegate.getParameter(index)
override fun getParameters(): Array<PsiParameter> = clsDelegate.parameters
override fun getParameterIndex(p: PsiParameter): Int = clsDelegate.getParameterIndex(p)
override fun getParametersCount(): Int = clsDelegate.parametersCount
}