[FIR generator] Factor out element printer to common module

This is a step towards commonizing the code generator between
FIR and IR: KT-61970
This commit is contained in:
Sergej Jaskiewicz
2023-09-07 19:36:41 +02:00
committed by Space Team
parent 84bd12c667
commit 63e9dd588c
70 changed files with 380 additions and 153 deletions
@@ -20,6 +20,7 @@ internal class FirContractElementDeclarationImpl(
override val source: KtSourceElement?,
override val effect: ConeContractDescriptionElement,
) : FirContractElementDeclaration() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirContractElementDeclarationImpl {
@@ -20,6 +20,7 @@ internal class FirEffectDeclarationImpl(
override val source: KtSourceElement?,
override val effect: ConeEffectDeclaration,
) : FirEffectDeclaration() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirEffectDeclarationImpl {
@@ -22,6 +22,7 @@ internal class FirLegacyRawContractDescriptionImpl(
override var contractCall: FirFunctionCall,
override val diagnostic: ConeDiagnostic?,
) : FirLegacyRawContractDescription() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
contractCall.accept(visitor, data)
}
@@ -21,6 +21,7 @@ internal class FirRawContractDescriptionImpl(
override val source: KtSourceElement?,
override val rawEffects: MutableList<FirExpression>,
) : FirRawContractDescription() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
rawEffects.forEach { it.accept(visitor, data) }
}
@@ -25,6 +25,7 @@ internal class FirResolvedContractDescriptionImpl(
override val unresolvedEffects: MutableList<FirContractElementDeclaration>,
override val diagnostic: ConeDiagnostic?,
) : FirResolvedContractDescription() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
effects.forEach { it.accept(visitor, data) }
unresolvedEffects.forEach { it.accept(visitor, data) }
@@ -57,6 +57,7 @@ internal class FirAnonymousFunctionImpl(
override val typeParameters: MutableList<FirTypeParameter>,
override var typeRef: FirTypeRef,
) : FirAnonymousFunction() {
init {
symbol.bind(this)
resolveState = resolvePhase.asResolveState()
@@ -55,6 +55,7 @@ open class FirBackingFieldImpl @FirImplementationDetail constructor(
override val typeParameters: MutableList<FirTypeParameter>,
override var status: FirDeclarationStatus,
) : FirBackingField() {
init {
symbol.bind(this)
resolveState = resolvePhase.asResolveState()
@@ -33,6 +33,7 @@ internal class FirCodeFragmentImpl(
override val symbol: FirCodeFragmentSymbol,
override var block: FirBlock,
) : FirCodeFragment() {
init {
symbol.bind(this)
resolveState = resolvePhase.asResolveState()
@@ -20,6 +20,7 @@ internal class FirConstructedClassTypeParameterRefImpl(
override val source: KtSourceElement?,
override val symbol: FirTypeParameterSymbol,
) : FirConstructedClassTypeParameterRef() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirConstructedClassTypeParameterRefImpl {
@@ -23,6 +23,7 @@ internal class FirContextReceiverImpl(
override val customLabelName: Name?,
override val labelNameFromTypeRef: Name?,
) : FirContextReceiver() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
}
@@ -33,6 +33,7 @@ internal class FirDanglingModifierListImpl(
override val diagnostic: ConeDiagnostic,
override val symbol: FirDanglingModifierSymbol,
) : FirDanglingModifierList() {
init {
symbol.bind(this)
resolveState = resolvePhase.asResolveState()
@@ -24,6 +24,7 @@ internal class FirImportImpl(
override val aliasName: Name?,
override val aliasSource: KtSourceElement?,
) : FirImport() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirImportImpl {
@@ -21,6 +21,7 @@ class FirOuterClassTypeParameterRefImpl @FirImplementationDetail constructor(
override val source: KtSourceElement?,
override val symbol: FirTypeParameterSymbol,
) : FirOuterClassTypeParameterRef() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirOuterClassTypeParameterRefImpl {
@@ -25,6 +25,7 @@ internal class FirReceiverParameterImpl(
override var typeRef: FirTypeRef,
override var annotations: MutableOrEmptyList<FirAnnotation>,
) : FirReceiverParameter() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
annotations.forEach { it.accept(visitor, data) }
@@ -38,6 +38,7 @@ internal class FirScriptImpl(
override var contextReceivers: MutableOrEmptyList<FirContextReceiver>,
override val resultPropertyName: Name?,
) : FirScript() {
init {
symbol.bind(this)
resolveState = resolvePhase.asResolveState()
@@ -38,6 +38,7 @@ internal class FirTypeAliasImpl(
override var expandedTypeRef: FirTypeRef,
override var annotations: MutableOrEmptyList<FirAnnotation>,
) : FirTypeAlias() {
init {
symbol.bind(this)
resolveState = resolvePhase.asResolveState()
@@ -40,6 +40,7 @@ internal class FirTypeParameterImpl(
override val bounds: MutableList<FirTypeRef>,
override var annotations: MutableOrEmptyList<FirAnnotation>,
) : FirTypeParameter() {
init {
symbol.bind(this)
resolveState = resolvePhase.asResolveState()
@@ -30,6 +30,7 @@ internal class FirArrayLiteralImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override var argumentList: FirArgumentList,
) : FirArrayLiteral() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
argumentList.accept(visitor, data)
@@ -28,6 +28,7 @@ internal class FirAssignmentOperatorStatementImpl(
override var leftArgument: FirExpression,
override var rightArgument: FirExpression,
) : FirAssignmentOperatorStatement() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
leftArgument.accept(visitor, data)
@@ -28,6 +28,7 @@ internal class FirAugmentedArraySetCallImpl(
override var calleeReference: FirReference,
override val arrayAccessSource: KtSourceElement?,
) : FirAugmentedArraySetCall() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
lhsGetCall.accept(visitor, data)
@@ -33,6 +33,7 @@ internal class FirBinaryLogicExpressionImpl(
override var rightOperand: FirExpression,
override val kind: LogicOperationKind,
) : FirBinaryLogicExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
leftOperand.accept(visitor, data)
@@ -30,6 +30,7 @@ internal class FirBlockImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override val statements: MutableList<FirStatement>,
) : FirBlock() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
statements.forEach { it.accept(visitor, data) }
@@ -42,6 +42,7 @@ internal class FirCallableReferenceAccessImpl(
override var calleeReference: FirNamedReference,
override var hasQuestionMarkAtLHS: Boolean,
) : FirCallableReferenceAccess() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
contextReceiverArguments.forEach { it.accept(visitor, data) }
@@ -22,6 +22,7 @@ internal class FirCatchImpl(
override var parameter: FirProperty,
override var block: FirBlock,
) : FirCatch() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
parameter.accept(visitor, data)
block.accept(visitor, data)
@@ -32,6 +32,7 @@ internal class FirCheckNotNullCallImpl(
override var argumentList: FirArgumentList,
override var calleeReference: FirReference,
) : FirCheckNotNullCall() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
argumentList.accept(visitor, data)
@@ -31,6 +31,7 @@ internal class FirCheckedSafeCallSubjectImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override val originalReceiverRef: FirExpressionRef<FirExpression>,
) : FirCheckedSafeCallSubject() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
@@ -30,6 +30,7 @@ internal class FirClassReferenceExpressionImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override var classTypeRef: FirTypeRef,
) : FirClassReferenceExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
classTypeRef.accept(visitor, data)
@@ -31,6 +31,7 @@ internal class FirConstExpressionImpl<T> (
override var kind: ConstantValueKind<T>,
override val value: T,
) : FirConstExpression<T>() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
@@ -31,6 +31,7 @@ internal class FirDesugaredAssignmentValueReferenceExpressionImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override val expressionRef: FirExpressionRef<FirExpression>,
) : FirDesugaredAssignmentValueReferenceExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
@@ -29,6 +29,7 @@ internal class FirDoWhileLoopImpl(
override var condition: FirExpression,
override var label: FirLabel?,
) : FirDoWhileLoop() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
block.accept(visitor, data)
@@ -33,6 +33,7 @@ internal class FirElvisExpressionImpl(
override var lhs: FirExpression,
override var rhs: FirExpression,
) : FirElvisExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
calleeReference.accept(visitor, data)
@@ -29,6 +29,7 @@ class FirExpressionStub @FirImplementationDetail constructor(
override var coneTypeOrNull: ConeKotlinType?,
override var annotations: MutableOrEmptyList<FirAnnotation>,
) : FirExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
@@ -40,6 +40,7 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
override var calleeReference: FirNamedReference,
override val origin: FirFunctionCallOrigin,
) : FirFunctionCall() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
contextReceiverArguments.forEach { it.accept(visitor, data) }
@@ -31,6 +31,7 @@ internal class FirInaccessibleReceiverExpressionImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override var calleeReference: FirThisReference,
) : FirInaccessibleReceiverExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
calleeReference.accept(visitor, data)
@@ -34,6 +34,7 @@ internal class FirIncrementDecrementExpressionImpl(
override var expression: FirExpression,
override val operationSource: KtSourceElement?,
) : FirIncrementDecrementExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
expression.accept(visitor, data)
@@ -40,6 +40,7 @@ internal class FirIntegerLiteralOperatorCallImpl(
override var dispatchReceiver: FirExpression?,
override var extensionReceiver: FirExpression?,
) : FirIntegerLiteralOperatorCall() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
contextReceiverArguments.forEach { it.accept(visitor, data) }
@@ -40,6 +40,7 @@ class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
override var source: KtSourceElement?,
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
) : FirPropertyAccessExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
calleeReference.accept(visitor, data)
@@ -30,6 +30,7 @@ internal class FirResolvedReifiedParameterReferenceImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override val symbol: FirTypeParameterSymbol,
) : FirResolvedReifiedParameterReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
@@ -30,6 +30,7 @@ internal class FirSafeCallExpressionImpl(
override val checkedSubjectRef: FirExpressionRef<FirCheckedSafeCallSubject>,
override var selector: FirStatement,
) : FirSafeCallExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
receiver.accept(visitor, data)
@@ -31,6 +31,7 @@ internal class FirTryExpressionImpl(
override val catches: MutableList<FirCatch>,
override var finallyBlock: FirBlock?,
) : FirTryExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
calleeReference.accept(visitor, data)
@@ -32,6 +32,7 @@ internal class FirVarargArgumentsExpressionImpl(
override val arguments: MutableList<FirExpression>,
override var varargElementType: FirTypeRef,
) : FirVarargArgumentsExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
arguments.forEach { it.accept(visitor, data) }
@@ -26,6 +26,7 @@ internal class FirVariableAssignmentImpl(
override var lValue: FirExpression,
override var rValue: FirExpression,
) : FirVariableAssignment() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
lValue.accept(visitor, data)
@@ -22,6 +22,7 @@ internal class FirWhenBranchImpl(
override var condition: FirExpression,
override var result: FirBlock,
) : FirWhenBranch() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
condition.accept(visitor, data)
result.accept(visitor, data)
@@ -34,6 +34,7 @@ internal class FirWhenExpressionImpl(
override var exhaustivenessStatus: ExhaustivenessStatus?,
override val usedAsExpression: Boolean,
) : FirWhenExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
calleeReference.accept(visitor, data)
@@ -29,6 +29,7 @@ internal class FirWhileLoopImpl(
override var condition: FirExpression,
override var block: FirBlock,
) : FirWhileLoop() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
label?.accept(visitor, data)
@@ -32,6 +32,7 @@ internal class FirFileAnnotationsContainerImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override val containingFileSymbol: FirFileSymbol,
) : FirFileAnnotationsContainer() {
init {
resolveState = resolvePhase.asResolveState()
}
@@ -22,6 +22,7 @@ internal class FirFunctionTypeParameterImpl(
override val name: Name?,
override var returnTypeRef: FirTypeRef,
) : FirFunctionTypeParameter() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
returnTypeRef.accept(visitor, data)
}
@@ -19,6 +19,7 @@ internal class FirLabelImpl(
override val source: KtSourceElement?,
override val name: String,
) : FirLabel() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirLabelImpl {
@@ -20,6 +20,7 @@ internal class FirPackageDirectiveImpl(
override val source: KtSourceElement?,
override val packageFqName: FqName,
) : FirPackageDirective() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPackageDirectiveImpl {
@@ -21,6 +21,7 @@ internal class FirExplicitSuperReference(
override val labelName: String?,
override var superTypeRef: FirTypeRef,
) : FirSuperReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
superTypeRef.accept(visitor, data)
}
@@ -20,6 +20,7 @@ internal class FirFromMissingDependenciesNamedReferenceImpl(
override val source: KtSourceElement?,
override val name: Name,
) : FirFromMissingDependenciesNamedReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirFromMissingDependenciesNamedReferenceImpl {
@@ -23,6 +23,7 @@ class FirPropertyFromParameterResolvedNamedReference @FirImplementationDetail co
override val name: Name,
override val resolvedSymbol: FirBasedSymbol<*>,
) : FirResolvedNamedReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPropertyFromParameterResolvedNamedReference {
@@ -26,6 +26,7 @@ internal class FirResolvedCallableReferenceImpl(
override val inferredTypeArguments: MutableList<ConeKotlinType>,
override val mappedArguments: CallableReferenceMappedArguments,
) : FirResolvedCallableReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedCallableReferenceImpl {
@@ -24,6 +24,7 @@ internal class FirResolvedErrorReferenceImpl(
override val resolvedSymbol: FirBasedSymbol<*>,
override val diagnostic: ConeDiagnostic,
) : FirResolvedErrorReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedErrorReferenceImpl {
@@ -22,6 +22,7 @@ internal class FirResolvedNamedReferenceImpl(
override val name: Name,
override val resolvedSymbol: FirBasedSymbol<*>,
) : FirResolvedNamedReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedNamedReferenceImpl {
@@ -21,6 +21,7 @@ class FirSimpleNamedReference @FirImplementationDetail constructor(
override val source: KtSourceElement?,
override val name: Name,
) : FirNamedReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirSimpleNamedReference {
@@ -24,6 +24,7 @@ internal class FirDynamicTypeRefImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override val isMarkedNullable: Boolean,
) : FirDynamicTypeRef() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
@@ -31,6 +31,7 @@ internal class FirFunctionTypeRefImpl(
override val isSuspend: Boolean,
override val contextReceiverTypeRefs: MutableList<FirTypeRef>,
) : FirFunctionTypeRef() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
receiverTypeRef?.accept(visitor, data)
@@ -27,6 +27,7 @@ internal class FirIntersectionTypeRefImpl(
override var leftType: FirTypeRef,
override var rightType: FirTypeRef,
) : FirIntersectionTypeRef() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
leftType.accept(visitor, data)
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
internal class FirPlaceholderProjectionImpl(
override val source: KtSourceElement?,
) : FirPlaceholderProjection() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPlaceholderProjectionImpl {
@@ -28,6 +28,7 @@ class FirResolvedTypeRefImpl @FirImplementationDetail constructor(
override val type: ConeKotlinType,
override var delegatedTypeRef: FirTypeRef?,
) : FirResolvedTypeRef() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
internal class FirStarProjectionImpl(
override val source: KtSourceElement?,
) : FirStarProjection() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirStarProjectionImpl {
@@ -22,6 +22,7 @@ internal class FirTypeProjectionWithVarianceImpl(
override var typeRef: FirTypeRef,
override val variance: Variance,
) : FirTypeProjectionWithVariance() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
}