From 46f5c2073d507d5a7200a06c099da1722640602e Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 19 Apr 2021 17:19:34 +0300 Subject: [PATCH] [FIR] Make most of declarations a sealed classes/interfaces --- .../declarations/FirAnnotatedDeclaration.kt | 2 +- .../declarations/FirCallableDeclaration.kt | 2 +- .../FirCallableMemberDeclaration.kt | 2 +- .../kotlin/fir/declarations/FirClass.kt | 2 +- .../declarations/FirClassLikeDeclaration.kt | 2 +- .../FirContractDescriptionOwner.kt | 2 +- .../kotlin/fir/declarations/FirDeclaration.kt | 2 +- .../kotlin/fir/declarations/FirFunction.kt | 2 +- .../fir/declarations/FirMemberDeclaration.kt | 2 +- .../declarations/FirTypeParameterRefsOwner.kt | 2 +- .../declarations/FirTypeParametersOwner.kt | 2 +- .../fir/declarations/FirTypedDeclaration.kt | 2 +- .../kotlin/fir/declarations/FirVariable.kt | 2 +- .../kotlin/fir/expressions/FirCall.kt | 2 +- .../kotlin/fir/expressions/FirJump.kt | 2 +- .../kotlin/fir/expressions/FirLoop.kt | 2 +- .../kotlin/fir/expressions/FirResolvable.kt | 2 +- .../jetbrains/kotlin/fir/types/FirTypeRef.kt | 2 +- .../fir/declarations/FirDeclarationUtil.kt | 1 - .../FirMemberDeclarationComparator.kt | 7 ++-- .../fir/tree/generator/FirTreeBuilder.kt | 36 +++++++++---------- 21 files changed, 38 insertions(+), 42 deletions(-) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnnotatedDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnnotatedDeclaration.kt index bb8a15d20c5..379587a86ec 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnnotatedDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnnotatedDeclaration.kt @@ -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 diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt index 25cabd76f80..a4e19dac335 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -interface FirCallableDeclaration> : FirTypedDeclaration, FirSymbolOwner { +sealed interface FirCallableDeclaration> : FirTypedDeclaration, FirSymbolOwner { override val source: FirSourceElement? override val session: FirSession override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt index a47ed1dd4ec..9acdeb5dee2 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -interface FirCallableMemberDeclaration> : FirCallableDeclaration, FirMemberDeclaration { +sealed interface FirCallableMemberDeclaration> : FirCallableDeclaration, FirMemberDeclaration { override val source: FirSourceElement? override val session: FirSession override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClass.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClass.kt index 3ad5d1a04e7..040316e5b66 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClass.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClass.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -interface FirClass> : FirClassLikeDeclaration, FirStatement, FirTypeParameterRefsOwner { +sealed interface FirClass> : FirClassLikeDeclaration, FirStatement, FirTypeParameterRefsOwner { override val source: FirSourceElement? override val session: FirSession override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt index 313161cdfcf..99137b1c06f 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -interface FirClassLikeDeclaration> : FirAnnotatedDeclaration, FirStatement, FirSymbolOwner { +sealed interface FirClassLikeDeclaration> : FirAnnotatedDeclaration, FirStatement, FirSymbolOwner { override val source: FirSourceElement? override val session: FirSession override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirContractDescriptionOwner.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirContractDescriptionOwner.kt index b433ed9781a..da02950e532 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirContractDescriptionOwner.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirContractDescriptionOwner.kt @@ -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 diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt index b07d245b176..a803fd1fde9 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt @@ -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 diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt index 22748a603e7..7171629e38c 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -interface FirFunction> : FirCallableDeclaration, FirTargetElement, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirStatement { +sealed interface FirFunction> : FirCallableDeclaration, FirTargetElement, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirStatement { override val source: FirSourceElement? override val session: FirSession override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt index 4e624666be2..349da001219 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt @@ -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 diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParameterRefsOwner.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParameterRefsOwner.kt index ddd3f383a37..791c19c96a6 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParameterRefsOwner.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParameterRefsOwner.kt @@ -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 diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParametersOwner.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParametersOwner.kt index 1089500831f..4527862f90d 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParametersOwner.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParametersOwner.kt @@ -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 diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt index b0c78c75b96..937b74bc717 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt @@ -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 diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirVariable.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirVariable.kt index d30a7555822..10edf2a473e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirVariable.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirVariable.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirVariable> : FirPureAbstractElement(), FirCallableDeclaration, FirAnnotatedDeclaration, FirStatement { +sealed class FirVariable> : FirPureAbstractElement(), FirCallableDeclaration, FirAnnotatedDeclaration, FirStatement { abstract override val source: FirSourceElement? abstract override val session: FirSession abstract override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCall.kt index f345efd53e6..e697fec9ba6 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCall.kt @@ -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 val argumentList: FirArgumentList diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirJump.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirJump.kt index f1b9cd129c8..fbcd5e9bbde 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirJump.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirJump.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirJump : FirExpression() { +sealed class FirJump : FirExpression() { abstract override val source: FirSourceElement? abstract override val typeRef: FirTypeRef abstract override val annotations: List diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirLoop.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirLoop.kt index 27e3b5f0f56..39ea6d199fd 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirLoop.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirLoop.kt @@ -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 abstract val block: FirBlock diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirResolvable.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirResolvable.kt index 3582af307c6..1d8a06a51c8 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirResolvable.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirResolvable.kt @@ -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 diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/FirTypeRef.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/FirTypeRef.kt index c6a421ad6d3..f27fd948b88 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/FirTypeRef.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/FirTypeRef.kt @@ -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 diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt index 0951f09154b..ae5bf64ba51 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt @@ -180,7 +180,6 @@ val FirMemberDeclaration.containerSource: SourceElement? is FirCallableMemberDeclaration<*> -> containerSource is FirRegularClass -> sourceElement is FirTypeAlias -> sourceElement - else -> null } private object IsFromVarargKey : FirDeclarationDataKey() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclarationComparator.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclarationComparator.kt index 231e6343877..d9826335116 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclarationComparator.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclarationComparator.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.name.Name object FirMemberDeclarationComparator : Comparator { // Comparing different kinds of callable members by assigning distinct priorities to those members. object TypeAndNameComparator : Comparator { - 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 { 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 { this.classId.shortClassName is FirTypeAlias -> this.name - else -> - error("Unsupported name retrieval for ${render()}") } override fun compare(a: FirMemberDeclaration, b: FirMemberDeclaration): Int { 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 735a2390931..33f36619765 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 @@ -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)