From 2c932c9e1dba99aa84bb9a5895f51a57af5f39a9 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Mon, 31 Jul 2023 17:05:20 +0200 Subject: [PATCH] [LL FIR] add proper lazy resolve support for script dependent declarations Such declarations (only `ResultProperty` for now) should delegate resolution to the script, because they depend on its content ^KT-60728 --- .../low/level/api/fir/api/FirDesignation.kt | 12 ++ .../api/fir/lazy/resolve/LLFirPhaseUpdater.kt | 13 +- .../LLFirAbstractBodyTargetResolver.kt | 15 +++ .../fir/transformers/LLFirBodyLazyResolver.kt | 17 +-- .../LLFirCompilerAnnotationsLazyResolver.kt | 9 ++ .../LLFirImplicitTypesLazyResolver.kt | 16 ++- .../api/fir/transformers/LLFirLazyResolver.kt | 7 ++ .../transformers/LLFirStatusLazyResolver.kt | 12 +- .../fir/transformers/LLFirTypeLazyResolver.kt | 2 + .../level/api/fir/util/declarationUtils.kt | 12 +- .../testdata/lazyResolve/script4.txt | 80 ++++++------ .../syntheticResultDeclaration.txt | 96 +++++++-------- .../syntheticResultDeclarationWithBigBody.txt | 114 +++++++++--------- 13 files changed, 229 insertions(+), 176 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt index 090599ff81e..9ac2c0a5792 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt @@ -22,11 +22,13 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.diagnostics.ConeDestructuringDeclarationsOnTopLevel +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptDependentDeclaration class FirDesignationWithFile( path: List, @@ -274,6 +276,9 @@ fun FirElementWithResolveState.tryCollectDesignationWithFile(): FirDesignationWi } is FirDeclaration -> { + val scriptDesignation = scriptDesignation() + if (scriptDesignation != null) return scriptDesignation + val path = collectDesignationPath(this) ?: return null val firFile = path.lastOrNull()?.getContainingFile() ?: getContainingFile() ?: return null FirDesignationWithFile(path, this, firFile) @@ -282,3 +287,10 @@ fun FirElementWithResolveState.tryCollectDesignationWithFile(): FirDesignationWi else -> unexpectedElementError(this) } } + +private fun FirDeclaration.scriptDesignation(): FirDesignationWithFile? { + if (this !is FirStatement || !isScriptDependentDeclaration) return null + val firFile = getContainingFile() ?: return null + val firScript = firFile.declarations.singleOrNull() as? FirScript ?: return null + return FirDesignationWithFile(path = emptyList(), firScript, firFile) +} diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirPhaseUpdater.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirPhaseUpdater.kt index 9b38df1465d..9847c4eb513 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirPhaseUpdater.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirPhaseUpdater.kt @@ -5,11 +5,14 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptDependentDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptStatement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.visitors.FirVisitor internal object LLFirPhaseUpdater { @@ -61,9 +64,8 @@ internal object LLFirPhaseUpdater { } when (element) { - is FirFunction -> { - element.valueParameters.forEach { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) } - } + is FirScript -> element.forEachDependentDeclaration { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) } + is FirFunction -> element.valueParameters.forEach { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) } is FirProperty -> { element.getter?.let { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) } element.setter?.let { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) } @@ -77,7 +79,10 @@ internal object LLFirPhaseUpdater { private object PhaseUpdatingTransformer : FirVisitor() { override fun visitElement(element: FirElement, data: FirResolvePhase) { if (element is FirElementWithResolveState) { - if (element.resolvePhase >= data && element !is FirDefaultPropertyAccessor) return + if (element.resolvePhase >= data && + element !is FirDefaultPropertyAccessor && + !(element is FirStatement && element.isScriptDependentDeclaration) + ) return @OptIn(ResolveStateAccess::class) element.resolveState = data.asResolveState() diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt index 2faae879c8d..284b9414160 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveT import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.LLFirReturnTypeCalculatorWithJump import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.FirLazyBodiesCalculator +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptStatement import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.ResolutionMode @@ -73,4 +74,18 @@ internal abstract class LLFirAbstractBodyTargetResolver( protected open fun rawResolve(target: FirElementWithResolveState) { target.transformSingle(transformer, ResolutionMode.ContextIndependent) } + + protected fun resolveScript(script: FirScript) { + transformer.declarationsTransformer?.withScript(script) { + script.parameters.forEach { it.transformSingle(transformer, ResolutionMode.ContextIndependent) } + script.statements.forEach { + if (it.isScriptStatement) { + transformer.firResolveContextCollector?.addStatementContext(it, transformer.context) + it.transformSingle(transformer, ResolutionMode.ContextIndependent) + } + } + + script + } + } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt index 2999c1d6fda..4fbebbb4444 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt @@ -155,20 +155,9 @@ private class LLFirBodyTargetResolver( } } - override fun rawResolve(target: FirElementWithResolveState) { - if (target !is FirScript) return super.rawResolve(target) - - transformer.declarationsTransformer.withScript(target) { - target.parameters.forEach { it.transformSingle(transformer, ResolutionMode.ContextIndependent) } - target.statements.forEach { - if (it.isScriptStatement) { - transformer.firResolveContextCollector?.addStatementContext(it, transformer.context) - it.transformSingle(transformer, ResolutionMode.ContextIndependent) - } - } - - target - } + override fun rawResolve(target: FirElementWithResolveState) = when (target) { + is FirScript -> resolveScript(target) + else -> super.rawResolve(target) } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt index edec9750dd4..f25e2e0a0ea 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt @@ -31,6 +31,8 @@ import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirCompilerRequiredA import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.FirUserTypeRef +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptDependentDeclaration internal object LLFirCompilerAnnotationsLazyResolver : LLFirLazyResolver(FirResolvePhase.COMPILER_REQUIRED_ANNOTATIONS) { override fun resolve( @@ -233,6 +235,8 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( target.setter?.let(::publishResult) target.backingField?.let(::publishResult) } + + is FirScript -> target.forEachDependentDeclaration(::publishResult) } } } @@ -255,6 +259,10 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( setter?.annotationsForTransformationTo(map) backingField?.annotationsForTransformationTo(map) } + + is FirScript -> { + forEachDependentDeclaration { it.annotationsForTransformationTo(map) } + } } if (annotations.isEmpty()) return @@ -305,6 +313,7 @@ private fun FirAnnotationContainer.hasAnnotationsToResolve(): Boolean { this.setter?.hasAnnotationsToResolve() == true || this.backingField?.hasAnnotationsToResolve() == true + is FirScript -> statements.any { it.isScriptDependentDeclaration && it.hasAnnotationsToResolve() } else -> false } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirImplicitTypesLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirImplicitTypesLazyResolver.kt index f616e0d499a..817d71e9189 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirImplicitTypesLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirImplicitTypesLazyResolver.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveT import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptDependentDeclaration import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer import org.jetbrains.kotlin.fir.FirSession @@ -69,9 +70,13 @@ internal class LLFirImplicitBodyTargetResolver( is FirFunction -> resolve(target, BodyStateKeepers.FUNCTION) is FirProperty -> resolve(target, BodyStateKeepers.PROPERTY) is FirVariable -> resolve(target, BodyStateKeepers.VARIABLE) + is FirScript -> { + if (target.statements.any { it.isScriptDependentDeclaration }) { + resolve(target, BodyStateKeepers.SCRIPT) + } + } is FirRegularClass, is FirTypeAlias, - is FirScript, is FirAnonymousInitializer, is FirDanglingModifierList, is FirFileAnnotationsContainer, @@ -82,12 +87,13 @@ internal class LLFirImplicitBodyTargetResolver( } } - override fun rawResolve(target: FirElementWithResolveState) { - if (target is FirCallableDeclaration && target.attributes.fakeOverrideSubstitution != null) { + override fun rawResolve(target: FirElementWithResolveState): Unit = when { + target is FirScript -> resolveScript(target) + target is FirCallableDeclaration && target.attributes.fakeOverrideSubstitution != null -> { transformer.returnTypeCalculator.fakeOverrideTypeCalculator.computeReturnType(target) - return + Unit } - super.rawResolve(target) + else -> super.rawResolve(target) } } \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyResolver.kt index d62b18c7a23..18caffc371c 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyResolver.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveT import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirPhaseUpdater import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* @@ -58,6 +59,7 @@ internal abstract class LLFirLazyResolver( checkPropertyAccessorsAreResolved(target) checkPropertyBackingFieldIsResolved(target) checkTypeParametersAreResolved(target) + checkScriptDependentDeclaration(target) } private fun checkPropertyAccessorsAreResolved(declaration: FirDeclaration) { @@ -92,4 +94,9 @@ internal abstract class LLFirLazyResolver( } } } + + private fun checkScriptDependentDeclaration(declaration: FirDeclaration) { + if (declaration !is FirScript) return + declaration.forEachDependentDeclaration(::checkIsResolved) + } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirStatusLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirStatusLazyResolver.kt index 3287ca461a5..bfcb6720470 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirStatusLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirStatusLazyResolver.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.asResolveTarg import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkDeclarationStatusIsResolved +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* @@ -166,13 +167,10 @@ private class LLFirStatusTargetResolver( override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { when (target) { - is FirRegularClass -> { - error("should be resolved in doResolveWithoutLock") - } - is FirScript -> {} - else -> { - target.transformSingle(transformer, data = null) - } + is FirRegularClass -> error("should be resolved in doResolveWithoutLock") + // It is fine to call status transformer under lock, because declarations can't have a containing class + is FirScript -> target.forEachDependentDeclaration { it.transformSingle(transformer, data = null) } + else -> target.transformSingle(transformer, data = null) } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt index 002fcef97be..662f96704a6 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReceiverTypeRef import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkTypeRefIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer @@ -138,6 +139,7 @@ private class LLFirTypeTargetResolver( private fun resolveScriptTypes(firScript: FirScript) { firScript.annotations.forEach { it.accept(transformer, null) } firScript.contextReceivers.forEach { it.accept(transformer, null) } + firScript.forEachDependentDeclaration { it.accept(transformer, null) } } private fun resolveClassTypes(firClass: FirRegularClass) { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt index 5f15644c943..f5bd05980a1 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt @@ -220,4 +220,14 @@ internal inline fun FirDeclaration.forEachDeclaration(action: (FirDeclaration) - } } -internal val FirStatement.isScriptStatement: Boolean get() = this !is FirDeclaration || origin is FirDeclarationOrigin.ScriptCustomization \ No newline at end of file +internal val FirStatement.isScriptStatement: Boolean get() = this !is FirDeclaration || isScriptDependentDeclaration + +internal val FirStatement.isScriptDependentDeclaration: Boolean + get() = this is FirDeclaration && origin == FirDeclarationOrigin.ScriptCustomization.ResultProperty + +internal inline fun FirScript.forEachDependentDeclaration(action: (FirDeclaration) -> Unit) { + for (statement in statements) { + if (statement !is FirDeclaration || !statement.isScriptDependentDeclaration) continue + action(statement) + } +} diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/script4.txt b/analysis/low-level-api-fir/testdata/lazyResolve/script4.txt index ebd1079cff3..8a8ccf3c458 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/script4.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/script4.txt @@ -87,8 +87,8 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts ) public? [ResolvedTo(RAW_FIR)] get(): - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() + public [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] get(): COMPANION_GENERATION: @@ -118,8 +118,8 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts ) public? [ResolvedTo(RAW_FIR)] get(): - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(COMPANION_GENERATION)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() + public [ResolvedTo(COMPANION_GENERATION)] get(): SUPER_TYPES: @@ -149,8 +149,8 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts ) public? [ResolvedTo(RAW_FIR)] get(): - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(SUPER_TYPES)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() + public [ResolvedTo(SUPER_TYPES)] get(): TYPES: @@ -180,8 +180,8 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts ) public? [ResolvedTo(RAW_FIR)] get(): - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(TYPES)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() + public [ResolvedTo(TYPES)] get(): STATUS: @@ -211,8 +211,8 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts ) public? [ResolvedTo(RAW_FIR)] get(): - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(STATUS)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() + public [ResolvedTo(STATUS)] get(): EXPECT_ACTUAL_MATCHING: @@ -242,8 +242,8 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts ) public? [ResolvedTo(RAW_FIR)] get(): - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() + public [ResolvedTo(EXPECT_ACTUAL_MATCHING)] get(): ARGUMENTS_OF_ANNOTATIONS: @@ -273,8 +273,8 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts ) public? [ResolvedTo(RAW_FIR)] get(): - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() + public [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] get(): CONTRACTS: @@ -304,8 +304,8 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts ) public? [ResolvedTo(RAW_FIR)] get(): - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(CONTRACTS)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() + public [ResolvedTo(CONTRACTS)] get(): IMPLICIT_TYPES_BODY_RESOLVE: @@ -314,29 +314,29 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts SCRIPT: [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array| - public? final? [ResolvedTo(RAW_FIR)] class Builder : R|kotlin/Any| { - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Builder] constructor(): R|Builder| { + public final [ResolvedTo(STATUS)] class Builder : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Builder] constructor(): R|Builder| { super() } - public? final? [ResolvedTo(RAW_FIR)] var version: String = String() - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Builder] get(): String - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Builder] set([ResolvedTo(RAW_FIR)] value: String): R|kotlin/Unit| + public final [ResolvedTo(CONTRACTS)] var version: R|kotlin/String| = String() + public [ResolvedTo(CONTRACTS)] [ContainingClassKey=Builder] get(): R|kotlin/String| + public [ResolvedTo(CONTRACTS)] [ContainingClassKey=Builder] set([ResolvedTo(CONTRACTS)] value: R|kotlin/String|): R|kotlin/Unit| } - public? final? [ResolvedTo(RAW_FIR)] fun build([ResolvedTo(RAW_FIR)] action: ( Builder.() -> Unit )): { - ^build Builder#().apply#(action#) + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun build([ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] action: R|Builder.() -> kotlin/Unit|): R|Builder| { + ^build R|/Builder.Builder|().R|kotlin/apply|(R|/action|) } - public? final? [ResolvedTo(RAW_FIR)] val builder: = build#( = [ResolvedTo(RAW_FIR)] build@fun .(): { - version# = String(321) + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val builder: R|Builder| = R|/build|( = [ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] build@fun R|Builder|.(): R|kotlin/Unit| { + this@R|special/anonymous|.R|/Builder.version| = String(321) } ) - public? [ResolvedTo(RAW_FIR)] get(): + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|Builder| - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val $$result: = @R|kotlin/Suppress|[Types](names = vararg(String(abc))) @R|kotlin/Deprecated|[Types](message = String(it is deprecated)) R|/builder|.#() + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): ANNOTATIONS_ARGUMENTS_MAPPING: @@ -345,29 +345,29 @@ FILE: [ResolvedTo(IMPORTS)] script4.kts SCRIPT: [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array| - public? final? [ResolvedTo(RAW_FIR)] class Builder : R|kotlin/Any| { - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Builder] constructor(): R|Builder| { + public final [ResolvedTo(STATUS)] class Builder : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Builder] constructor(): R|Builder| { super() } - public? final? [ResolvedTo(RAW_FIR)] var version: String = String() - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Builder] get(): String - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Builder] set([ResolvedTo(RAW_FIR)] value: String): R|kotlin/Unit| + public final [ResolvedTo(CONTRACTS)] var version: R|kotlin/String| = String() + public [ResolvedTo(CONTRACTS)] [ContainingClassKey=Builder] get(): R|kotlin/String| + public [ResolvedTo(CONTRACTS)] [ContainingClassKey=Builder] set([ResolvedTo(CONTRACTS)] value: R|kotlin/String|): R|kotlin/Unit| } - public? final? [ResolvedTo(RAW_FIR)] fun build([ResolvedTo(RAW_FIR)] action: ( Builder.() -> Unit )): { - ^build Builder#().apply#(action#) + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun build([ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] action: R|Builder.() -> kotlin/Unit|): R|Builder| { + ^build R|/Builder.Builder|().R|kotlin/apply|(R|/action|) } - public? final? [ResolvedTo(RAW_FIR)] val builder: = build#( = [ResolvedTo(RAW_FIR)] build@fun .(): { - version# = String(321) + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val builder: R|Builder| = R|/build|( = [ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] build@fun R|Builder|.(): R|kotlin/Unit| { + this@R|special/anonymous|.R|/Builder.version| = String(321) } ) - public? [ResolvedTo(RAW_FIR)] get(): + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|Builder| - public final [ResolvedTo(RAW_FIR)] val $$result: = @Suppress[Unresolved](String(abc)) @Deprecated[Unresolved](String(it is deprecated)) builder#.execute#() - public [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val $$result: = @R|kotlin/Suppress|[Types](names = vararg(String(abc))) @R|kotlin/Deprecated|[Types](message = String(it is deprecated)) R|/builder|.#() + public [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] get(): BODY_RESOLVE: diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/syntheticResultDeclaration.txt b/analysis/low-level-api-fir/testdata/lazyResolve/syntheticResultDeclaration.txt index 8fc8e0524ca..ab488627d9e 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/syntheticResultDeclaration.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/syntheticResultDeclaration.txt @@ -29,155 +29,155 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclaration.kts COMPILER_REQUIRED_ANNOTATIONS: FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclaration.kts context(