Documentation Index
Fetch the complete documentation index at: https://mintlify.com/dart-lang/sdk/llms.txt
Use this file to discover all available pages before exploring further.
The Kernel AST is an in-memory representation of Dart programs designed for transformation and analysis. This page documents the main AST node types and their structure.
Base Types
All AST nodes inherit from TreeNode, the base class for all nodes in the tree:
abstract class TreeNode {
TreeNode? parent;
int fileOffset = noOffset;
R accept<R>(Visitor<R> v);
void visitChildren(Visitor v);
void transformChildren(Transformer v);
}
Component and Libraries
Component
The root of a Kernel program:
class Component extends TreeNode {
final CanonicalName root;
final List<Library> libraries;
final Map<Uri, Source> uriToSource;
final Map<String, MetadataRepository<dynamic>> metadata;
Reference? mainMethodName;
}
Library
Represents a Dart library:
class Library extends NamedNode {
String name;
Uri importUri;
Uri fileUri;
List<Expression> annotations;
List<LibraryDependency> libraryDependencies;
List<Typedef> typedefs;
List<Class> classes;
List<Extension> extensions;
List<ExtensionTypeDeclaration> extensionTypeDeclarations;
List<Field> fields;
List<Procedure> procedures;
}
Type Declarations
Class
Regular class or mixin application:
class class extends NamedNode implements TypeDeclaration {
String name;
List<Expression> annotations;
List<TypeParameter> typeParameters;
DartType? supertype;
DartType? mixedInType;
List<DartType> implementedTypes;
List<Field> fields;
List<Constructor> constructors;
List<Procedure> procedures;
// Flags
bool isAbstract;
bool isEnum;
bool isMixinDeclaration;
bool isSealed;
bool isFinal;
bool isBase;
bool isInterface;
bool isMixinClass;
}
Extension
Extension declarations:
class Extension extends NamedNode {
String name;
List<TypeParameter> typeParameters;
DartType onType;
List<ExtensionMemberDescriptor> members;
}
ExtensionTypeDeclaration
Extension type declarations (Dart 3.0+):
class ExtensionTypeDeclaration extends NamedNode {
String name;
List<TypeParameter> typeParameters;
DartType declaredRepresentationType;
String representationName;
List<DartType> implements;
List<Procedure> procedures;
List<ExtensionTypeMemberDescriptor> members;
}
Members
Field
class Field extends Member {
Name name;
DartType type;
Expression? initializer;
bool isFinal;
bool isConst;
bool isStatic;
bool isLate;
bool isCovariantByDeclaration;
}
Constructor
class Constructor extends Member {
Name name;
FunctionNode function;
List<Initializer> initializers;
bool isConst;
bool isExternal;
bool isSynthetic;
}
Procedure
Methods, getters, setters, operators, and factory constructors:
class Procedure extends Member {
Name name;
ProcedureKind kind; // Method, Getter, Setter, Operator, Factory
FunctionNode function;
bool isStatic;
bool isAbstract;
bool isExternal;
bool isConst;
}
FunctionNode
Represents function signatures and bodies:
class FunctionNode extends TreeNode {
List<TypeParameter> typeParameters;
List<VariableDeclaration> positionalParameters;
List<VariableDeclaration> namedParameters;
int requiredParameterCount;
DartType returnType;
Statement? body;
AsyncMarker asyncMarker; // Sync, Async, SyncStar, AsyncStar
}
Expressions
Expressions represent computations that produce values.
Literals
// Basic literals
class IntLiteral extends Expression {
int value;
}
class DoubleLiteral extends Expression {
double value;
}
class BoolLiteral extends Expression {
bool value;
}
class StringLiteral extends Expression {
String value;
}
class NullLiteral extends Expression {}
class SymbolLiteral extends Expression {
String value;
}
class TypeLiteral extends Expression {
DartType type;
}
Collection Literals
class ListLiteral extends Expression {
DartType typeArgument;
List<Expression> expressions;
}
class SetLiteral extends Expression {
DartType typeArgument;
List<Expression> expressions;
}
class MapLiteral extends Expression {
DartType keyType;
DartType valueType;
List<MapLiteralEntry> entries;
}
class RecordLiteral extends Expression {
List<Expression> positional;
List<NamedExpression> named;
DartType recordType;
}
Variable Access
class VariableGet extends Expression {
VariableDeclaration variable;
DartType? promotedType;
}
class VariableSet extends Expression {
VariableDeclaration variable;
Expression value;
}
Property Access
class InstanceGet extends Expression {
Expression receiver;
Name name;
DartType resultType;
Member? interfaceTarget;
}
class InstanceSet extends Expression {
Expression receiver;
Name name;
Expression value;
Member? interfaceTarget;
}
class DynamicGet extends Expression {
Expression receiver;
Name name;
}
class StaticGet extends Expression {
Member target;
}
class SuperPropertyGet extends Expression {
Name name;
Member? interfaceTarget;
}
Invocations
class InstanceInvocation extends Expression {
Expression receiver;
Name name;
Arguments arguments;
DartType functionType;
Member? interfaceTarget;
}
class DynamicInvocation extends Expression {
Expression receiver;
Name name;
Arguments arguments;
}
class FunctionInvocation extends Expression {
Expression receiver;
Arguments arguments;
DartType functionType;
}
class StaticInvocation extends Expression {
Procedure target;
Arguments arguments;
}
class ConstructorInvocation extends Expression {
Constructor target;
Arguments arguments;
}
Control Flow Expressions
class ConditionalExpression extends Expression {
Expression condition;
Expression then;
Expression otherwise;
DartType? staticType;
}
class LogicalExpression extends Expression {
Expression left;
LogicalOperator operator; // &&, ||
Expression right;
}
class Let extends Expression {
VariableDeclaration variable;
Expression body;
}
Type Operations
class IsExpression extends Expression {
Expression operand;
DartType type;
}
class AsExpression extends Expression {
Expression operand;
DartType type;
bool isTypeError;
bool isCovarianceCheck;
}
class NullCheck extends Expression {
Expression operand;
}
Pattern Matching (Dart 3.0+)
class SwitchExpression extends Expression {
Expression expression;
List<SwitchExpressionCase> cases;
DartType? staticType;
}
class PatternAssignment extends Expression {
Pattern pattern;
Expression expression;
}
Statements
Basic Statements
class ExpressionStatement extends Statement {
Expression expression;
}
class Block extends Statement {
List<Statement> statements;
}
class EmptyStatement extends Statement {}
class ReturnStatement extends Statement {
Expression? expression;
}
Variable Declaration
class VariableDeclaration extends Statement {
String name;
DartType type;
Expression? initializer;
bool isFinal;
bool isConst;
bool isLate;
bool isRequired;
}
Control Flow
class IfStatement extends Statement {
Expression condition;
Statement then;
Statement otherwise;
}
class WhileStatement extends Statement {
Expression condition;
Statement body;
}
class DoStatement extends Statement {
Statement body;
Expression condition;
}
class ForStatement extends Statement {
List<VariableDeclaration> variables;
Expression? condition;
List<Expression> updates;
Statement body;
}
class ForInStatement extends Statement {
VariableDeclaration variable;
Expression iterable;
Statement body;
}
Switch Statement
class SwitchStatement extends Statement {
Expression expression;
List<SwitchCase> cases;
bool isExplicitlyExhaustive;
}
class SwitchCase {
List<Expression> expressions;
Statement body;
bool isDefault;
}
class PatternSwitchStatement extends Statement {
Expression expression;
List<PatternSwitchCase> cases;
}
Exception Handling
class TryCatch extends Statement {
Statement body;
List<Catch> catches;
}
class Catch {
DartType guard;
VariableDeclaration? exception;
VariableDeclaration? stackTrace;
Statement body;
}
class TryFinally extends Statement {
Statement body;
Statement finalizer;
}
class Throw extends Expression {
Expression expression;
}
Labels and Jumps
class LabeledStatement extends Statement {
Statement body;
}
class BreakStatement extends Statement {
LabeledStatement target;
}
class ContinueSwitchStatement extends Statement {
SwitchCase target;
}
Async
class YieldStatement extends Statement {
Expression expression;
bool isYieldStar;
}
class AwaitExpression extends Expression {
Expression operand;
}
DartType Hierarchy
Kernel uses a type system separate from the Dart type system:
abstract class DartType extends Node {}
class DynamicType extends DartType {}
class VoidType extends DartType {}
class NeverType extends DartType {
Nullability nullability;
}
class NullType extends DartType {}
class InvalidType extends DartType {}
class InterfaceType extends DartType {
Class classNode;
List<DartType> typeArguments;
Nullability nullability;
}
class FunctionType extends DartType {
List<TypeParameter> typeParameters;
List<DartType> positionalParameters;
List<NamedType> namedParameters;
DartType returnType;
Nullability nullability;
}
class TypeParameterType extends DartType {
TypeParameter parameter;
Nullability nullability;
}
class RecordType extends DartType {
List<DartType> positional;
List<NamedType> named;
Nullability nullability;
}
class ExtensionType extends DartType {
ExtensionTypeDeclaration extensionTypeDeclaration;
List<DartType> typeArguments;
DartType typeErasure;
Nullability nullability;
}
Nullability
enum Nullability {
nullable, // T?
nonNullable, // T (in null-safe code)
neither, // T (in legacy code)
}
Visitors
Kernel provides visitor infrastructure for traversing the AST:
abstract class Visitor<R> {
R visitComponent(Component node);
R visitLibrary(Library node);
R visitClass(Class node);
R visitField(Field node);
R visitProcedure(Procedure node);
// ... methods for all node types
}
abstract class RecursiveVisitor extends Visitor<void> {
// Default implementation visits all children
}
abstract class Transformer extends TreeVisitor<TreeNode> {
// Enables AST transformations
}
Constants
Compile-time constants have their own representation:
abstract class Constant extends Node {}
class NullConstant extends Constant {}
class BoolConstant extends Constant { bool value; }
class IntConstant extends Constant { int value; }
class DoubleConstant extends Constant { double value; }
class StringConstant extends Constant { String value; }
class ListConstant extends Constant {
DartType typeArgument;
List<Constant> entries;
}
class MapConstant extends Constant {
DartType keyType;
DartType valueType;
List<ConstantMapEntry> entries;
}
class InstanceConstant extends Constant {
Class classNode;
List<DartType> typeArguments;
Map<Field, Constant> fieldValues;
}
Usage Examples
Traversing the AST
class PrintingVisitor extends RecursiveVisitor {
int depth = 0;
@override
void visitClass(Class node) {
print('${' ' * depth}class ${node.name}');
depth++;
super.visitClass(node);
depth--;
}
@override
void visitProcedure(Procedure node) {
print('${' ' * depth}${node.kind.name} ${node.name}');
}
}
class RemoveAsserts extends Transformer {
@override
TreeNode visitAssertStatement(AssertStatement node) {
return EmptyStatement();
}
}