diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart index bd643748917..1734f524fbc 100644 --- a/pkg/kernel/lib/text/ast_to_text.dart +++ b/pkg/kernel/lib/text/ast_to_text.dart @@ -2778,58 +2778,70 @@ class Printer extends VisitorDefault with VisitorVoidMixin { VariableDeclaration node, { bool useVarKeyword = false, }) { - if (node is FunctionParameter) { - writeExpressionVariable(node); - } else { - if (showOffsets) writeWord("[${node.fileOffset}]"); - if (showMetadata) writeMetadata(node); - writeAnnotationList(node.annotations, separateLines: false); - writeModifier(node.isLowered, 'lowered'); - writeModifier(node.isLate, 'late'); - writeModifier(node.isRequired, 'required'); - writeModifier(node.isCovariantByDeclaration, 'covariant-by-declaration'); - writeModifier(node.isCovariantByClass, 'covariant-by-class'); - writeModifier(node.isFinal, 'final'); - writeModifier(node.isConst, 'const'); - writeModifier(node.isSynthesized && node.name != null, 'synthesized'); - writeModifier(node.isHoisted, 'hoisted'); - writeModifier(node.isWildcard, 'wildcard'); - writeModifier(node.isInitializingFormal, 'initializing-formal'); - writeModifier( - node.isSuperInitializingFormal, - 'super-initializing-formal', - ); - writeModifier(node.isErroneouslyInitialized, 'erroneously-initialized'); - bool hasImplicitInitializer = - node.initializer is NullLiteral || - (node.initializer is ConstantExpression && - (node.initializer as ConstantExpression).constant - is NullConstant); - if ((node.initializer == null || hasImplicitInitializer) && - node.hasDeclaredInitializer) { - writeModifier(node.hasDeclaredInitializer, 'has-declared-initializer'); - } else if (node.initializer != null && - !hasImplicitInitializer && - !node.hasDeclaredInitializer) { + switch (node) { + case LocalVariable(): + case CatchVariable(): + case ThisVariable(): + case SyntheticVariable(): + case PositionalParameter(): + case NamedParameter(): + writeExpressionVariable(node); + case VariableStatement(): + if (showOffsets) writeWord("[${node.fileOffset}]"); + if (showMetadata) writeMetadata(node); + writeAnnotationList(node.annotations, separateLines: false); + writeModifier(node.isLowered, 'lowered'); + writeModifier(node.isLate, 'late'); + writeModifier(node.isRequired, 'required'); writeModifier( - node.hasDeclaredInitializer, - 'has-no-declared-initializer', + node.isCovariantByDeclaration, + 'covariant-by-declaration', ); - } - writeAnnotatedType(node.type, annotator?.annotateVariable(this, node)); - writeWord(getVariableName(node)); - Expression? initializer = node.initializer; - if (initializer != null) { - writeSpaced('='); - writeExpression(initializer); - } + writeModifier(node.isCovariantByClass, 'covariant-by-class'); + writeModifier(node.isFinal, 'final'); + writeModifier(node.isConst, 'const'); + writeModifier(node.isSynthesized && node.name != null, 'synthesized'); + writeModifier(node.isHoisted, 'hoisted'); + writeModifier(node.isWildcard, 'wildcard'); + writeModifier(node.isInitializingFormal, 'initializing-formal'); + writeModifier( + node.isSuperInitializingFormal, + 'super-initializing-formal', + ); + writeModifier(node.isErroneouslyInitialized, 'erroneously-initialized'); + bool hasImplicitInitializer = + node.initializer is NullLiteral || + (node.initializer is ConstantExpression && + (node.initializer as ConstantExpression).constant + is NullConstant); + if ((node.initializer == null || hasImplicitInitializer) && + node.hasDeclaredInitializer) { + writeModifier( + node.hasDeclaredInitializer, + 'has-declared-initializer', + ); + } else if (node.initializer != null && + !hasImplicitInitializer && + !node.hasDeclaredInitializer) { + writeModifier( + node.hasDeclaredInitializer, + 'has-no-declared-initializer', + ); + } + writeAnnotatedType(node.type, annotator?.annotateVariable(this, node)); + writeWord(getVariableName(node)); + Expression? initializer = node.initializer; + if (initializer != null) { + writeSpaced('='); + writeExpression(initializer); + } + case VariableInitialization(): + writeVariableInitialization(node); } } void writeVariableInitialization(VariableDeclaration node) { - if (node is VariableStatement) { - writeVariableDeclaration(node); - } else { + if (node is VariableInitialization) { if (showOffsets) writeWord("[${node.fileOffset}]"); if (showMetadata) writeMetadata(node); writeAnnotationList(node.annotations, separateLines: false); @@ -2856,6 +2868,8 @@ class Printer extends VisitorDefault with VisitorVoidMixin { writeSpaced(':='); writeExpression(initializer); } + } else { + writeVariableDeclaration(node); } }