Get rid of FirNamedDeclaration

This commit is contained in:
Mikhail Glukhikh
2020-02-03 14:37:18 +03:00
parent 7a52cf103a
commit 677129ad20
16 changed files with 45 additions and 94 deletions
@@ -417,8 +417,8 @@ class KotlinDeserializedJvmSymbolsProvider(
override fun getAllCallableNamesInClass(classId: ClassId): Set<Name> =
getClassDeclarations(classId)
.filterIsInstance<FirNamedDeclaration>()
.mapTo(mutableSetOf(), FirNamedDeclaration::name)
.filterIsInstance<FirMemberDeclaration>()
.mapTo(mutableSetOf(), FirMemberDeclaration::name)
override fun getNestedClassesNamesInClass(classId: ClassId): Set<Name> {
return getClassDeclarations(classId).filterIsInstance<FirRegularClass>().mapTo(mutableSetOf()) { it.name }
@@ -125,7 +125,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
storeVariableReturnType(variable)
}
variable.transformAccessors()
localScopes.lastOrNull()?.storeDeclaration(variable)
localScopes.lastOrNull()?.storeVariable(variable)
variable.replaceResolvePhase(transformerPhase)
dataFlowAnalyzer.exitVariableDeclaration(variable)
return variable.compose()
@@ -223,7 +223,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
}
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): CompositeTransformResult<FirStatement> {
localScopes.lastOrNull()?.storeDeclaration(regularClass)
localScopes.lastOrNull()?.storeClass(regularClass)
return withScopeCleanup(topLevelScopes) {
prepareTypeParameterOwnerForBodyResolve(regularClass)
if (regularClass.symbol.classId.isLocal) {
@@ -239,7 +239,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
val constructor = regularClass.declarations.firstOrNull() as? FirConstructor
if (constructor?.isPrimary == true) {
primaryConstructorParametersScope = FirLocalScope().apply {
constructor.valueParameters.forEach { this.storeDeclaration(it) }
constructor.valueParameters.forEach { this.storeVariable(it) }
}
}
transformDeclaration(regularClass, data)
@@ -327,7 +327,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
returnTypeRef: FirTypeRef
): CompositeTransformResult<F> {
if (function is FirSimpleFunction) {
localScopes.lastOrNull()?.storeDeclaration(function)
localScopes.lastOrNull()?.storeFunction(function)
}
@Suppress("UNCHECKED_CAST")
@@ -383,7 +383,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
}
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): CompositeTransformResult<FirStatement> {
localScopes.lastOrNull()?.storeDeclaration(valueParameter)
localScopes.lastOrNull()?.storeVariable(valueParameter)
if (valueParameter.returnTypeRef is FirImplicitTypeRef) {
valueParameter.replaceResolvePhase(transformerPhase)
return valueParameter.compose() // TODO
@@ -17,14 +17,18 @@ class FirLocalScope : FirScope() {
val functions = mutableMapOf<Name, MutableList<FirFunctionSymbol<*>>>()
val classes = mutableMapOf<Name, FirRegularClassSymbol>()
fun storeDeclaration(declaration: FirNamedDeclaration) {
when (declaration) {
is FirVariable<*> -> properties[declaration.name] = declaration.symbol
is FirSimpleFunction -> functions.getOrPut(declaration.name) {
mutableListOf()
}.add(declaration.symbol as FirNamedFunctionSymbol)
is FirRegularClass -> classes[declaration.name] = declaration.symbol
}
fun storeClass(klass: FirRegularClass) {
classes[klass.name] = klass.symbol
}
fun storeFunction(function: FirSimpleFunction) {
functions.getOrPut(function.name) {
mutableListOf()
}.add(function.symbol as FirNamedFunctionSymbol)
}
fun storeVariable(variable: FirVariable<*>) {
properties[variable.name] = variable.symbol
}
fun storeBackingField(property: FirProperty) {
@@ -17,12 +17,12 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirMemberDeclaration : FirNamedDeclaration, FirAnnotationContainer {
interface FirMemberDeclaration : FirDeclaration, FirAnnotationContainer {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val name: Name
override val annotations: List<FirAnnotationCall>
val name: Name
val typeParameters: List<FirTypeParameter>
val status: FirDeclarationStatus
@@ -1,25 +0,0 @@
/*
* 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.declarations
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
interface FirNamedDeclaration : FirDeclaration {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
val name: Name
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitNamedDeclaration(this, data)
}
@@ -24,8 +24,8 @@ interface FirRegularClass : FirMemberDeclaration, FirTypeParametersOwner, FirCla
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val name: Name
override val annotations: List<FirAnnotationCall>
override val name: Name
override val typeParameters: List<FirTypeParameter>
override val status: FirDeclarationStatus
override val classKind: ClassKind
@@ -26,8 +26,8 @@ abstract class FirSealedClass : FirPureAbstractElement(), FirRegularClass {
abstract override val source: FirSourceElement?
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val name: Name
abstract override val annotations: List<FirAnnotationCall>
abstract override val name: Name
abstract override val typeParameters: List<FirTypeParameter>
abstract override val status: FirDeclarationStatus
abstract override val classKind: ClassKind
@@ -22,11 +22,11 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirTypeParameter : FirPureAbstractElement(), FirNamedDeclaration, FirSymbolOwner<FirTypeParameter>, FirAnnotationContainer {
abstract class FirTypeParameter : FirPureAbstractElement(), FirDeclaration, FirSymbolOwner<FirTypeParameter>, FirAnnotationContainer {
abstract override val source: FirSourceElement?
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val name: Name
abstract val name: Name
abstract override val symbol: FirTypeParameterSymbol
abstract val variance: Variance
abstract val isReified: Boolean
@@ -21,13 +21,13 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirVariable<F : FirVariable<F>> : FirCallableDeclaration<F>, FirNamedDeclaration, FirStatement {
interface FirVariable<F : FirVariable<F>> : FirCallableDeclaration<F>, FirDeclaration, FirStatement {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val returnTypeRef: FirTypeRef
override val receiverTypeRef: FirTypeRef?
override val name: Name
val name: Name
override val symbol: FirVariableSymbol<F>
val initializer: FirExpression?
val delegate: FirExpression?
@@ -30,8 +30,8 @@ interface FirModifiableRegularClass : FirRegularClass, FirModifiableClass<FirReg
override val source: FirSourceElement?
override val session: FirSession
override var resolvePhase: FirResolvePhase
override val name: Name
override val annotations: MutableList<FirAnnotationCall>
override val name: Name
override val typeParameters: MutableList<FirTypeParameter>
override var status: FirDeclarationStatus
override val classKind: ClassKind
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
@@ -203,10 +202,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformElement(callableDeclaration, data)
}
open fun transformNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
return transformElement(namedDeclaration, data)
}
open fun transformTypeParameter(typeParameter: FirTypeParameter, data: D): CompositeTransformResult<FirDeclaration> {
return transformElement(typeParameter, data)
}
@@ -663,10 +658,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformCallableDeclaration(callableDeclaration, data)
}
final override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
return transformNamedDeclaration(namedDeclaration, data)
}
final override fun visitTypeParameter(typeParameter: FirTypeParameter, data: D): CompositeTransformResult<FirDeclaration> {
return transformTypeParameter(typeParameter, data)
}
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
@@ -165,8 +164,6 @@ abstract class FirVisitor<out R, in D> {
open fun <F : FirCallableDeclaration<F>> visitCallableDeclaration(callableDeclaration: FirCallableDeclaration<F>, data: D): R = visitElement(callableDeclaration, data)
open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): R = visitElement(namedDeclaration, data)
open fun visitTypeParameter(typeParameter: FirTypeParameter, data: D): R = visitElement(typeParameter, data)
open fun visitTypeParametersOwner(typeParametersOwner: FirTypeParametersOwner, data: D): R = visitElement(typeParametersOwner, data)
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
@@ -201,10 +200,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(callableDeclaration)
}
open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) {
visitElement(namedDeclaration)
}
open fun visitTypeParameter(typeParameter: FirTypeParameter) {
visitElement(typeParameter)
}
@@ -661,10 +656,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitCallableDeclaration(callableDeclaration)
}
final override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: Nothing?) {
visitNamedDeclaration(namedDeclaration)
}
final override fun visitTypeParameter(typeParameter: FirTypeParameter, data: Nothing?) {
visitTypeParameter(typeParameter)
}
@@ -135,8 +135,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
receiverType.accept(this)
print(".")
}
if (callableDeclaration is FirNamedDeclaration) {
print(callableDeclaration.name)
when (callableDeclaration) {
is FirMemberDeclaration -> print(callableDeclaration.name)
is FirVariable<*> -> print(callableDeclaration.name)
}
if (callableDeclaration is FirFunction<*>) {
@@ -238,20 +239,16 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
}
}
visitNamedDeclaration(memberDeclaration)
}
override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) {
visitDeclaration(namedDeclaration)
if (namedDeclaration !is FirCallableDeclaration<*>) { // Handled by visitCallableDeclaration
print(" " + namedDeclaration.name)
if (namedDeclaration is FirTypeParametersOwner) {
namedDeclaration.typeParameters.renderTypeParameters()
visitDeclaration(memberDeclaration)
if (memberDeclaration !is FirCallableDeclaration<*>) { // Handled by visitCallableDeclaration
print(" " + memberDeclaration.name)
if (memberDeclaration is FirTypeParametersOwner) {
memberDeclaration.typeParameters.renderTypeParameters()
}
} else if (namedDeclaration is FirMemberDeclaration) {
if (namedDeclaration.typeParameters.isNotEmpty()) {
} else {
if (memberDeclaration.typeParameters.isNotEmpty()) {
print(" ")
namedDeclaration.typeParameters.renderTypeParameters()
memberDeclaration.typeParameters.renderTypeParameters()
}
}
}
@@ -273,8 +270,6 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
)
}
private fun List<FirDeclaration>.renderDeclarations() {
renderInBraces {
for (declaration in this) {
@@ -30,13 +30,12 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration)
val typedDeclaration = element("TypedDeclaration", Declaration, declaration, annotationContainer)
val callableDeclaration = element("CallableDeclaration", Declaration, typedDeclaration, symbolOwner)
val namedDeclaration = element("NamedDeclaration", Declaration, declaration)
val typeParameter = element("TypeParameter", Declaration, namedDeclaration, symbolOwner, annotationContainer)
val typeParameter = element("TypeParameter", Declaration, declaration, symbolOwner, annotationContainer)
val typeParametersOwner = element("TypeParametersOwner", Declaration)
val memberDeclaration = element("MemberDeclaration", Declaration, namedDeclaration, annotationContainer)
val memberDeclaration = element("MemberDeclaration", Declaration, declaration, annotationContainer)
val callableMemberDeclaration = element("CallableMemberDeclaration", Declaration, callableDeclaration, memberDeclaration)
val variable = element("Variable", Declaration, callableDeclaration, namedDeclaration, statement)
val variable = element("Variable", Declaration, callableDeclaration, declaration, statement)
val valueParameter = element("ValueParameter", Declaration, variable)
val property = element("Property", Declaration, variable, controlFlowGraphOwner, typeParametersOwner, callableMemberDeclaration)
val field = element("Field", Declaration, variable, callableMemberDeclaration)
@@ -85,10 +85,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("containerSource", type(DeserializedContainerSource::class), nullable = true)
}
namedDeclaration.configure {
+name
}
function.configure {
withArg("F", "FirFunction<F>")
parentArg(callableDeclaration, "F", "F")
@@ -103,6 +99,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
}
memberDeclaration.configure {
+name
+typeParameters
+status.withTransform()
}
@@ -255,6 +252,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
typeParameter.configure {
parentArg(symbolOwner, "F", typeParameter)
+name
+symbol("FirTypeParameterSymbol")
+field(varianceType)
+booleanField("isReified")
@@ -333,6 +331,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
variable.configure {
withArg("F", variable)
parentArg(callableDeclaration, "F", "F")
+name
+symbol("FirVariableSymbol", "F")
+initializer.withTransform()
+field("delegate", expression, nullable = true)