From e1cc244be0a4023481b431d181cf8ccb39f8342b Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 17 Nov 2022 09:41:24 +0100 Subject: [PATCH] [SLC] drop KtAnalysisSession from SymbolLightParameterList ^KT-54051 --- .../methods/SymbolLightAccessorMethod.kt | 9 ++-- .../symbol/methods/SymbolLightMethod.kt | 10 +++-- .../methods/SymbolLightNoArgConstructor.kt | 5 +-- .../parameters/SymbolLightParameterList.kt | 41 ++++++++++--------- 4 files changed, 35 insertions(+), 30 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt index 9fd367b92db..b03ff880080 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt @@ -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 diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt index 66087653a82..a10207e5711 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt @@ -56,15 +56,19 @@ internal abstract class SymbolLightMethod( 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, ) ) } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt index 3657c17f257..c1b725c1cbf 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt @@ -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 diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterList.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterList.kt index f4c26ae8ae6..9722ed1d58c 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterList.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterList.kt @@ -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? = null, + parameterPopulator: (LightParameterListBuilder) -> Unit = {}, ) : KtLightElement, // 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 { - 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 = clsDelegate.parameters + override fun getParameterIndex(p: PsiParameter): Int = clsDelegate.getParameterIndex(p) + override fun getParametersCount(): Int = clsDelegate.parametersCount }