[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(
SymbolLightParameterList(this@SymbolLightAccessorMethod, propertySymbol(), parameterPopulator) ktModule = ktModule,
} parent = this@SymbolLightAccessorMethod,
callableWithReceiverSymbolPointer = containingPropertySymbolPointer,
parameterPopulator = parameterPopulator,
)
} }
override fun getParameterList(): PsiParameterList = _parametersList override fun getParameterList(): PsiParameterList = _parametersList
@@ -56,15 +56,19 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>(
override fun isVarArgs(): Boolean = _isVarArgs override fun isVarArgs(): Boolean = _isVarArgs
private val _parametersList by lazyPub { private val _parametersList by lazyPub {
withFunctionSymbol { functionSymbol -> SymbolLightParameterList(
SymbolLightParameterList(this@SymbolLightMethod, functionSymbol) { builder -> ktModule = ktModule,
parent = this@SymbolLightMethod,
callableWithReceiverSymbolPointer = functionSymbolPointer,
) { builder ->
withFunctionSymbol { functionSymbol ->
functionSymbol.valueParameters.mapIndexed { index, parameter -> functionSymbol.valueParameters.mapIndexed { index, parameter ->
val needToSkip = argumentsSkipMask?.get(index) == true val needToSkip = argumentsSkipMask?.get(index) == true
if (!needToSkip) { if (!needToSkip) {
builder.addParameter( builder.addParameter(
SymbolLightParameter( SymbolLightParameter(
parameterSymbol = parameter, 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.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject 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.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
@@ -45,9 +44,7 @@ internal class SymbolLightNoArgConstructor(
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
private val _parameterList: PsiParameterList by lazyPub { private val _parameterList: PsiParameterList by lazyPub {
analyzeForLightClasses(containingClass.ktModule) { SymbolLightParameterList(ktModule = ktModule, parent = this@SymbolLightNoArgConstructor)
SymbolLightParameterList(this@SymbolLightNoArgConstructor, callableSymbol = null) {}
}
} }
override fun getParameterList(): PsiParameterList = _parameterList 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.PsiParameter
import com.intellij.psi.PsiParameterList import com.intellij.psi.PsiParameterList
import com.intellij.psi.impl.light.LightParameterListBuilder 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.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.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.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.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.restoreSymbolOrThrowIfDisposed
import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtParameterList import org.jetbrains.kotlin.psi.KtParameterList
context(KtAnalysisSession)
internal class SymbolLightParameterList( internal class SymbolLightParameterList(
private val ktModule: KtModule,
private val parent: SymbolLightMethodBase, private val parent: SymbolLightMethodBase,
private val callableSymbol: KtCallableSymbol?, private val callableWithReceiverSymbolPointer: KtSymbolPointer<KtCallableSymbol>? = null,
parameterPopulator: (LightParameterListBuilder) -> Unit, parameterPopulator: (LightParameterListBuilder) -> Unit = {},
) : KtLightElement<KtParameterList, PsiParameterList>, ) : KtLightElement<KtParameterList, PsiParameterList>,
// With this, a parent chain is properly built: from SymbolLightParameter through SymbolLightParameterList to SymbolLightMethod // With this, a parent chain is properly built: from SymbolLightParameter through SymbolLightParameterList to SymbolLightMethod
KtLightElementBase(parent), KtLightElementBase(parent),
@@ -31,29 +35,26 @@ internal class SymbolLightParameterList(
override val kotlinOrigin: KtParameterList? override val kotlinOrigin: KtParameterList?
get() = (parent.kotlinOrigin as? KtFunction)?.valueParameterList get() = (parent.kotlinOrigin as? KtFunction)?.valueParameterList
private val clsDelegate: PsiParameterList by lazyPub { private val clsDelegate: PsiParameterList by lazy {
val builder = LightParameterListBuilder(manager, language) val builder = LightParameterListBuilder(manager, language)
callableSymbol?.let { callableWithReceiverSymbolPointer?.let {
SymbolLightParameterForReceiver.tryGet(it, parent)?.let { receiver -> analyzeForLightClasses(ktModule) {
builder.addParameter(receiver) SymbolLightParameterForReceiver.tryGet(it.restoreSymbolOrThrowIfDisposed(), parent)?.let { receiver ->
builder.addParameter(receiver)
}
} }
} }
parameterPopulator.invoke(builder) allowLightClassesOnEdt {
parameterPopulator.invoke(builder)
}
builder builder
} }
override fun getParameters(): Array<PsiParameter> { override fun getParameter(index: Int): PsiParameter? = clsDelegate.getParameter(index)
return clsDelegate.parameters override fun getParameters(): Array<PsiParameter> = clsDelegate.parameters
} override fun getParameterIndex(p: PsiParameter): Int = clsDelegate.getParameterIndex(p)
override fun getParametersCount(): Int = clsDelegate.parametersCount
override fun getParameterIndex(p: PsiParameter): Int {
return clsDelegate.getParameterIndex(p)
}
override fun getParametersCount(): Int {
return clsDelegate.parametersCount
}
} }