From 16b5b2dcefbb5658c59fbcb2dfe0a1b2e3d06216 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 31 Mar 2020 15:54:57 +0300 Subject: [PATCH] [FIR] Add symbol to FirAnonymousInitializer --- .../fir/declarations/FirAnonymousInitializer.kt | 5 ++++- .../builder/FirAnonymousInitializerBuilder.kt | 3 +++ .../declarations/impl/FirAnonymousInitializerImpl.kt | 6 ++++++ .../fir/symbols/impl/FirAnonymousInitializerSymbol.kt | 11 +++++++++++ .../kotlin/fir/tree/generator/BuilderConfigurator.kt | 4 ++++ .../kotlin/fir/tree/generator/FirTreeBuilder.kt | 2 +- .../kotlin/fir/tree/generator/NodeConfigurator.kt | 2 ++ .../org/jetbrains/kotlin/fir/tree/generator/Types.kt | 1 + 8 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirAnonymousInitializerSymbol.kt diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt index c0d6dbd1b68..a76babd839e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt @@ -8,8 +8,10 @@ package org.jetbrains.kotlin.fir.declarations import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.visitors.* /* @@ -17,11 +19,12 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaration { +abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaration, FirSymbolOwner { abstract override val source: FirSourceElement? abstract override val session: FirSession abstract override val resolvePhase: FirResolvePhase abstract val body: FirBlock? + abstract override val symbol: FirAnonymousInitializerSymbol abstract val controlFlowGraphReference: FirControlFlowGraphReference override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousInitializer(this, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousInitializerBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousInitializerBuilder.kt index dba11a1f581..7f9640a015a 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousInitializerBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousInitializerBuilder.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousInitializerImpl import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.visitors.* /* @@ -28,6 +29,7 @@ class FirAnonymousInitializerBuilder { lateinit var session: FirSession var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR var body: FirBlock? = null + var symbol: FirAnonymousInitializerSymbol = FirAnonymousInitializerSymbol() fun build(): FirAnonymousInitializer { return FirAnonymousInitializerImpl( @@ -35,6 +37,7 @@ class FirAnonymousInitializerBuilder { session, resolvePhase, body, + symbol, ) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt index df33da03e39..70e70d85ab8 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.visitors.* /* @@ -24,9 +25,14 @@ internal class FirAnonymousInitializerImpl( override val session: FirSession, override var resolvePhase: FirResolvePhase, override var body: FirBlock?, + override val symbol: FirAnonymousInitializerSymbol, ) : FirAnonymousInitializer() { override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference + init { + symbol.bind(this) + } + override fun acceptChildren(visitor: FirVisitor, data: D) { body?.accept(visitor, data) controlFlowGraphReference.accept(visitor, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirAnonymousInitializerSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirAnonymousInitializerSymbol.kt new file mode 100644 index 00000000000..4f71dcbbc1b --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirAnonymousInitializerSymbol.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2020 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. + */ + +package org.jetbrains.kotlin.fir.symbols.impl + +import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol + +class FirAnonymousInitializerSymbol : AbstractFirBasedSymbol() \ No newline at end of file diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt index d96e4762b79..29503c9427b 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt @@ -263,6 +263,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator(FirTree useTypes(stubReferenceType) } + builder(anonymousInitializer) { + default("symbol", "FirAnonymousInitializerSymbol()") + } + val elementsWithDefaultTypeRef = listOf( thisReceiverExpression, callableReferenceAccess, diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index a73e11a953e..49269d04334 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -26,7 +26,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val statement = element("Statement", Expression, annotationContainer) val expression = element("Expression", Expression, statement) val declaration = element("Declaration", Declaration) - val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration) + val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration, symbolOwner) val typedDeclaration = element("TypedDeclaration", Declaration, declaration, annotationContainer) val callableDeclaration = element("CallableDeclaration", Declaration, typedDeclaration, symbolOwner) val typeParameter = element("TypeParameter", Declaration, declaration, symbolOwner, annotationContainer) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index cf5d7455aab..0d7aba10ba6 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -366,7 +366,9 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } anonymousInitializer.configure { + parentArg(symbolOwner, "E", anonymousInitializer) +body(nullable = true) + +symbol(anonymousInitializerSymbolType.type) +controlFlowGraphReferenceField } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt index 526a5ba533d..a2613155a13 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt @@ -60,6 +60,7 @@ val classLikeSymbolType = type("fir.symbols.impl", "FirClassLikeSymbol<*>") val typeParameterSymbolType = type("fir.symbols.impl", "FirTypeParameterSymbol") val emptyArgumentListType = type("fir.expressions", "FirEmptyArgumentList") val firScopeProviderType = type("fir.scopes", "FirScopeProvider") +val anonymousInitializerSymbolType = type("fir.symbols.impl", "FirAnonymousInitializerSymbol") val pureAbstractElementType = generatedType("FirPureAbstractElement") val effectDeclarationType = type("fir.contracts.description", "ConeEffectDeclaration")