diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/KtAnalysisSession.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/KtAnalysisSession.kt index e24d5e5398d..0e1d906cd62 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/KtAnalysisSession.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/KtAnalysisSession.kt @@ -73,6 +73,12 @@ public abstract class KtAnalysisSession(final override val token: KtLifetimeToke override val analysisSession: KtAnalysisSession get() = this + /** + * Creates a new [KtAnalysisSession] which depends on this analysis session, but additionally provides its own symbols derived from + * analyzing [elementToReanalyze]. + * + * @see analyzeInDependedAnalysisSession + */ public abstract fun createContextDependentCopy(originalKtFile: KtFile, elementToReanalyze: KtElement): KtAnalysisSession internal val smartCastProvider: KtSmartCastProvider get() = smartCastProviderImpl diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/analyze.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/analyze.kt index 458554d468f..7ab45320389 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/analyze.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/analyze.kt @@ -43,11 +43,18 @@ public inline fun analyze( return sessionProvider.analyze(useSiteKtModule, action) } - +/** + * Executes the given [action] in the context of a [KtAnalysisSession] that depends on an original analysis session determined by + * [originalFile]. In addition to the symbols provided by the original analysis session, the dependent analysis session provides its own + * symbols derived from analyzing [elementToReanalyze]. This allows analyzing some new or copied (and modified) element in the larger + * context of the original analysis session. + * + * @see KtAnalysisSession.createContextDependentCopy + */ public inline fun analyzeInDependedAnalysisSession( originalFile: KtFile, elementToReanalyze: KtElement, action: KtAnalysisSession.() -> R ): R = KtAnalysisSessionProvider.getInstance(originalFile.project) - .analyseInDependedAnalysisSession(originalFile, elementToReanalyze, action) \ No newline at end of file + .analyseInDependedAnalysisSession(originalFile, elementToReanalyze, action) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveSessionDepended.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveSessionDepended.kt index 2500809450b..797e4900751 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveSessionDepended.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveSessionDepended.kt @@ -32,6 +32,14 @@ import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.analysis.low.level.api.fir.util.originalDeclaration +/** + * An [LLFirResolveSession] which *depends* on an [originalFirResolveSession], but can provide its own FIR elements and symbols selectively. + * The dependent session mostly provides FIR elements and symbols from the original resolve session, but additionally provides FIR elements + * (and their associated symbols) from its own [ktToFirMapping]. + * + * [LLFirResolveSessionDepended] is used by on-air resolve to provide FIR elements for a copied declaration in the larger context of the + * original resolve session. + */ internal class LLFirResolveSessionDepended( val originalFirResolveSession: LLFirResolvableResolveSession, val towerProviderBuiltUponElement: FirTowerContextProvider,