[FIR] Make most of declarations a sealed classes/interfaces

This commit is contained in:
Dmitriy Novozhilov
2021-04-19 17:19:34 +03:00
committed by TeamCityServer
parent 7f7373dad2
commit 46f5c2073d
21 changed files with 38 additions and 42 deletions
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirAnnotatedDeclaration : FirDeclaration, FirAnnotationContainer {
sealed interface FirAnnotatedDeclaration : FirDeclaration, FirAnnotationContainer {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirCallableDeclaration<F : FirCallableDeclaration<F>> : FirTypedDeclaration, FirSymbolOwner<F> {
sealed interface FirCallableDeclaration<F : FirCallableDeclaration<F>> : FirTypedDeclaration, FirSymbolOwner<F> {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirCallableMemberDeclaration<F : FirCallableMemberDeclaration<F>> : FirCallableDeclaration<F>, FirMemberDeclaration {
sealed interface FirCallableMemberDeclaration<F : FirCallableMemberDeclaration<F>> : FirCallableDeclaration<F>, FirMemberDeclaration {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirClass<F : FirClass<F>> : FirClassLikeDeclaration<F>, FirStatement, FirTypeParameterRefsOwner {
sealed interface FirClass<F : FirClass<F>> : FirClassLikeDeclaration<F>, FirStatement, FirTypeParameterRefsOwner {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirAnnotatedDeclaration, FirStatement, FirSymbolOwner<F> {
sealed interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirAnnotatedDeclaration, FirStatement, FirSymbolOwner<F> {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirContractDescriptionOwner : FirElement {
sealed interface FirContractDescriptionOwner : FirElement {
override val source: FirSourceElement?
val contractDescription: FirContractDescription
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirDeclaration : FirElement {
sealed interface FirDeclaration : FirElement {
override val source: FirSourceElement?
val session: FirSession
val resolvePhase: FirResolvePhase
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirFunction<F : FirFunction<F>> : FirCallableDeclaration<F>, FirTargetElement, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirStatement {
sealed interface FirFunction<F : FirFunction<F>> : FirCallableDeclaration<F>, FirTargetElement, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirStatement {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirMemberDeclaration : FirAnnotatedDeclaration, FirTypeParameterRefsOwner {
sealed interface FirMemberDeclaration : FirAnnotatedDeclaration, FirTypeParameterRefsOwner {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirTypeParameterRefsOwner : FirElement {
sealed interface FirTypeParameterRefsOwner : FirElement {
override val source: FirSourceElement?
val typeParameters: List<FirTypeParameterRef>
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirTypeParametersOwner : FirTypeParameterRefsOwner {
sealed interface FirTypeParametersOwner : FirTypeParameterRefsOwner {
override val source: FirSourceElement?
override val typeParameters: List<FirTypeParameter>
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirTypedDeclaration : FirAnnotatedDeclaration {
sealed interface FirTypedDeclaration : FirAnnotatedDeclaration {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirVariable<F : FirVariable<F>> : FirPureAbstractElement(), FirCallableDeclaration<F>, FirAnnotatedDeclaration, FirStatement {
sealed class FirVariable<F : FirVariable<F>> : FirPureAbstractElement(), FirCallableDeclaration<F>, FirAnnotatedDeclaration, FirStatement {
abstract override val source: FirSourceElement?
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirCall : FirStatement {
sealed interface FirCall : FirStatement {
override val source: FirSourceElement?
override val annotations: List<FirAnnotationCall>
val argumentList: FirArgumentList
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirJump<E : FirTargetElement> : FirExpression() {
sealed class FirJump<E : FirTargetElement> : FirExpression() {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirLoop : FirPureAbstractElement(), FirStatement, FirTargetElement {
sealed class FirLoop : FirPureAbstractElement(), FirStatement, FirTargetElement {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract val block: FirBlock
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirResolvable : FirElement {
sealed interface FirResolvable : FirElement {
override val source: FirSourceElement?
val calleeReference: FirReference
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirTypeRef : FirPureAbstractElement(), FirAnnotationContainer {
sealed class FirTypeRef : FirPureAbstractElement(), FirAnnotationContainer {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
@@ -180,7 +180,6 @@ val FirMemberDeclaration.containerSource: SourceElement?
is FirCallableMemberDeclaration<*> -> containerSource
is FirRegularClass -> sourceElement
is FirTypeAlias -> sourceElement
else -> null
}
private object IsFromVarargKey : FirDeclarationDataKey()
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.name.Name
object FirMemberDeclarationComparator : Comparator<FirMemberDeclaration> {
// Comparing different kinds of callable members by assigning distinct priorities to those members.
object TypeAndNameComparator : Comparator<FirMemberDeclaration> {
private val FirMemberDeclaration.priority : Int
private val FirMemberDeclaration.priority: Int
get() = when (this) {
is FirEnumEntry -> 7
is FirConstructor -> 6
@@ -21,10 +21,9 @@ object FirMemberDeclarationComparator : Comparator<FirMemberDeclaration> {
is FirFunction<*> -> 3
is FirClass<*> -> 2
is FirTypeAlias -> 1
else -> 0
}
private val FirMemberDeclaration.name : Name
private val FirMemberDeclaration.name: Name
get() = when (this) {
is FirCallableMemberDeclaration<*> ->
this.symbol.callableId.callableName
@@ -32,8 +31,6 @@ object FirMemberDeclarationComparator : Comparator<FirMemberDeclaration> {
this.classId.shortClassName
is FirTypeAlias ->
this.name
else ->
error("Unsupported name retrieval for ${render()}")
}
override fun compare(a: FirMemberDeclaration, b: FirMemberDeclaration): Int {
@@ -11,13 +11,13 @@ import org.jetbrains.kotlin.fir.tree.generator.model.Element.Kind.*
@Suppress("unused", "MemberVisibilityCanBePrivate")
object FirTreeBuilder : AbstractFirTreeBuilder() {
val annotationContainer = element("AnnotationContainer", Other)
val typeRef = element("TypeRef", TypeRef, annotationContainer)
val typeRef = sealedElement("TypeRef", TypeRef, annotationContainer)
val reference = element("Reference", Reference)
val label = element("Label", Other)
val import = element("Import", Declaration)
val resolvedImport = element("ResolvedImport", Declaration, import)
val symbolOwner = element("SymbolOwner", Other)
val resolvable = element("Resolvable", Expression)
val resolvable = sealedElement("Resolvable", Expression)
val targetElement = element("TargetElement", Other)
@@ -28,32 +28,32 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val statement = element("Statement", Expression, annotationContainer)
val expression = element("Expression", Expression, statement)
val declaration = element("Declaration", Declaration)
val annotatedDeclaration = element("AnnotatedDeclaration", Declaration, declaration, annotationContainer)
val declaration = sealedElement("Declaration", Declaration)
val annotatedDeclaration = sealedElement("AnnotatedDeclaration", Declaration, declaration, annotationContainer)
val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration, symbolOwner, controlFlowGraphOwner)
val typedDeclaration = element("TypedDeclaration", Declaration, annotatedDeclaration)
val callableDeclaration = element("CallableDeclaration", Declaration, typedDeclaration, symbolOwner)
val typedDeclaration = sealedElement("TypedDeclaration", Declaration, annotatedDeclaration)
val callableDeclaration = sealedElement("CallableDeclaration", Declaration, typedDeclaration, symbolOwner)
val typeParameterRef = element("TypeParameterRef", Declaration)
val typeParameter = element("TypeParameter", Declaration, typeParameterRef, annotatedDeclaration, symbolOwner)
val typeParameterRefsOwner = element("TypeParameterRefsOwner", Declaration)
val typeParametersOwner = element("TypeParametersOwner", Declaration, typeParameterRefsOwner)
val memberDeclaration = element("MemberDeclaration", Declaration, annotatedDeclaration, typeParameterRefsOwner)
val callableMemberDeclaration = element("CallableMemberDeclaration", Declaration, callableDeclaration, memberDeclaration)
val typeParameterRefsOwner = sealedElement("TypeParameterRefsOwner", Declaration)
val typeParametersOwner = sealedElement("TypeParametersOwner", Declaration, typeParameterRefsOwner)
val memberDeclaration = sealedElement("MemberDeclaration", Declaration, annotatedDeclaration, typeParameterRefsOwner)
val callableMemberDeclaration = sealedElement("CallableMemberDeclaration", Declaration, callableDeclaration, memberDeclaration)
val variable = element("Variable", Declaration, callableDeclaration, annotatedDeclaration, statement)
val variable = sealedElement("Variable", Declaration, callableDeclaration, annotatedDeclaration, statement)
val valueParameter = element("ValueParameter", Declaration, variable, controlFlowGraphOwner)
val property = element("Property", Declaration, variable, typeParametersOwner, controlFlowGraphOwner, callableMemberDeclaration)
val field = element("Field", Declaration, variable, typeParametersOwner, callableMemberDeclaration)
val enumEntry = element("EnumEntry", Declaration, variable, callableMemberDeclaration)
val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, annotatedDeclaration, statement, symbolOwner)
val klass = element("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner)
val classLikeDeclaration = sealedElement("ClassLikeDeclaration", Declaration, annotatedDeclaration, statement, symbolOwner)
val klass = sealedElement("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner)
val regularClass = element("RegularClass", Declaration, memberDeclaration, typeParameterRefsOwner, controlFlowGraphOwner, klass)
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration, memberDeclaration, typeParametersOwner)
val function = element("Function", Declaration, callableDeclaration, targetElement, typeParameterRefsOwner, controlFlowGraphOwner, statement)
val function = sealedElement("Function", Declaration, callableDeclaration, targetElement, typeParameterRefsOwner, controlFlowGraphOwner, statement)
val contractDescriptionOwner = element("ContractDescriptionOwner", Declaration)
val contractDescriptionOwner = sealedElement("ContractDescriptionOwner", Declaration)
val simpleFunction = element("SimpleFunction", Declaration, function, callableMemberDeclaration, contractDescriptionOwner, typeParametersOwner)
val propertyAccessor = element("PropertyAccessor", Declaration, function, callableMemberDeclaration, contractDescriptionOwner, typeParametersOwner)
val constructor = element("Constructor", Declaration, function, callableMemberDeclaration, typeParameterRefsOwner)
@@ -64,14 +64,14 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val diagnosticHolder = element("DiagnosticHolder", Diagnostics)
val loop = element("Loop", Expression, statement, targetElement)
val loop = sealedElement("Loop", Expression, statement, targetElement)
val errorLoop = element("ErrorLoop", Expression, loop, diagnosticHolder)
val doWhileLoop = element("DoWhileLoop", Expression, loop)
val whileLoop = element("WhileLoop", Expression, loop)
val block = element("Block", Expression, expression)
val binaryLogicExpression = element("BinaryLogicExpression", Expression, expression)
val jump = element("Jump", Expression, expression)
val jump = sealedElement("Jump", Expression, expression)
val loopJump = element("LoopJump", Expression, jump)
val breakExpression = element("BreakExpression", Expression, loopJump)
val continueExpression = element("ContinueExpression", Expression, loopJump)
@@ -82,7 +82,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val starProjection = element("StarProjection", TypeRef, typeProjection)
val typeProjectionWithVariance = element("TypeProjectionWithVariance", TypeRef, typeProjection)
val argumentList = element("ArgumentList", Expression)
val call = element("Call", Expression, statement) // TODO: may smth like `CallWithArguments` or `ElementWithArguments`?
val call = sealedElement("Call", Expression, statement) // TODO: may smth like `CallWithArguments` or `ElementWithArguments`?
val annotationCall = element("AnnotationCall", Expression, expression, call, resolvable)
val comparisonExpression = element("ComparisonExpression", Expression, expression)
val typeOperatorCall = element("TypeOperatorCall", Expression, expression, call)