[FIR] Add symbol to FirAnonymousInitializer

This commit is contained in:
Dmitriy Novozhilov
2020-03-31 15:54:57 +03:00
parent bcd2e5ed2c
commit 16b5b2dcef
8 changed files with 32 additions and 2 deletions
@@ -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<FirAnonymousInitializer> {
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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousInitializer(this, data)
@@ -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,
)
}
@@ -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 <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
body?.accept(visitor, data)
controlFlowGraphReference.accept(visitor, data)
@@ -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<FirAnonymousInitializer>()
@@ -263,6 +263,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
useTypes(stubReferenceType)
}
builder(anonymousInitializer) {
default("symbol", "FirAnonymousInitializerSymbol()")
}
val elementsWithDefaultTypeRef = listOf(
thisReceiverExpression,
callableReferenceAccess,
@@ -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)
@@ -366,7 +366,9 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
}
anonymousInitializer.configure {
parentArg(symbolOwner, "E", anonymousInitializer)
+body(nullable = true)
+symbol(anonymousInitializerSymbolType.type)
+controlFlowGraphReferenceField
}
@@ -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")