[LL FIR] do not rebuild entire script for lazy calculation of result$$ property
After the previous commit, it is possible to rebuild initializer for `result$$` property without a full script creation. Also, this commit fixes anchor symbol for annotations inside script statements ^KT-65344
This commit is contained in:
committed by
Space Team
parent
338c533a58
commit
6135a98e4e
+25
-4
@@ -11,6 +11,7 @@ import kotlinx.collections.immutable.persistentListOf
|
|||||||
import kotlinx.collections.immutable.toPersistentList
|
import kotlinx.collections.immutable.toPersistentList
|
||||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.withFirDesignationEntry
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
|
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
|
||||||
@@ -85,11 +86,31 @@ internal object FirLazyBodiesCalculator {
|
|||||||
return newAnnotationCall.argumentList
|
return newAnnotationCall.argumentList
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createDeclarationsForScript(designation: FirDesignation): List<FirDeclaration> {
|
fun createResultPropertyInitializer(scriptDesignation: FirDesignation, property: FirProperty): FirExpression {
|
||||||
designation.target as FirScript
|
val script = scriptDesignation.target
|
||||||
|
requireWithAttachment(script is FirScript, { "${FirScript::class.simpleName} is not found" }) {
|
||||||
|
withFirDesignationEntry("designation", scriptDesignation)
|
||||||
|
withFirEntry("property", property)
|
||||||
|
}
|
||||||
|
|
||||||
val newScript = revive<FirScript>(designation)
|
val propertyDesignation = FirDesignation(path = scriptDesignation.path + script, target = property)
|
||||||
return newScript.declarations
|
val newInitializer = revive<FirAnonymousInitializer>(propertyDesignation)
|
||||||
|
val body = newInitializer.body
|
||||||
|
requireWithAttachment(body != null, { "${FirAnonymousInitializer::class.simpleName} without body" }) {
|
||||||
|
withFirDesignationEntry("designation", propertyDesignation)
|
||||||
|
withFirEntry("initializer", newInitializer)
|
||||||
|
}
|
||||||
|
|
||||||
|
val singleStatement = body.statements.singleOrNull()
|
||||||
|
requireWithAttachment(singleStatement is FirExpression, { "Unexpected body content" }) {
|
||||||
|
withFirDesignationEntry("designation", propertyDesignation)
|
||||||
|
withFirEntry("initializer", newInitializer)
|
||||||
|
singleStatement?.let {
|
||||||
|
withFirEntry("statement", it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return singleStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
fun needCalculatingAnnotationCall(firAnnotationCall: FirAnnotationCall): Boolean =
|
fun needCalculatingAnnotationCall(firAnnotationCall: FirAnnotationCall): Boolean =
|
||||||
|
|||||||
+7
@@ -152,6 +152,12 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
|||||||
return buildErrorTopLevelDestructuringDeclaration(replacementDeclaration.toFirSourceElement())
|
return buildErrorTopLevelDestructuringDeclaration(replacementDeclaration.toFirSourceElement())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun convertAnonymousInitializer(element: KtAnonymousInitializer, containingDeclaration: FirDeclaration?): FirAnonymousInitializer {
|
||||||
|
val replacementDeclaration = replacementApplier?.tryReplace(element) ?: element
|
||||||
|
requireIsInstance<KtAnonymousInitializer>(replacementDeclaration)
|
||||||
|
return buildAnonymousInitializer(replacementDeclaration, containingDeclaration?.symbol)
|
||||||
|
}
|
||||||
|
|
||||||
override fun convertElement(element: KtElement, original: FirElement?): FirElement? =
|
override fun convertElement(element: KtElement, original: FirElement?): FirElement? =
|
||||||
super.convertElement(replacementApplier?.tryReplace(element) ?: element, original)
|
super.convertElement(replacementApplier?.tryReplace(element) ?: element, original)
|
||||||
|
|
||||||
@@ -347,6 +353,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
|||||||
val firFile = visitor.convertElement(declarationToBuild, originalDeclaration) as FirFile
|
val firFile = visitor.convertElement(declarationToBuild, originalDeclaration) as FirFile
|
||||||
firFile.codeFragment
|
firFile.codeFragment
|
||||||
}
|
}
|
||||||
|
is KtAnonymousInitializer -> visitor.convertAnonymousInitializer(declarationToBuild, containingDeclaration)
|
||||||
else -> visitor.convertElement(declarationToBuild, originalDeclaration)
|
else -> visitor.convertElement(declarationToBuild, originalDeclaration)
|
||||||
} as FirDeclaration
|
} as FirDeclaration
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-41
@@ -51,7 +51,6 @@ import org.jetbrains.kotlin.psi.KtCodeFragment
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment
|
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment
|
||||||
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
|
|
||||||
import org.jetbrains.kotlin.utils.exceptions.withPsiEntry
|
import org.jetbrains.kotlin.utils.exceptions.withPsiEntry
|
||||||
import org.jetbrains.kotlin.utils.findIsInstanceAnd
|
import org.jetbrains.kotlin.utils.findIsInstanceAnd
|
||||||
|
|
||||||
@@ -352,37 +351,22 @@ internal object BodyStateKeepers {
|
|||||||
val oldDeclarations = script.declarations
|
val oldDeclarations = script.declarations
|
||||||
if (oldDeclarations.none { it.isElementWhichShouldBeResolvedAsPartOfScript }) return@stateKeeper
|
if (oldDeclarations.none { it.isElementWhichShouldBeResolvedAsPartOfScript }) return@stateKeeper
|
||||||
|
|
||||||
val lastProperty = oldDeclarations.lastOrNull()
|
val resultProperty = script.findResultProperty()
|
||||||
if (lastProperty is FirProperty &&
|
if (resultProperty != null && resultProperty.bodyResolveState != FirPropertyBodyResolveState.ALL_BODIES_RESOLVED) {
|
||||||
lastProperty.origin == FirDeclarationOrigin.ScriptCustomization.ResultProperty &&
|
entity(resultProperty, RESULT_PROPERTY, designation)
|
||||||
lastProperty.bodyResolveState != FirPropertyBodyResolveState.ALL_BODIES_RESOLVED
|
|
||||||
) {
|
|
||||||
add(RESULT_PROPERTY, designation)
|
|
||||||
val recreatedDeclarations = FirLazyBodiesCalculator.createDeclarationsForScript(designation)
|
|
||||||
requireSameSize(oldDeclarations, recreatedDeclarations)
|
|
||||||
lastProperty.replaceInitializer((recreatedDeclarations.last() as FirProperty).initializer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
entityList(oldDeclarations.mapNotNull { it as? FirAnonymousInitializer }, ANONYMOUS_INITIALIZER, designation)
|
entityList(oldDeclarations.mapNotNull { it as? FirAnonymousInitializer }, ANONYMOUS_INITIALIZER, designation)
|
||||||
add(FirScript::controlFlowGraphReference, FirScript::replaceControlFlowGraphReference)
|
add(FirScript::controlFlowGraphReference, FirScript::replaceControlFlowGraphReference)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val RESULT_PROPERTY: StateKeeper<FirScript, FirDesignation> = stateKeeper { script, _ ->
|
private val RESULT_PROPERTY: StateKeeper<FirProperty, FirDesignation> = stateKeeper { property, scriptDesignation ->
|
||||||
val resultedProperty = script.findResultProperty() ?: return@stateKeeper
|
add(FirProperty::bodyResolveState, FirProperty::replaceBodyResolveState)
|
||||||
add(
|
add(FirProperty::returnTypeRef, FirProperty::replaceReturnTypeRef)
|
||||||
provider = { resultedProperty.bodyResolveState },
|
add(FirProperty::controlFlowGraphReference, FirProperty::replaceControlFlowGraphReference)
|
||||||
mutator = { _, value -> resultedProperty.replaceBodyResolveState(value) },
|
add(FirProperty::initializer, FirProperty::replaceInitializer) { _ ->
|
||||||
)
|
FirLazyBodiesCalculator.createResultPropertyInitializer(scriptDesignation, property)
|
||||||
|
}
|
||||||
add(
|
|
||||||
provider = { resultedProperty.returnTypeRef },
|
|
||||||
mutator = { _, value -> resultedProperty.replaceReturnTypeRef(value) },
|
|
||||||
)
|
|
||||||
|
|
||||||
add(
|
|
||||||
provider = { resultedProperty.controlFlowGraphReference },
|
|
||||||
mutator = { _, value -> resultedProperty.replaceControlFlowGraphReference(value) },
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val CODE_FRAGMENT: StateKeeper<FirCodeFragment, FirDesignation> = stateKeeper { _, _ ->
|
val CODE_FRAGMENT: StateKeeper<FirCodeFragment, FirDesignation> = stateKeeper { _, _ ->
|
||||||
@@ -572,21 +556,6 @@ private fun delegatedConstructorCallGuard(fir: FirDelegatedConstructorCall): Fir
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun requireSameSize(old: List<FirDeclaration>, new: List<FirDeclaration>) {
|
|
||||||
requireWithAttachment(
|
|
||||||
condition = old.size == new.size,
|
|
||||||
message = { "The number of declarations are different" }
|
|
||||||
) {
|
|
||||||
withEntryGroup("originalStatements") {
|
|
||||||
old.forEachIndexed { index, statement -> withFirEntry("statement$index", statement) }
|
|
||||||
}
|
|
||||||
|
|
||||||
withEntryGroup("newStatements") {
|
|
||||||
new.forEachIndexed { index, statement -> withFirEntry("statement$index", statement) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class LLFirCodeFragmentContext(
|
private class LLFirCodeFragmentContext(
|
||||||
override val towerDataContext: FirTowerDataContext,
|
override val towerDataContext: FirTowerDataContext,
|
||||||
override val smartCasts: Map<RealVariable, Set<ConeKotlinType>>
|
override val smartCasts: Map<RealVariable, Set<ConeKotlinType>>
|
||||||
|
|||||||
+29
-28
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -1304,24 +1304,15 @@ open class PsiRawFirBuilder(
|
|||||||
val declarationSource = declaration.toFirSourceElement()
|
val declarationSource = declaration.toFirSourceElement()
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is KtScriptInitializer -> {
|
is KtScriptInitializer -> {
|
||||||
val firBlock =
|
val initializer = buildAnonymousInitializer(
|
||||||
if (isLast) {
|
initializer = declaration,
|
||||||
// the last one need to be analyzed in script configurator to decide on result property
|
containingDeclarationSymbol = scriptSymbol,
|
||||||
// therefore no lazy conversion in this case
|
// the last one need to be analyzed in script configurator to decide on result property
|
||||||
withForcedLocalContext { declaration.body.toFirBlock() }
|
// therefore no lazy conversion in this case
|
||||||
} else {
|
allowLazyBody = !isLast,
|
||||||
buildOrLazyBlock { withForcedLocalContext { declaration.body.toFirBlock() } }
|
|
||||||
}
|
|
||||||
declarations.add(
|
|
||||||
buildAnonymousInitializer {
|
|
||||||
moduleData = baseModuleData
|
|
||||||
origin = FirDeclarationOrigin.Source
|
|
||||||
source = declarationSource
|
|
||||||
body = firBlock
|
|
||||||
declaration.extractAnnotationsTo(this)
|
|
||||||
containingDeclarationSymbol = scriptSymbol
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
declarations.add(initializer)
|
||||||
}
|
}
|
||||||
is KtDestructuringDeclaration -> {
|
is KtDestructuringDeclaration -> {
|
||||||
val destructuringContainerVar = generateTemporaryVariable(
|
val destructuringContainerVar = generateTemporaryVariable(
|
||||||
@@ -2237,24 +2228,34 @@ open class PsiRawFirBuilder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnonymousInitializer(initializer: KtAnonymousInitializer, data: FirElement?): FirElement {
|
override fun visitAnonymousInitializer(initializer: KtAnonymousInitializer, data: FirElement?): FirElement {
|
||||||
return buildAnonymousInitializer(initializer, null)
|
return buildAnonymousInitializer(initializer, containingDeclarationSymbol = null)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildAnonymousInitializer(initializer: KtAnonymousInitializer, containingDeclarationSymbol: FirBasedSymbol<*>?) =
|
protected fun buildAnonymousInitializer(
|
||||||
buildAnonymousInitializer {
|
initializer: KtAnonymousInitializer,
|
||||||
withContainerSymbol(symbol) {
|
containingDeclarationSymbol: FirBasedSymbol<*>?,
|
||||||
source = initializer.toFirSourceElement()
|
allowLazyBody: Boolean = true,
|
||||||
moduleData = baseModuleData
|
) = buildAnonymousInitializer {
|
||||||
origin = FirDeclarationOrigin.Source
|
withContainerSymbol(symbol) {
|
||||||
body = buildOrLazyBlock {
|
source = initializer.toFirSourceElement()
|
||||||
|
moduleData = baseModuleData
|
||||||
|
origin = FirDeclarationOrigin.Source
|
||||||
|
body = if (allowLazyBody) {
|
||||||
|
buildOrLazyBlock {
|
||||||
withForcedLocalContext {
|
withForcedLocalContext {
|
||||||
initializer.body.toFirBlock()
|
initializer.body.toFirBlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.containingDeclarationSymbol = containingDeclarationSymbol
|
} else {
|
||||||
initializer.extractAnnotationsTo(this)
|
withForcedLocalContext {
|
||||||
|
initializer.body.toFirBlock()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.containingDeclarationSymbol = containingDeclarationSymbol
|
||||||
|
initializer.extractAnnotationsTo(this)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitProperty(property: KtProperty, data: FirElement?): FirElement {
|
override fun visitProperty(property: KtProperty, data: FirElement?): FirElement {
|
||||||
return property.toFirProperty(
|
return property.toFirProperty(
|
||||||
|
|||||||
+6
-6
@@ -1,23 +1,23 @@
|
|||||||
@DestrAnno(<strcat>(String(destr 1 ), prop#))
|
@DestrAnno(<strcat>(String(destr 1 ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/<destruct> from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
context -> FirPropertySymbol <local>/<destruct> from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
||||||
|
|
||||||
@LeftAnno(<strcat>(String(a ), prop#))
|
@LeftAnno(<strcat>(String(a ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/a from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
context -> FirPropertySymbol <local>/a from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
||||||
|
|
||||||
@RightAnno(<strcat>(String(b ), prop#))
|
@RightAnno(<strcat>(String(b ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/b from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
context -> FirPropertySymbol <local>/b from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
||||||
|
|
||||||
@Destr2Anno(<strcat>(String(destr 1 ), prop#))
|
@Destr2Anno(<strcat>(String(destr 1 ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/<destruct> from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
context -> FirPropertySymbol <local>/<destruct> from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
||||||
|
|
||||||
@SecondLeftAnno(<strcat>(String(c ), prop#))
|
@SecondLeftAnno(<strcat>(String(c ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/c from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
context -> FirPropertySymbol <local>/c from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
||||||
|
|
||||||
@SecondRightAnno(<strcat>(String(d ), prop#))
|
@SecondRightAnno(<strcat>(String(d ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/d from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
context -> FirPropertySymbol <local>/d from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotation.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotation.kts
|
||||||
+6
-6
@@ -1,23 +1,23 @@
|
|||||||
@DestrAnno(<strcat>(String(destr 1 ), prop#))
|
@DestrAnno(<strcat>(String(destr 1 ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/<destruct> from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
context -> FirPropertySymbol <local>/<destruct> from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
||||||
|
|
||||||
@LeftAnno(<strcat>(String(a ), prop#))
|
@LeftAnno(<strcat>(String(a ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/a from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
context -> FirPropertySymbol <local>/a from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
||||||
|
|
||||||
@RightAnno(<strcat>(String(b ), prop#))
|
@RightAnno(<strcat>(String(b ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/b from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
context -> FirPropertySymbol <local>/b from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
||||||
|
|
||||||
@Destr2Anno(<strcat>(String(destr 1 ), prop#))
|
@Destr2Anno(<strcat>(String(destr 1 ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/<destruct> from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
context -> FirPropertySymbol <local>/<destruct> from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
||||||
|
|
||||||
@SecondLeftAnno(<strcat>(String(c ), prop#))
|
@SecondLeftAnno(<strcat>(String(c ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/c from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
context -> FirPropertySymbol <local>/c from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
||||||
|
|
||||||
@SecondRightAnno(<strcat>(String(d ), prop#))
|
@SecondRightAnno(<strcat>(String(d ), prop#))
|
||||||
owner -> FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts>
|
owner -> FirAnonymousInitializerSymbol <init>
|
||||||
context -> FirPropertySymbol <local>/d from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
context -> FirPropertySymbol <local>/d from FirAnonymousInitializerSymbol <init> from FirScriptSymbol util.<script-scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts> from FirFileSymbol scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
|
||||||
Reference in New Issue
Block a user