[kernel] Add annotate_overrides lint
Change-Id: I1fffd60eeb14ecd6d5ba30cd584a75ddd4a8acfc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212005
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
diff --git a/pkg/kernel/analysis_options.yaml b/pkg/kernel/analysis_options.yaml
index 68fdd50..d9d722e 100644
--- a/pkg/kernel/analysis_options.yaml
+++ b/pkg/kernel/analysis_options.yaml
@@ -16,4 +16,5 @@
- package_api_docs
- lines_longer_than_80_chars
- unrelated_type_equality_checks
+ - annotate_overrides
# - always_specify_types
diff --git a/pkg/kernel/bin/count_breakdown.dart b/pkg/kernel/bin/count_breakdown.dart
index 839ab42..b704879 100755
--- a/pkg/kernel/bin/count_breakdown.dart
+++ b/pkg/kernel/bin/count_breakdown.dart
@@ -28,6 +28,8 @@
class TypeCounter extends RecursiveVisitor {
Map<String, int> _typeCounts = <String, int>{};
+
+ @override
defaultNode(Node node) {
String key = node.runtimeType.toString();
_typeCounts[key] = (_typeCounts[key] ??= 0) + 1;
diff --git a/pkg/kernel/bin/size_breakdown.dart b/pkg/kernel/bin/size_breakdown.dart
index af98f8a..a5faac2 100755
--- a/pkg/kernel/bin/size_breakdown.dart
+++ b/pkg/kernel/bin/size_breakdown.dart
@@ -43,6 +43,7 @@
int constantTableSize = 0;
Map<Uri, int> librarySizes = {};
+ @override
int readOffset() {
offsetsSize -= byteOffset;
int result = super.readOffset();
@@ -50,18 +51,21 @@
return result;
}
+ @override
void readStringTable() {
stringTableSize -= byteOffset;
super.readStringTable();
stringTableSize += byteOffset;
}
+ @override
void readLinkTable(CanonicalName linkRoot) {
linkTableSize -= byteOffset;
super.readLinkTable(linkRoot);
linkTableSize += byteOffset;
}
+ @override
Map<Uri, Source> readUriToSource({required bool readCoverage}) {
uriToSourceSize -= byteOffset;
Map<Uri, Source> result = super.readUriToSource(readCoverage: readCoverage);
@@ -69,12 +73,14 @@
return result;
}
+ @override
void readConstantTable() {
constantTableSize -= byteOffset;
super.readConstantTable();
constantTableSize += byteOffset;
}
+ @override
Library readLibrary(Component component, int endOffset) {
int size = -byteOffset;
var result = super.readLibrary(component, endOffset);
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 7edd205..99992d8 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -101,6 +101,7 @@
///
/// The data is generally bare-bones, but can easily be updated for your
/// specific debugging needs.
+ @override
String toString();
/// Returns the textual representation of this node for use in debugging.
@@ -138,6 +139,7 @@
/// This is anything other than [Name] and [DartType] nodes.
abstract class TreeNode extends Node {
static int _hashCounter = 0;
+ @override
final int hashCode = _hashCounter = (_hashCounter + 1) & 0x3fffffff;
static const int noOffset = -1;
@@ -149,8 +151,11 @@
/// not available (this is the default if none is specifically set).
int fileOffset = noOffset;
+ @override
R accept<R>(TreeVisitor<R> v);
+ @override
R accept1<R, A>(TreeVisitor1<R, A> v, A arg);
+ @override
void visitChildren(Visitor v);
void transformChildren(Transformer v);
void transformOrRemoveChildren(RemovingTransformer v);
@@ -608,10 +613,12 @@
printer.write(libraryNameToString(this));
}
+ @override
Location? _getLocationInEnclosingFile(int offset) {
return _getLocationInComponent(enclosingComponent, fileUri, offset);
}
+ @override
String leakingDebugToString() => astToText.debugLibraryToString(this);
}
@@ -1510,6 +1517,7 @@
String name;
/// The URI of the source file this class was loaded from.
+ @override
Uri fileUri;
/// Type parameters declared on the extension.
@@ -2262,6 +2270,7 @@
/// The `FunctionNode.body` is `null` or a synthesized [ConstructorInvocation]
/// of the [targetReference] constructor using the [typeArguments] and
/// [VariableGet] of the parameters.
+ @override
FunctionNode function;
RedirectingFactory(this.targetReference,
@@ -5051,6 +5060,7 @@
static const int FlagBoundsSafe = 1 << 1;
final InstanceAccessKind kind;
+ @override
Expression receiver;
@override
@@ -5224,6 +5234,7 @@
static const int FlagBoundsSafe = 1 << 1;
final InstanceAccessKind kind;
+ @override
Expression receiver;
@override
@@ -6820,6 +6831,7 @@
class FileUriExpression extends Expression implements FileUriNode {
/// The URI of the source file in which the subexpression is located.
/// Can be different from the file containing the [FileUriExpression].
+ @override
Uri fileUri;
Expression expression;
@@ -6905,6 +6917,7 @@
: (flags & ~FlagForNonNullableByDefault);
}
+ @override
DartType getStaticType(StaticTypeContext context) =>
getStaticTypeInternal(context);
@@ -7322,6 +7335,7 @@
@override
Object? get value => null;
+ @override
DartType getStaticType(StaticTypeContext context) =>
getStaticTypeInternal(context);
@@ -7434,6 +7448,7 @@
}
class ThisExpression extends Expression {
+ @override
DartType getStaticType(StaticTypeContext context) =>
getStaticTypeInternal(context);
@@ -7827,12 +7842,14 @@
return "MapEntry(${toStringInternal()})";
}
+ @override
String toText(AstTextStrategy strategy) {
AstPrinter printer = new AstPrinter(strategy);
toTextInternal(printer);
return printer.getText();
}
+ @override
void toTextInternal(AstPrinter printer) {
printer.writeExpression(key);
printer.write(': ');
@@ -10365,6 +10382,7 @@
@override
R accept<R>(DartTypeVisitor<R> v);
+ @override
R accept1<R, A>(DartTypeVisitor1<R, A> v, A arg);
@override
@@ -11020,6 +11038,7 @@
///
/// The underlying type can be extracted using [unalias].
class TypedefType extends DartType {
+ @override
final Nullability declaredNullability;
final Reference typedefReference;
final List<DartType> typeArguments;
@@ -11124,6 +11143,7 @@
class FutureOrType extends DartType {
final DartType typeArgument;
+ @override
final Nullability declaredNullability;
FutureOrType(this.typeArgument, this.declaredNullability);
@@ -11356,12 +11376,14 @@
return "NamedType(${toStringInternal()})";
}
+ @override
String toText(AstTextStrategy strategy) {
AstPrinter printer = new AstPrinter(strategy);
printer.writeNamedType(this);
return printer.getText();
}
+ @override
void toTextInternal(AstPrinter printer) {
if (isRequired) {
printer.write("required ");
@@ -12100,11 +12122,13 @@
Class get classNode => className.asClass;
+ @override
R accept<R>(Visitor<R> v) => v.visitSupertype(this);
@override
R accept1<R, A>(Visitor1<R, A> v, A arg) => v.visitSupertype(this, arg);
+ @override
visitChildren(Visitor v) {
classNode.acceptReference(v);
visitList(typeArguments, v);
@@ -12114,6 +12138,7 @@
return new InterfaceType(classNode, Nullability.legacy, typeArguments);
}
+ @override
bool operator ==(Object other) {
if (identical(this, other)) return true;
if (other is Supertype) {
@@ -12128,6 +12153,7 @@
}
}
+ @override
int get hashCode {
int hash = 0x3fffffff & className.hashCode;
for (int i = 0; i < typeArguments.length; ++i) {
@@ -12663,6 +12689,7 @@
Class get classNode => classReference.asClass;
+ @override
visitChildren(Visitor v) {
classReference.asClass.acceptReference(v);
visitList(typeArguments, v);
@@ -12674,6 +12701,7 @@
}
}
+ @override
R accept<R>(ConstantVisitor<R> v) => v.visitInstanceConstant(this);
@override
@@ -12894,13 +12922,16 @@
@override
String toString() => 'ConstructorTearOffConstant(${toStringInternal()})';
+ @override
int get hashCode => targetReference.hashCode;
+ @override
bool operator ==(Object other) {
return other is ConstructorTearOffConstant &&
other.targetReference == targetReference;
}
+ @override
FunctionType getType(StaticTypeContext context) {
return function.computeFunctionType(context.nonNullable);
}
@@ -12953,13 +12984,16 @@
String toString() =>
'RedirectingFactoryTearOffConstant(${toStringInternal()})';
+ @override
int get hashCode => targetReference.hashCode;
+ @override
bool operator ==(Object other) {
return other is RedirectingFactoryTearOffConstant &&
other.targetReference == targetReference;
}
+ @override
FunctionType getType(StaticTypeContext context) {
return function.computeFunctionType(context.nonNullable);
}
@@ -12970,6 +13004,7 @@
final TearOffConstant tearOffConstant;
final List<DartType> types;
+ @override
late final int hashCode = _computeHashCode();
TypedefTearOffConstant(this.parameters, this.tearOffConstant, this.types);
@@ -13006,6 +13041,7 @@
@override
String toString() => 'TypedefTearOffConstant(${toStringInternal()})';
+ @override
bool operator ==(Object other) {
if (other is! TypedefTearOffConstant) return false;
if (other.tearOffConstant != tearOffConstant) return false;
@@ -13044,6 +13080,7 @@
return hash;
}
+ @override
DartType getType(StaticTypeContext context) {
FunctionType type = tearOffConstant.getType(context) as FunctionType;
FreshTypeParameters freshTypeParameters =
@@ -13101,6 +13138,7 @@
return other is TypeLiteralConstant && other.type == type;
}
+ @override
DartType getType(StaticTypeContext context) =>
context.typeEnvironment.coreTypes.typeRawType(context.nonNullable);
}
@@ -13132,6 +13170,7 @@
R acceptReference1<R, A>(Visitor1<R, A> v, A arg) =>
v.visitUnevaluatedConstantReference(this, arg);
+ @override
DartType getType(StaticTypeContext context) =>
expression.getStaticType(context);
@@ -13339,6 +13378,7 @@
// TODO(johnniwinther): Implement this.
}
+ @override
String leakingDebugToString() => astToText.debugComponentToString(this);
}
@@ -13351,6 +13391,7 @@
Location(this.file, this.line, this.column);
+ @override
String toString() => '$file:$line:$column';
}
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 5cc6168..87e536d 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -21,6 +21,7 @@
ParseError(this.message,
{required this.filename, required this.byteIndex, required this.path});
+ @override
String toString() => '$filename:$byteIndex: $message at $path';
}
@@ -30,6 +31,7 @@
InvalidKernelVersionError(this.filename, this.version);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
sb.write('Unexpected Kernel Format Version ${version} '
@@ -46,6 +48,7 @@
InvalidKernelSdkVersionError(this.version);
+ @override
String toString() {
return 'Unexpected Kernel SDK Version ${version} '
'(expected ${expectedSdkHash}).';
@@ -57,6 +60,7 @@
CompilationModeError(this.message);
+ @override
String toString() => "CompilationModeError[$message]";
}
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 35857eb..c8df796 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -83,15 +83,18 @@
return index!;
}
+ @override
void writeByte(int byte) {
assert((byte & 0xFF) == byte);
_sink.addByte(byte);
}
+ @override
void writeBytes(List<int> bytes) {
_sink.addBytes(bytes);
}
+ @override
@pragma("vm:prefer-inline")
void writeUInt30(int value) {
assert(value >= 0 && value >> 30 == 0);
@@ -105,16 +108,19 @@
}
}
+ @override
void writeUInt32(int value) {
_sink.addByte4((value >> 24) & 0xFF, (value >> 16) & 0xFF,
(value >> 8) & 0xFF, value & 0xFF);
}
+ @override
void writeByteList(List<int> bytes) {
writeUInt30(bytes.length);
writeBytes(bytes);
}
+ @override
int getBufferOffset() {
return _sink.offset;
}
@@ -166,6 +172,7 @@
}
}
+ @override
void writeStringReference(String string) {
writeUInt30(stringIndexer.put(string));
}
@@ -174,6 +181,7 @@
writeList(strings, writeStringReference);
}
+ @override
void writeConstantReference(Constant constant) {
writeUInt30(_constantIndexer.put(constant));
}
@@ -296,6 +304,7 @@
_typeParameterIndexer = oldTypeParameterIndexer;
}
+ @override
void writeDartType(DartType type) {
type.accept(this);
}
@@ -413,6 +422,7 @@
}
}
+ @override
void writeNode(Node node) {
if (_metadataSubsections != null) {
_writeNodeMetadata(node);
@@ -951,6 +961,7 @@
_canonicalNameList.add(node);
}
+ @override
void writeNullAllowedCanonicalNameReference(CanonicalName? name) {
if (name == null) {
writeUInt30(0);
@@ -999,6 +1010,7 @@
writeNonNullCanonicalNameReference(getCanonicalNameOfClass(class_));
}
+ @override
void writeName(Name node) {
if (_metadataSubsections != null) {
_writeNodeMetadata(node);
@@ -1119,6 +1131,7 @@
writeNodeList(node.combinators);
}
+ @override
void visitCombinator(Combinator node) {
writeByte(node.isShow ? 1 : 0);
writeStringReferenceList(node.names);
@@ -1140,6 +1153,7 @@
writeStringReference(node.partUri);
}
+ @override
void visitTypedef(Typedef node) {
enterScope(memberScope: true);
writeNonNullCanonicalNameReference(getCanonicalNameOfTypedef(node));
@@ -2843,6 +2857,7 @@
return index[constant] = newIndex;
}
+ @override
defaultConstantReference(Constant node) {
put(node);
}
diff --git a/pkg/kernel/lib/canonical_name.dart b/pkg/kernel/lib/canonical_name.dart
index 6d7bd11..bd151c1 100644
--- a/pkg/kernel/lib/canonical_name.dart
+++ b/pkg/kernel/lib/canonical_name.dart
@@ -263,6 +263,7 @@
}
}
+ @override
String toString() => _parent == null ? 'root' : '$parent::$name';
String toStringInternal() {
if (isRoot) return "";
@@ -438,6 +439,7 @@
_node = node;
}
+ @override
String toString() {
return "Reference to ${toStringInternal()}";
}
@@ -597,12 +599,14 @@
CanonicalNameError(this.message);
+ @override
String toString() => 'CanonicalNameError: $message';
}
class CanonicalNameSdkError extends CanonicalNameError {
CanonicalNameSdkError(String message) : super(message);
+ @override
String toString() => 'CanonicalNameSdkError: $message';
}
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index f66182a..43368ec 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -454,11 +454,13 @@
/// Implementation of [ClassHierarchy] for closed world.
class ClosedWorldClassHierarchy implements ClassHierarchy {
+ @override
CoreTypes coreTypes;
late HandleAmbiguousSupertypes _onAmbiguousSupertypes;
late HandleAmbiguousSupertypes _onAmbiguousSupertypesNotWrapped;
MixinInferrer? mixinInferrer;
+ @override
void set onAmbiguousSupertypes(
HandleAmbiguousSupertypes onAmbiguousSupertypes) {
_onAmbiguousSupertypesNotWrapped = onAmbiguousSupertypes;
@@ -512,6 +514,7 @@
allBetsOff = false;
}
+ @override
final Set<Library> knownLibraries = new Set<Library>();
bool allBetsOff = false;
@@ -1702,6 +1705,7 @@
final Set<Class> _classes;
ClassSet(this._classes);
+ @override
bool contains(Object? class_) {
return _classes.contains(class_);
}
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 4cc9711..257a3ed 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -57,30 +57,37 @@
return _variables[variable] = clone;
}
+ @override
TreeNode visitLibrary(Library node) {
throw 'Cloning of libraries is not implemented';
}
+ @override
TreeNode visitClass(Class node) {
throw 'Cloning of classes is not implemented';
}
+ @override
TreeNode visitExtension(Extension node) {
throw 'Cloning of extensions is not implemented';
}
+ @override
TreeNode visitConstructor(Constructor node) {
throw 'Cloning of constructors is not implemented here';
}
+ @override
TreeNode visitProcedure(Procedure node) {
throw 'Cloning of procedures is not implemented here';
}
+ @override
TreeNode visitField(Field node) {
throw 'Cloning of fields is not implemented here';
}
+ @override
TreeNode visitRedirectingFactory(RedirectingFactory node) {
throw 'Cloning of redirecting factory constructors is not implemented here';
}
@@ -151,92 +158,111 @@
return type == null ? null : substitute(type, typeSubstitution);
}
+ @override
visitInvalidExpression(InvalidExpression node) {
return new InvalidExpression(
node.message, node.expression != null ? clone(node.expression!) : null);
}
+ @override
visitVariableGet(VariableGet node) {
return new VariableGet(
getVariableClone(node.variable)!, visitOptionalType(node.promotedType));
}
+ @override
visitVariableSet(VariableSet node) {
return new VariableSet(getVariableClone(node.variable)!, clone(node.value));
}
+ @override
visitSuperPropertyGet(SuperPropertyGet node) {
return new SuperPropertyGet.byReference(
node.name, node.interfaceTargetReference);
}
+ @override
visitSuperPropertySet(SuperPropertySet node) {
return new SuperPropertySet.byReference(
node.name, clone(node.value), node.interfaceTargetReference);
}
+ @override
visitStaticGet(StaticGet node) {
return new StaticGet.byReference(node.targetReference);
}
+ @override
visitStaticSet(StaticSet node) {
return new StaticSet.byReference(node.targetReference, clone(node.value));
}
+ @override
visitSuperMethodInvocation(SuperMethodInvocation node) {
return new SuperMethodInvocation.byReference(
node.name, clone(node.arguments), node.interfaceTargetReference);
}
+ @override
visitStaticInvocation(StaticInvocation node) {
return new StaticInvocation.byReference(
node.targetReference, clone(node.arguments),
isConst: node.isConst);
}
+ @override
visitConstructorInvocation(ConstructorInvocation node) {
return new ConstructorInvocation.byReference(
node.targetReference, clone(node.arguments),
isConst: node.isConst);
}
+ @override
visitNot(Not node) {
return new Not(clone(node.operand));
}
+ @override
visitNullCheck(NullCheck node) {
return new NullCheck(clone(node.operand));
}
+ @override
visitLogicalExpression(LogicalExpression node) {
return new LogicalExpression(
clone(node.left), node.operatorEnum, clone(node.right));
}
+ @override
visitConditionalExpression(ConditionalExpression node) {
return new ConditionalExpression(clone(node.condition), clone(node.then),
clone(node.otherwise), visitType(node.staticType));
}
+ @override
visitStringConcatenation(StringConcatenation node) {
return new StringConcatenation(node.expressions.map(clone).toList());
}
+ @override
visitListConcatenation(ListConcatenation node) {
return new ListConcatenation(node.lists.map(clone).toList(),
typeArgument: visitType(node.typeArgument));
}
+ @override
visitSetConcatenation(SetConcatenation node) {
return new SetConcatenation(node.sets.map(clone).toList(),
typeArgument: visitType(node.typeArgument));
}
+ @override
visitMapConcatenation(MapConcatenation node) {
return new MapConcatenation(node.maps.map(clone).toList(),
keyType: visitType(node.keyType), valueType: visitType(node.valueType));
}
+ @override
visitInstanceCreation(InstanceCreation node) {
final Map<Reference, Expression> fieldValues = <Reference, Expression>{};
node.fieldValues.forEach((Reference fieldRef, Expression value) {
@@ -250,50 +276,61 @@
node.unusedArguments.map(clone).toList());
}
+ @override
visitFileUriExpression(FileUriExpression node) {
return new FileUriExpression(clone(node.expression), _activeFileUri!);
}
+ @override
visitIsExpression(IsExpression node) {
return new IsExpression(clone(node.operand), visitType(node.type))
..flags = node.flags;
}
+ @override
visitAsExpression(AsExpression node) {
return new AsExpression(clone(node.operand), visitType(node.type))
..flags = node.flags;
}
+ @override
visitSymbolLiteral(SymbolLiteral node) {
return new SymbolLiteral(node.value);
}
+ @override
visitTypeLiteral(TypeLiteral node) {
return new TypeLiteral(visitType(node.type));
}
+ @override
visitThisExpression(ThisExpression node) {
return new ThisExpression();
}
+ @override
visitRethrow(Rethrow node) {
return new Rethrow();
}
+ @override
visitThrow(Throw node) {
return new Throw(clone(node.expression));
}
+ @override
visitListLiteral(ListLiteral node) {
return new ListLiteral(node.expressions.map(clone).toList(),
typeArgument: visitType(node.typeArgument), isConst: node.isConst);
}
+ @override
visitSetLiteral(SetLiteral node) {
return new SetLiteral(node.expressions.map(clone).toList(),
typeArgument: visitType(node.typeArgument), isConst: node.isConst);
}
+ @override
visitMapLiteral(MapLiteral node) {
return new MapLiteral(node.entries.map(clone).toList(),
keyType: visitType(node.keyType),
@@ -301,69 +338,85 @@
isConst: node.isConst);
}
+ @override
visitMapLiteralEntry(MapLiteralEntry node) {
return new MapLiteralEntry(clone(node.key), clone(node.value));
}
+ @override
visitAwaitExpression(AwaitExpression node) {
return new AwaitExpression(clone(node.operand));
}
+ @override
visitFunctionExpression(FunctionExpression node) {
return new FunctionExpression(clone(node.function));
}
+ @override
visitConstantExpression(ConstantExpression node) {
return new ConstantExpression(
visitConstant(node.constant), visitType(node.type));
}
+ @override
visitStringLiteral(StringLiteral node) {
return new StringLiteral(node.value);
}
+ @override
visitIntLiteral(IntLiteral node) {
return new IntLiteral(node.value);
}
+ @override
visitDoubleLiteral(DoubleLiteral node) {
return new DoubleLiteral(node.value);
}
+ @override
visitBoolLiteral(BoolLiteral node) {
return new BoolLiteral(node.value);
}
+ @override
visitNullLiteral(NullLiteral node) {
return new NullLiteral();
}
+ @override
visitLet(Let node) {
VariableDeclaration newVariable = clone(node.variable);
return new Let(newVariable, clone(node.body));
}
+ @override
visitBlockExpression(BlockExpression node) {
return new BlockExpression(clone(node.body), clone(node.value));
}
+ @override
visitExpressionStatement(ExpressionStatement node) {
return new ExpressionStatement(clone(node.expression));
}
+ @override
visitBlock(Block node) {
return new Block(node.statements.map(clone).toList())
..fileEndOffset = _cloneFileOffset(node.fileEndOffset);
}
+ @override
visitAssertBlock(AssertBlock node) {
return new AssertBlock(node.statements.map(clone).toList());
}
+ @override
visitEmptyStatement(EmptyStatement node) {
return new EmptyStatement();
}
+ @override
visitAssertStatement(AssertStatement node) {
return new AssertStatement(clone(node.condition),
conditionStartOffset: node.conditionStartOffset,
@@ -371,6 +424,7 @@
message: cloneOptional(node.message));
}
+ @override
visitLabeledStatement(LabeledStatement node) {
LabeledStatement newNode = new LabeledStatement(null);
labels[node] = newNode;
@@ -378,24 +432,29 @@
return newNode;
}
+ @override
visitBreakStatement(BreakStatement node) {
return new BreakStatement(labels[node.target]!);
}
+ @override
visitWhileStatement(WhileStatement node) {
return new WhileStatement(clone(node.condition), clone(node.body));
}
+ @override
visitDoStatement(DoStatement node) {
return new DoStatement(clone(node.body), clone(node.condition));
}
+ @override
visitForStatement(ForStatement node) {
List<VariableDeclaration> variables = node.variables.map(clone).toList();
return new ForStatement(variables, cloneOptional(node.condition),
node.updates.map(clone).toList(), clone(node.body));
}
+ @override
visitForInStatement(ForInStatement node) {
VariableDeclaration newVariable = clone(node.variable);
return new ForInStatement(
@@ -404,6 +463,7 @@
..bodyOffset = node.bodyOffset;
}
+ @override
visitSwitchStatement(SwitchStatement node) {
for (SwitchCase switchCase in node.cases) {
switchCases[switchCase] = new SwitchCase(
@@ -416,30 +476,36 @@
clone(node.expression), node.cases.map(clone).toList());
}
+ @override
visitSwitchCase(SwitchCase node) {
SwitchCase switchCase = switchCases[node]!;
switchCase.body = clone(node.body)..parent = switchCase;
return switchCase;
}
+ @override
visitContinueSwitchStatement(ContinueSwitchStatement node) {
return new ContinueSwitchStatement(switchCases[node.target]!);
}
+ @override
visitIfStatement(IfStatement node) {
return new IfStatement(
clone(node.condition), clone(node.then), cloneOptional(node.otherwise));
}
+ @override
visitReturnStatement(ReturnStatement node) {
return new ReturnStatement(cloneOptional(node.expression));
}
+ @override
visitTryCatch(TryCatch node) {
return new TryCatch(clone(node.body), node.catches.map(clone).toList(),
isSynthetic: node.isSynthetic);
}
+ @override
visitCatch(Catch node) {
VariableDeclaration? newException = cloneOptional(node.exception);
VariableDeclaration? newStackTrace = cloneOptional(node.stackTrace);
@@ -447,14 +513,17 @@
stackTrace: newStackTrace, guard: visitType(node.guard));
}
+ @override
visitTryFinally(TryFinally node) {
return new TryFinally(clone(node.body), clone(node.finalizer));
}
+ @override
visitYieldStatement(YieldStatement node) {
return new YieldStatement(clone(node.expression))..flags = node.flags;
}
+ @override
visitVariableDeclaration(VariableDeclaration node) {
return setVariableClone(
node,
@@ -468,6 +537,7 @@
..fileEqualsOffset = _cloneFileOffset(node.fileEqualsOffset));
}
+ @override
visitFunctionDeclaration(FunctionDeclaration node) {
VariableDeclaration newVariable = clone(node.variable);
// Create the declaration before cloning the body to support recursive
@@ -491,6 +561,7 @@
}
}
+ @override
TypeParameter visitTypeParameter(TypeParameter node) {
TypeParameter newNode = typeParams[node]!;
newNode.bound = visitType(node.bound);
@@ -515,6 +586,7 @@
}
}
+ @override
visitFunctionNode(FunctionNode node) {
prepareTypeParameters(node.typeParameters);
List<TypeParameter> typeParameters =
@@ -533,97 +605,119 @@
..fileEndOffset = _cloneFileOffset(node.fileEndOffset);
}
+ @override
visitArguments(Arguments node) {
return new Arguments(node.positional.map(clone).toList(),
types: node.types.map(visitType).toList(),
named: node.named.map(clone).toList());
}
+ @override
visitNamedExpression(NamedExpression node) {
return new NamedExpression(node.name, clone(node.value));
}
+ @override
defaultBasicLiteral(BasicLiteral node) {
return defaultExpression(node);
}
+ @override
defaultExpression(Expression node) {
throw 'Unimplemented clone for Kernel expression: $node';
}
+ @override
defaultInitializer(Initializer node) {
throw 'Unimplemented clone for Kernel initializer: $node';
}
+ @override
defaultMember(Member node) {
throw 'Unimplemented clone for Kernel member: $node';
}
+ @override
defaultStatement(Statement node) {
throw 'Unimplemented clone for Kernel statement: $node';
}
+ @override
defaultTreeNode(TreeNode node) {
throw 'Cloning Kernel non-members is not supported. '
'Tried cloning $node';
}
+ @override
visitAssertInitializer(AssertInitializer node) {
return new AssertInitializer(clone(node.statement));
}
+ @override
visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
return new CheckLibraryIsLoaded(node.import);
}
+ @override
visitCombinator(Combinator node) {
return defaultTreeNode(node);
}
+ @override
visitFieldInitializer(FieldInitializer node) {
return new FieldInitializer.byReference(
node.fieldReference, clone(node.value));
}
+ @override
visitInstantiation(Instantiation node) {
return new Instantiation(
clone(node.expression), node.typeArguments.map(visitType).toList());
}
+ @override
visitInvalidInitializer(InvalidInitializer node) {
return new InvalidInitializer();
}
+ @override
visitLibraryDependency(LibraryDependency node) {
return defaultTreeNode(node);
}
+ @override
visitLibraryPart(LibraryPart node) {
return defaultTreeNode(node);
}
+ @override
visitLoadLibrary(LoadLibrary node) {
return new LoadLibrary(node.import);
}
+ @override
visitLocalInitializer(LocalInitializer node) {
return new LocalInitializer(clone(node.variable));
}
+ @override
visitComponent(Component node) {
return defaultTreeNode(node);
}
+ @override
visitRedirectingInitializer(RedirectingInitializer node) {
return new RedirectingInitializer.byReference(
node.targetReference, clone(node.arguments));
}
+ @override
visitSuperInitializer(SuperInitializer node) {
return new SuperInitializer.byReference(
node.targetReference, clone(node.arguments));
}
+ @override
visitTypedef(Typedef node) {
return defaultTreeNode(node);
}
@@ -756,6 +850,7 @@
typeParams: typeParams,
cloneAnnotations: cloneAnnotations);
+ @override
@Deprecated("When cloning with members one should use the specific cloneX")
T clone<T extends TreeNode>(T node) {
return super.clone(node);
diff --git a/pkg/kernel/lib/import_table.dart b/pkg/kernel/lib/import_table.dart
index bf9f7d5..deffa5d 100644
--- a/pkg/kernel/lib/import_table.dart
+++ b/pkg/kernel/lib/import_table.dart
@@ -19,6 +19,7 @@
}
}
+ @override
int getImportIndex(Library library) => _libraryIndex[library] ?? -1;
}
@@ -51,6 +52,7 @@
}
/// Returns the index of the given import, or -1 if not found.
+ @override
int getImportIndex(Library library) {
return _libraryIndex[library] ?? -1;
}
@@ -103,10 +105,12 @@
}
}
+ @override
visitClassReference(Class node) {
addLibraryImport(node.enclosingLibrary);
}
+ @override
visitLibrary(Library node) {
super.visitLibrary(node);
for (Reference exportedReference in node.additionalExports) {
@@ -114,10 +118,12 @@
}
}
+ @override
defaultMemberReference(Member node) {
addLibraryImport(node.enclosingLibrary);
}
+ @override
visitName(Name name) {
if (name.library != null) {
addLibraryImport(name.library);
diff --git a/pkg/kernel/lib/reference_from_index.dart b/pkg/kernel/lib/reference_from_index.dart
index 0e83da3..1c93f7c 100644
--- a/pkg/kernel/lib/reference_from_index.dart
+++ b/pkg/kernel/lib/reference_from_index.dart
@@ -79,6 +79,7 @@
final Map<String, IndexedClass> _indexedClasses =
new Map<String, IndexedClass>();
final Map<String, Extension> _extensions = new Map<String, Extension>();
+ @override
final Library library;
IndexedLibrary(this.library) {
@@ -112,6 +113,7 @@
class IndexedClass extends IndexedContainer {
final Class cls;
final Map<Name, Member> _constructors = new Map<Name, Member>();
+ @override
final Library library;
IndexedClass._(this.cls, this.library) {
diff --git a/pkg/kernel/lib/src/bounds_checks.dart b/pkg/kernel/lib/src/bounds_checks.dart
index 68ad9bb..31bdf1c 100644
--- a/pkg/kernel/lib/src/bounds_checks.dart
+++ b/pkg/kernel/lib/src/bounds_checks.dart
@@ -15,6 +15,7 @@
import 'legacy_erasure.dart';
class TypeVariableGraph extends Graph<int> {
+ @override
late List<int> vertices;
List<TypeParameter> typeParameters;
List<DartType> bounds;
@@ -50,6 +51,7 @@
}
}
+ @override
Iterable<int> neighborsOf(int index) {
return edges[index];
}
@@ -67,22 +69,28 @@
node.type.accept(this);
}
+ @override
void visitInvalidType(InvalidType node);
+ @override
void visitDynamicType(DynamicType node);
+ @override
void visitVoidType(VoidType node);
+ @override
void visitInterfaceType(InterfaceType node) {
for (DartType argument in node.typeArguments) {
argument.accept(this);
}
}
+ @override
void visitTypedefType(TypedefType node) {
for (DartType argument in node.typeArguments) {
argument.accept(this);
}
}
+ @override
void visitFunctionType(FunctionType node) {
for (TypeParameter typeParameter in node.typeParameters) {
typeParameter.bound.accept(this);
@@ -97,6 +105,7 @@
node.returnType.accept(this);
}
+ @override
void visitTypeParameterType(TypeParameterType node) {
if (typeParameters.contains(node.parameter)) {
occurred.add(node.parameter);
@@ -249,6 +258,7 @@
this.index, this.argument, this.typeParameter, this.enclosingType,
{this.invertedType, this.isGenericTypeAsArgumentIssue = false});
+ @override
int get hashCode {
int hash = 0x3fffffff & index;
hash = 0x3fffffff & (hash * 31 + (hash ^ argument.hashCode));
@@ -257,6 +267,7 @@
return hash;
}
+ @override
bool operator ==(Object other) {
assert(other is TypeArgumentIssue);
return other is TypeArgumentIssue &&
@@ -266,6 +277,7 @@
enclosingType == other.enclosingType;
}
+ @override
String toString() {
return "TypeArgumentIssue(index=${index}, argument=${argument}, "
"typeParameter=${typeParameter}, enclosingType=${enclosingType}";
diff --git a/pkg/kernel/lib/src/equivalence_helpers.dart b/pkg/kernel/lib/src/equivalence_helpers.dart
index 29f6e00..a36ee07 100644
--- a/pkg/kernel/lib/src/equivalence_helpers.dart
+++ b/pkg/kernel/lib/src/equivalence_helpers.dart
@@ -13,6 +13,7 @@
/// State for visiting two AST nodes in [EquivalenceVisitor].
class NodeState extends State {
+ @override
final State? parent;
final Node a;
final Node b;
@@ -22,6 +23,7 @@
/// State for visiting an AST property in [EquivalenceVisitor]
class PropertyState extends State {
+ @override
final State? parent;
final String name;
diff --git a/pkg/kernel/lib/src/hierarchy_based_type_environment.dart b/pkg/kernel/lib/src/hierarchy_based_type_environment.dart
index 58186dd..65894ac 100644
--- a/pkg/kernel/lib/src/hierarchy_based_type_environment.dart
+++ b/pkg/kernel/lib/src/hierarchy_based_type_environment.dart
@@ -13,6 +13,7 @@
import '../type_environment.dart' show TypeEnvironment;
class HierarchyBasedTypeEnvironment extends TypeEnvironment {
+ @override
final ClassHierarchyBase hierarchy;
HierarchyBasedTypeEnvironment(CoreTypes coreTypes, this.hierarchy)
diff --git a/pkg/kernel/lib/src/legacy_erasure.dart b/pkg/kernel/lib/src/legacy_erasure.dart
index 316a701..a17f78b 100644
--- a/pkg/kernel/lib/src/legacy_erasure.dart
+++ b/pkg/kernel/lib/src/legacy_erasure.dart
@@ -51,6 +51,7 @@
class _LegacyErasure extends ReplacementVisitor {
const _LegacyErasure();
+ @override
Nullability? visitNullability(DartType node) {
if (node.declaredNullability != Nullability.legacy) {
return Nullability.legacy;
diff --git a/pkg/kernel/lib/src/tool/find_referenced_libraries.dart b/pkg/kernel/lib/src/tool/find_referenced_libraries.dart
index 9846b9b..dca5f78 100644
--- a/pkg/kernel/lib/src/tool/find_referenced_libraries.dart
+++ b/pkg/kernel/lib/src/tool/find_referenced_libraries.dart
@@ -23,6 +23,7 @@
class _LibraryCollector extends RecursiveVisitor {
Set<Library> allSeenLibraries = {};
+ @override
void defaultNode(Node node) {
if (node is NamedNode) {
// Named nodes can be linked to.
@@ -35,6 +36,7 @@
super.defaultNode(node);
}
+ @override
void defaultMemberReference(Member node) {
seen(node);
super.defaultMemberReference(node);
diff --git a/pkg/kernel/lib/src/types.dart b/pkg/kernel/lib/src/types.dart
index abb2a35..b78578c 100644
--- a/pkg/kernel/lib/src/types.dart
+++ b/pkg/kernel/lib/src/types.dart
@@ -24,6 +24,7 @@
@override
CoreTypes get coreTypes => hierarchy.coreTypes;
+ @override
bool areMutualSubtypes(DartType s, DartType t, SubtypeCheckMode mode) {
IsSubtypeOf result = performNullabilityAwareMutualSubtypesCheck(s, t);
switch (mode) {
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index 55a69cd..c4062b0 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -31,6 +31,7 @@
ConstructorTearOffLowering.none,
this.enableNullSafety = false});
+ @override
bool operator ==(other) {
if (identical(this, other)) return true;
return other is TargetFlags &&
@@ -45,6 +46,7 @@
enableNullSafety == other.enableNullSafety;
}
+ @override
int get hashCode {
int hash = 485786;
hash = 0x3fffffff & (hash * 31 + (hash ^ trackWidgetCreation.hashCode));
@@ -451,6 +453,7 @@
// Configure environment defines in a target-specific way.
Map<String, String> updateEnvironmentDefines(Map<String, String> map) => map;
+ @override
String toString() => 'Target($name)';
Class? concreteListLiteralClass(CoreTypes coreTypes) => null;
@@ -474,6 +477,7 @@
}
class NoneTarget extends Target {
+ @override
final TargetFlags flags;
NoneTarget(this.flags);
diff --git a/pkg/kernel/lib/testing/type_parser.dart b/pkg/kernel/lib/testing/type_parser.dart
index f2522d3..f5d38ee 100644
--- a/pkg/kernel/lib/testing/type_parser.dart
+++ b/pkg/kernel/lib/testing/type_parser.dart
@@ -51,6 +51,7 @@
ParsedInterfaceType(this.name, this.arguments, this.parsedNullability);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
sb.write(name);
@@ -63,6 +64,7 @@
return "$sb";
}
+ @override
R accept<R, A>(Visitor<R, A> visitor, A a) {
return visitor.visitInterfaceType(this, a);
}
@@ -85,6 +87,7 @@
this.interfaces, this.callableType)
: super(name);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
sb.write("class ");
@@ -112,6 +115,7 @@
return "$sb";
}
+ @override
R accept<R, A>(Visitor<R, A> visitor, A a) {
return visitor.visitClass(this, a);
}
@@ -123,6 +127,7 @@
ParsedExtension(String name, this.typeVariables, this.onType) : super(name);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
sb.write("extension ");
@@ -138,6 +143,7 @@
return "$sb";
}
+ @override
R accept<R, A>(Visitor<R, A> visitor, A a) {
return visitor.visitExtension(this, a);
}
@@ -150,6 +156,7 @@
ParsedTypedef(String name, this.typeVariables, this.type) : super(name);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
sb.write("typedef ");
@@ -164,6 +171,7 @@
return "$sb;";
}
+ @override
R accept<R, A>(Visitor<R, A> visitor, A a) {
return visitor.visitTypedef(this, a);
}
@@ -181,6 +189,7 @@
ParsedFunctionType(this.typeVariables, this.returnType, this.arguments,
this.parsedNullability);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
if (typeVariables.isNotEmpty) {
@@ -196,14 +205,17 @@
return "$sb";
}
+ @override
R accept<R, A>(Visitor<R, A> visitor, A a) {
return visitor.visitFunctionType(this, a);
}
}
class ParsedVoidType extends ParsedType {
+ @override
String toString() => "void";
+ @override
R accept<R, A>(Visitor<R, A> visitor, A a) {
return visitor.visitVoidType(this, a);
}
@@ -216,6 +228,7 @@
ParsedTypeVariable(this.name, this.bound);
+ @override
String toString() {
if (bound == null) return name;
StringBuffer sb = new StringBuffer();
@@ -225,6 +238,7 @@
return "$sb";
}
+ @override
R accept<R, A>(Visitor<R, A> visitor, A a) {
return visitor.visitTypeVariable(this, a);
}
@@ -237,6 +251,7 @@
ParsedIntersectionType(this.a, this.b);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
sb.write(a);
@@ -245,6 +260,7 @@
return "$sb";
}
+ @override
R accept<R, A>(Visitor<R, A> visitor, A a) {
return visitor.visitIntersectionType(this, a);
}
@@ -258,6 +274,7 @@
ParsedArguments(this.required, this.positional, this.named)
: assert(positional.isEmpty || named.isEmpty);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
sb.write("(");
@@ -291,6 +308,7 @@
ParsedNamedArgument(this.isRequired, this.type, this.name);
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
if (isRequired) {
diff --git a/pkg/kernel/lib/testing/type_parser_environment.dart b/pkg/kernel/lib/testing/type_parser_environment.dart
index c9c0b12..6beaa67 100644
--- a/pkg/kernel/lib/testing/type_parser_environment.dart
+++ b/pkg/kernel/lib/testing/type_parser_environment.dart
@@ -243,6 +243,7 @@
as InterfaceType?;
}
+ @override
DartType visitInterfaceType(
ParsedInterfaceType node, TypeParserEnvironment environment) {
String name = node.name;
@@ -338,6 +339,7 @@
}
}
+ @override
Class visitClass(ParsedClass node, TypeParserEnvironment environment) {
String name = node.name;
Class cls = environment.lookupDeclaration(name) as Class;
@@ -373,6 +375,7 @@
return cls;
}
+ @override
Extension visitExtension(
ParsedExtension node, TypeParserEnvironment environment) {
String name = node.name;
@@ -393,6 +396,7 @@
return ext;
}
+ @override
Typedef visitTypedef(ParsedTypedef node, TypeParserEnvironment environment) {
String name = node.name;
Typedef def = environment._registerDeclaration(
@@ -423,6 +427,7 @@
return def..type = type;
}
+ @override
FunctionType visitFunctionType(
ParsedFunctionType node, TypeParserEnvironment environment) {
ParameterEnvironment parameterEnvironment =
@@ -453,16 +458,19 @@
typeParameters: parameterEnvironment.parameters);
}
+ @override
VoidType visitVoidType(
ParsedVoidType node, TypeParserEnvironment environment) {
return const VoidType();
}
+ @override
TypeParameter visitTypeVariable(
ParsedTypeVariable node, TypeParserEnvironment environment) {
throw "not implemented: $node";
}
+ @override
TypeParameterType visitIntersectionType(
ParsedIntersectionType node, TypeParserEnvironment environment) {
TypeParameterType type =
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index e2012c2..dc98fc7 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -21,16 +21,19 @@
}
class NormalNamer<T> extends Namer<T> {
+ @override
final String prefix;
NormalNamer(this.prefix);
}
class ConstantNamer extends RecursiveResultVisitor<Null> with Namer<Constant> {
+ @override
final String prefix;
ConstantNamer(this.prefix);
+ @override
String getName(Constant constant) {
if (!map.containsKey(constant)) {
// When printing a non-fully linked kernel AST (i.e. some [Reference]s
@@ -61,10 +64,12 @@
return super.getName(constant);
}
+ @override
defaultConstantReference(Constant constant) {
getName(constant);
}
+ @override
defaultDartType(DartType type) {
// No need to recurse into dart types, we only care about naming the
// constants themselves.
@@ -702,6 +707,7 @@
}
}
+ @override
visitSupertype(Supertype type) {
// ignore: unnecessary_null_comparison
if (type == null) {
@@ -716,6 +722,7 @@
}
}
+ @override
visitTypedefType(TypedefType type) {
writeTypedefReference(type.typedefNode);
if (type.typeArguments.isNotEmpty) {
@@ -1107,8 +1114,10 @@
}
}
+ @override
visitLibrary(Library node) {}
+ @override
visitField(Field node) {
writeAnnotationList(node.annotations);
writeIndentation();
@@ -1153,6 +1162,7 @@
endLine(';');
}
+ @override
visitProcedure(Procedure node) {
writeAnnotationList(node.annotations);
writeIndentation();
@@ -1220,6 +1230,7 @@
}
}
+ @override
visitConstructor(Constructor node) {
writeAnnotationList(node.annotations);
writeIndentation();
@@ -1243,6 +1254,7 @@
name: node.name, initializers: node.initializers);
}
+ @override
visitRedirectingFactory(RedirectingFactory node) {
writeAnnotationList(node.annotations);
writeIndentation();
@@ -1272,6 +1284,7 @@
endLine(';');
}
+ @override
visitClass(Class node) {
writeAnnotationList(node.annotations);
writeIndentation();
@@ -1326,6 +1339,7 @@
endLine('}');
}
+ @override
visitExtension(Extension node) {
writeAnnotationList(node.annotations);
writeIndentation();
@@ -1384,6 +1398,7 @@
endLine('}');
}
+ @override
visitTypedef(Typedef node) {
writeAnnotationList(node.annotations);
writeIndentation();
@@ -1402,6 +1417,7 @@
endLine(';');
}
+ @override
visitInvalidExpression(InvalidExpression node) {
writeWord('invalid-expression');
if (node.message != null) {
@@ -1430,6 +1446,7 @@
}
}
+ @override
visitDynamicInvocation(DynamicInvocation node) {
writeExpression(node.receiver, Precedence.PRIMARY);
_writeDynamicAccessKind(node.kind);
@@ -1453,6 +1470,7 @@
}
}
+ @override
visitFunctionInvocation(FunctionInvocation node) {
writeExpression(node.receiver, Precedence.PRIMARY);
_writeFunctionAccessKind(node.kind);
@@ -1487,6 +1505,7 @@
}
}
+ @override
visitInstanceInvocation(InstanceInvocation node) {
writeExpression(node.receiver, Precedence.PRIMARY);
writeSymbol('.');
@@ -1508,6 +1527,7 @@
writeSymbol('}');
}
+ @override
visitInstanceGetterInvocation(InstanceGetterInvocation node) {
writeExpression(node.receiver, Precedence.PRIMARY);
writeSymbol('.');
@@ -1521,6 +1541,7 @@
}
}
+ @override
visitEqualsCall(EqualsCall node) {
int precedence = Precedence.EQUALITY;
writeExpression(node.left, precedence);
@@ -1534,6 +1555,7 @@
writeExpression(node.right, precedence + 1);
}
+ @override
visitEqualsNull(EqualsNull node) {
writeExpression(node.expression, Precedence.EQUALITY);
writeSpace();
@@ -1542,6 +1564,7 @@
writeSymbol('null');
}
+ @override
visitSuperMethodInvocation(SuperMethodInvocation node) {
writeWord('super');
writeSymbol('.');
@@ -1549,28 +1572,33 @@
writeNode(node.arguments);
}
+ @override
visitStaticInvocation(StaticInvocation node) {
writeModifier(node.isConst, 'const');
writeMemberReferenceFromReference(node.targetReference);
writeNode(node.arguments);
}
+ @override
visitConstructorInvocation(ConstructorInvocation node) {
writeWord(node.isConst ? 'const' : 'new');
writeMemberReferenceFromReference(node.targetReference);
writeNode(node.arguments);
}
+ @override
visitNot(Not node) {
writeSymbol('!');
writeExpression(node.operand, Precedence.PREFIX);
}
+ @override
visitNullCheck(NullCheck node) {
writeExpression(node.operand, Precedence.POSTFIX);
writeSymbol('!');
}
+ @override
visitLogicalExpression(LogicalExpression node) {
int precedence = Precedence.binaryPrecedence[
logicalExpressionOperatorToString(node.operatorEnum)]!;
@@ -1579,6 +1607,7 @@
writeExpression(node.right, precedence + 1);
}
+ @override
visitConditionalExpression(ConditionalExpression node) {
writeExpression(node.condition, Precedence.LOGICAL_OR);
ensureSpace();
@@ -1590,6 +1619,7 @@
writeExpression(node.otherwise);
}
+ @override
visitStringConcatenation(StringConcatenation node) {
if (state == WORD) {
writeSpace();
@@ -1608,6 +1638,7 @@
state = WORD;
}
+ @override
visitListConcatenation(ListConcatenation node) {
bool first = true;
for (Expression part in node.lists) {
@@ -1617,6 +1648,7 @@
}
}
+ @override
visitSetConcatenation(SetConcatenation node) {
bool first = true;
for (Expression part in node.sets) {
@@ -1626,6 +1658,7 @@
}
}
+ @override
visitMapConcatenation(MapConcatenation node) {
bool first = true;
for (Expression part in node.maps) {
@@ -1635,6 +1668,7 @@
}
}
+ @override
visitInstanceCreation(InstanceCreation node) {
writeClassReferenceFromReference(node.classReference);
if (node.typeArguments.isNotEmpty) {
@@ -1677,10 +1711,12 @@
writeSymbol('}');
}
+ @override
visitFileUriExpression(FileUriExpression node) {
writeExpression(node.expression);
}
+ @override
visitIsExpression(IsExpression node) {
writeExpression(node.operand, Precedence.BITWISE_OR);
writeSpaced(
@@ -1688,6 +1724,7 @@
writeType(node.type);
}
+ @override
visitAsExpression(AsExpression node) {
writeExpression(node.operand, Precedence.BITWISE_OR);
List<String> flags = <String>[];
@@ -1707,29 +1744,35 @@
writeType(node.type);
}
+ @override
visitSymbolLiteral(SymbolLiteral node) {
writeSymbol('#');
writeWord(node.value);
}
+ @override
visitTypeLiteral(TypeLiteral node) {
writeType(node.type);
}
+ @override
visitThisExpression(ThisExpression node) {
writeWord('this');
}
+ @override
visitRethrow(Rethrow node) {
writeWord('rethrow');
}
+ @override
visitThrow(Throw node) {
writeWord('throw');
writeSpace();
writeExpression(node.expression);
}
+ @override
visitListLiteral(ListLiteral node) {
if (node.isConst) {
writeWord('const');
@@ -1746,6 +1789,7 @@
writeSymbol(']');
}
+ @override
visitSetLiteral(SetLiteral node) {
if (node.isConst) {
writeWord('const');
@@ -1762,6 +1806,7 @@
writeSymbol('}');
}
+ @override
visitMapLiteral(MapLiteral node) {
if (node.isConst) {
writeWord('const');
@@ -1778,41 +1823,50 @@
writeSymbol('}');
}
+ @override
visitMapLiteralEntry(MapLiteralEntry node) {
writeExpression(node.key);
writeComma(':');
writeExpression(node.value);
}
+ @override
visitAwaitExpression(AwaitExpression node) {
writeWord('await');
writeExpression(node.operand);
}
+ @override
visitFunctionExpression(FunctionExpression node) {
writeFunction(node.function, terminateLine: false);
}
+ @override
visitStringLiteral(StringLiteral node) {
writeWord('"${escapeString(node.value)}"');
}
+ @override
visitIntLiteral(IntLiteral node) {
writeWord('${node.value}');
}
+ @override
visitDoubleLiteral(DoubleLiteral node) {
writeWord('${node.value}');
}
+ @override
visitBoolLiteral(BoolLiteral node) {
writeWord('${node.value}');
}
+ @override
visitNullLiteral(NullLiteral node) {
writeWord('null');
}
+ @override
visitLet(Let node) {
writeWord('let');
writeVariableDeclaration(node.variable);
@@ -1820,6 +1874,7 @@
writeExpression(node.body);
}
+ @override
visitBlockExpression(BlockExpression node) {
writeSpaced('block');
writeBlockBody(node.body.statements, asExpression: true);
@@ -1827,6 +1882,7 @@
writeExpression(node.value);
}
+ @override
visitInstantiation(Instantiation node) {
writeExpression(node.expression);
writeSymbol('<');
@@ -1834,6 +1890,7 @@
writeSymbol('>');
}
+ @override
visitLoadLibrary(LoadLibrary node) {
writeWord('LoadLibrary');
writeSymbol('(');
@@ -1842,6 +1899,7 @@
state = WORD;
}
+ @override
visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
writeWord('CheckLibraryIsLoaded');
writeSymbol('(');
@@ -1850,6 +1908,7 @@
state = WORD;
}
+ @override
visitLibraryPart(LibraryPart node) {
writeAnnotationList(node.annotations);
writeIndentation();
@@ -1858,6 +1917,7 @@
endLine(";");
}
+ @override
visitLibraryDependency(LibraryDependency node) {
writeIndentation();
writeWord(node.isImport ? 'import' : 'export');
@@ -1900,10 +1960,12 @@
endLine(';');
}
+ @override
defaultExpression(Expression node) {
writeWord('${node.runtimeType}');
}
+ @override
visitVariableGet(VariableGet node) {
writeVariableReference(node.variable);
DartType? promotedType = node.promotedType;
@@ -1915,6 +1977,7 @@
}
}
+ @override
visitVariableSet(VariableSet node) {
writeVariableReference(node.variable);
writeSpaced('=');
@@ -1940,18 +2003,21 @@
}
}
+ @override
visitDynamicGet(DynamicGet node) {
writeExpression(node.receiver, Precedence.PRIMARY);
_writeDynamicAccessKind(node.kind);
writeName(node.name);
}
+ @override
visitFunctionTearOff(FunctionTearOff node) {
writeExpression(node.receiver, Precedence.PRIMARY);
writeSymbol('.');
writeSymbol('call');
}
+ @override
visitInstanceGet(InstanceGet node) {
writeExpression(node.receiver, Precedence.PRIMARY);
writeSymbol('.');
@@ -1962,6 +2028,7 @@
writeSymbol('}');
}
+ @override
visitInstanceTearOff(InstanceTearOff node) {
writeExpression(node.receiver, Precedence.PRIMARY);
writeSymbol('.');
@@ -1972,6 +2039,7 @@
writeSymbol('}');
}
+ @override
visitDynamicSet(DynamicSet node) {
writeExpression(node.receiver, Precedence.PRIMARY);
_writeDynamicAccessKind(node.kind);
@@ -1980,6 +2048,7 @@
writeExpression(node.value);
}
+ @override
visitInstanceSet(InstanceSet node) {
writeExpression(node.receiver, Precedence.PRIMARY);
writeSymbol('.');
@@ -1989,12 +2058,14 @@
writeExpression(node.value);
}
+ @override
visitSuperPropertyGet(SuperPropertyGet node) {
writeWord('super');
writeSymbol('.');
writeInterfaceTarget(node.name, node.interfaceTargetReference);
}
+ @override
visitSuperPropertySet(SuperPropertySet node) {
writeWord('super');
writeSymbol('.');
@@ -2003,28 +2074,34 @@
writeExpression(node.value);
}
+ @override
visitStaticTearOff(StaticTearOff node) {
writeMemberReferenceFromReference(node.targetReference);
}
+ @override
visitStaticGet(StaticGet node) {
writeMemberReferenceFromReference(node.targetReference);
}
+ @override
visitStaticSet(StaticSet node) {
writeMemberReferenceFromReference(node.targetReference);
writeSpaced('=');
writeExpression(node.value);
}
+ @override
visitConstructorTearOff(ConstructorTearOff node) {
writeMemberReferenceFromReference(node.targetReference);
}
+ @override
visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) {
writeMemberReferenceFromReference(node.targetReference);
}
+ @override
visitTypedefTearOff(TypedefTearOff node) {
writeTypeParameterList(node.typeParameters);
state = SYMBOL;
@@ -2039,6 +2116,7 @@
state = WORD;
}
+ @override
visitExpressionStatement(ExpressionStatement node) {
writeIndentation();
writeExpression(node.expression);
@@ -2058,22 +2136,26 @@
asExpression ? writeSymbol('}') : endLine('}');
}
+ @override
visitBlock(Block node) {
writeIndentation();
writeBlockBody(node.statements);
}
+ @override
visitAssertBlock(AssertBlock node) {
writeIndentation();
writeSpaced('assert');
writeBlockBody(node.statements);
}
+ @override
visitEmptyStatement(EmptyStatement node) {
writeIndentation();
endLine(';');
}
+ @override
visitAssertStatement(AssertStatement node, {bool asExpression = false}) {
if (!asExpression) {
writeIndentation();
@@ -2093,6 +2175,7 @@
}
}
+ @override
visitLabeledStatement(LabeledStatement node) {
writeIndentation();
writeWord(syntheticNames.nameLabeledStatement(node));
@@ -2100,6 +2183,7 @@
writeNode(node.body);
}
+ @override
visitBreakStatement(BreakStatement node) {
writeIndentation();
writeWord('break');
@@ -2107,6 +2191,7 @@
endLine(';');
}
+ @override
visitWhileStatement(WhileStatement node) {
writeIndentation();
writeSpaced('while');
@@ -2116,6 +2201,7 @@
writeBody(node.body);
}
+ @override
visitDoStatement(DoStatement node) {
writeIndentation();
writeWord('do');
@@ -2127,6 +2213,7 @@
endLine(')');
}
+ @override
visitForStatement(ForStatement node) {
writeIndentation();
writeSpaced('for');
@@ -2143,6 +2230,7 @@
writeBody(node.body);
}
+ @override
visitForInStatement(ForInStatement node) {
writeIndentation();
if (node.isAsync) {
@@ -2157,6 +2245,7 @@
writeBody(node.body);
}
+ @override
visitSwitchStatement(SwitchStatement node) {
writeIndentation();
writeWord('switch');
@@ -2170,6 +2259,7 @@
endLine('}');
}
+ @override
visitSwitchCase(SwitchCase node) {
String label = syntheticNames.nameSwitchCase(node);
writeIndentation();
@@ -2191,6 +2281,7 @@
--indentation;
}
+ @override
visitContinueSwitchStatement(ContinueSwitchStatement node) {
writeIndentation();
writeWord('continue');
@@ -2198,6 +2289,7 @@
endLine(';');
}
+ @override
visitIfStatement(IfStatement node) {
writeIndentation();
writeWord('if');
@@ -2213,6 +2305,7 @@
}
}
+ @override
visitReturnStatement(ReturnStatement node) {
writeIndentation();
writeWord('return');
@@ -2224,6 +2317,7 @@
endLine(';');
}
+ @override
visitTryCatch(TryCatch node) {
writeIndentation();
writeWord('try');
@@ -2231,6 +2325,7 @@
node.catches.forEach(writeNode);
}
+ @override
visitCatch(Catch node) {
writeIndentation();
// ignore: unnecessary_null_comparison
@@ -2256,6 +2351,7 @@
writeBody(node.body);
}
+ @override
visitTryFinally(TryFinally node) {
writeIndentation();
writeWord('try');
@@ -2265,6 +2361,7 @@
writeBody(node.finalizer);
}
+ @override
visitYieldStatement(YieldStatement node) {
writeIndentation();
if (node.isYieldStar) {
@@ -2278,12 +2375,14 @@
endLine(';');
}
+ @override
visitVariableDeclaration(VariableDeclaration node) {
writeIndentation();
writeVariableDeclaration(node, useVarKeyword: true);
endLine(';');
}
+ @override
visitFunctionDeclaration(FunctionDeclaration node) {
writeAnnotationList(node.variable.annotations);
writeIndentation();
@@ -2325,6 +2424,7 @@
}
}
+ @override
visitArguments(Arguments node) {
if (node.types.isNotEmpty) {
writeSymbol('<');
@@ -2338,47 +2438,56 @@
writeSymbol(')');
}
+ @override
visitNamedExpression(NamedExpression node) {
writeWord(node.name);
writeComma(':');
writeExpression(node.value);
}
+ @override
defaultStatement(Statement node) {
writeIndentation();
endLine('${node.runtimeType}');
}
+ @override
visitInvalidInitializer(InvalidInitializer node) {
writeWord('invalid-initializer');
}
+ @override
visitFieldInitializer(FieldInitializer node) {
writeMemberReferenceFromReference(node.fieldReference);
writeSpaced('=');
writeExpression(node.value);
}
+ @override
visitSuperInitializer(SuperInitializer node) {
writeWord('super');
writeMemberReferenceFromReference(node.targetReference);
writeNode(node.arguments);
}
+ @override
visitRedirectingInitializer(RedirectingInitializer node) {
writeWord('this');
writeMemberReferenceFromReference(node.targetReference);
writeNode(node.arguments);
}
+ @override
visitLocalInitializer(LocalInitializer node) {
writeVariableDeclaration(node.variable);
}
+ @override
visitAssertInitializer(AssertInitializer node) {
visitAssertStatement(node.statement, asExpression: true);
}
+ @override
defaultInitializer(Initializer node) {
writeIndentation();
endLine(': ${node.runtimeType}');
@@ -2420,27 +2529,33 @@
}
}
+ @override
visitInvalidType(InvalidType node) {
writeWord('invalid-type');
}
+ @override
visitDynamicType(DynamicType node) {
writeWord('dynamic');
}
+ @override
visitVoidType(VoidType node) {
writeWord('void');
}
+ @override
visitNeverType(NeverType node) {
writeWord('Never');
writeNullability(node.nullability);
}
+ @override
visitNullType(NullType node) {
writeWord('Null');
}
+ @override
visitInterfaceType(InterfaceType node) {
writeClassReferenceFromReference(node.className);
if (node.typeArguments.isNotEmpty) {
@@ -2452,6 +2567,7 @@
writeNullability(node.nullability);
}
+ @override
visitExtensionType(ExtensionType node) {
writeExtensionReferenceFromReference(node.extensionReference);
if (node.typeArguments.isNotEmpty) {
@@ -2463,6 +2579,7 @@
writeNullability(node.declaredNullability);
}
+ @override
visitFutureOrType(FutureOrType node) {
writeWord('FutureOr');
writeSymbol('<');
@@ -2471,10 +2588,12 @@
writeNullability(node.declaredNullability);
}
+ @override
visitFunctionType(FunctionType node) {
writeFunctionType(node);
}
+ @override
visitNamedType(NamedType node) {
writeModifier(node.isRequired, 'required');
writeWord(node.name);
@@ -2483,6 +2602,7 @@
writeType(node.type);
}
+ @override
visitTypeParameterType(TypeParameterType node) {
writeTypeParameterReference(node.parameter);
writeNullability(node.declaredNullability);
@@ -2501,6 +2621,7 @@
}
}
+ @override
visitTypeParameter(TypeParameter node) {
writeModifier(node.isGenericCovariantImpl, 'generic-covariant-impl');
writeAnnotationList(node.annotations, separateLines: false);
@@ -2526,10 +2647,12 @@
writeWord(syntheticNames.nameConstant(node));
}
+ @override
visitConstantExpression(ConstantExpression node) {
writeConstantReference(node.constant);
}
+ @override
defaultConstant(Constant node) {
writeIndentation();
writeConstantReference(node);
@@ -2537,6 +2660,7 @@
endLine('${node.runtimeType}');
}
+ @override
visitNullConstant(NullConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2544,6 +2668,7 @@
endLine('${node.value}');
}
+ @override
visitBoolConstant(BoolConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2551,6 +2676,7 @@
endLine('${node.value}');
}
+ @override
visitIntConstant(IntConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2558,6 +2684,7 @@
endLine('${node.value}');
}
+ @override
visitDoubleConstant(DoubleConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2565,6 +2692,7 @@
endLine('${node.value}');
}
+ @override
visitSymbolConstant(SymbolConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2576,6 +2704,7 @@
endLine('${text}');
}
+ @override
visitListConstant(ListConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2587,6 +2716,7 @@
endLine(']');
}
+ @override
visitSetConstant(SetConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2598,6 +2728,7 @@
endLine('}');
}
+ @override
visitMapConstant(MapConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2613,6 +2744,7 @@
endLine(')');
}
+ @override
visitTypeLiteralConstant(TypeLiteralConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2623,6 +2755,7 @@
endLine(')');
}
+ @override
visitInstanceConstant(InstanceConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2647,6 +2780,7 @@
endLine('}');
}
+ @override
visitInstantiationConstant(InstantiationConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2666,6 +2800,7 @@
endLine();
}
+ @override
visitStringConstant(StringConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2673,6 +2808,7 @@
endLine('"${escapeString(node.value)}"');
}
+ @override
visitStaticTearOffConstant(StaticTearOffConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2683,6 +2819,7 @@
endLine();
}
+ @override
visitTypedefTearOffConstant(TypedefTearOffConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2703,6 +2840,7 @@
endLine();
}
+ @override
visitUnevaluatedConstant(UnevaluatedConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2713,6 +2851,7 @@
endLine();
}
+ @override
visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
writeIndentation();
writeConstantReference(node);
@@ -2723,6 +2862,7 @@
endLine();
}
+ @override
visitRedirectingFactoryTearOffConstant(
RedirectingFactoryTearOffConstant node) {
writeIndentation();
@@ -2734,6 +2874,7 @@
endLine();
}
+ @override
defaultNode(Node node) {
write('<${node.runtimeType}>');
}
diff --git a/pkg/kernel/lib/text/serializer_combinators.dart b/pkg/kernel/lib/text/serializer_combinators.dart
index aae9ea2..b187beb 100644
--- a/pkg/kernel/lib/text/serializer_combinators.dart
+++ b/pkg/kernel/lib/text/serializer_combinators.dart
@@ -136,16 +136,20 @@
class Nothing extends TextSerializer<void> {
const Nothing();
+ @override
void readFrom(Iterator<Object?> stream, DeserializationState? _) {}
+ @override
void writeTo(StringBuffer buffer, void ignored, SerializationState? _) {}
+ @override
bool get isEmpty => true;
}
class DartString extends TextSerializer<String> {
const DartString();
+ @override
String readFrom(Iterator<Object?> stream, DeserializationState? _) {
Object? current = stream.current;
if (current is! String) {
@@ -156,6 +160,7 @@
return result;
}
+ @override
void writeTo(StringBuffer buffer, String object, SerializationState? _) {
buffer.write(json.encode(object));
}
@@ -164,6 +169,7 @@
class DartInt extends TextSerializer<int> {
const DartInt();
+ @override
int readFrom(Iterator<Object?> stream, DeserializationState? _) {
Object? current = stream.current;
if (current is! String) {
@@ -174,6 +180,7 @@
return result;
}
+ @override
void writeTo(StringBuffer buffer, int object, SerializationState? _) {
buffer.write(object);
}
@@ -182,6 +189,7 @@
class DartDouble extends TextSerializer<double> {
const DartDouble();
+ @override
double readFrom(Iterator<Object?> stream, DeserializationState? _) {
Object? current = stream.current;
if (current is! String) {
@@ -192,6 +200,7 @@
return result;
}
+ @override
void writeTo(StringBuffer buffer, double object, SerializationState? _) {
buffer.write(object);
}
@@ -200,6 +209,7 @@
class DartBool extends TextSerializer<bool> {
const DartBool();
+ @override
bool readFrom(Iterator<Object?> stream, DeserializationState? _) {
Object? current = stream.current;
if (current is! String) {
@@ -217,6 +227,7 @@
return result;
}
+ @override
void writeTo(StringBuffer buffer, bool object, SerializationState? _) {
buffer.write(object ? 'true' : 'false');
}
@@ -225,11 +236,13 @@
class UriSerializer extends TextSerializer<Uri> {
const UriSerializer();
+ @override
Uri readFrom(Iterator<Object?> stream, DeserializationState? state) {
String uriAsString = const DartString().readFrom(stream, state);
return Uri.parse(uriAsString);
}
+ @override
void writeTo(StringBuffer buffer, Uri object, SerializationState? state) {
const DartString().writeTo(buffer, object.toString(), state);
}
@@ -258,6 +271,7 @@
_serializers.addAll(tagsAndSerializers.values);
}
+ @override
T readFrom(Iterator<Object?> stream, DeserializationState? state) {
Object? iterator = stream.current;
if (iterator is! Iterator<Object?>) {
@@ -284,6 +298,7 @@
throw StateError("Unrecognized tag '${tag}'.");
}
+ @override
void writeTo(StringBuffer buffer, T object, SerializationState? state) {
String tag = tagger.tag(object);
for (int i = 0; i < _tags.length; ++i) {
@@ -310,14 +325,17 @@
const Wrapped(this.unwrap, this.wrap, this.contents);
+ @override
K readFrom(Iterator<Object?> stream, DeserializationState? state) {
return wrap(contents.readFrom(stream, state));
}
+ @override
void writeTo(StringBuffer buffer, K object, SerializationState? state) {
contents.writeTo(buffer, unwrap(object), state);
}
+ @override
bool get isEmpty => contents.isEmpty;
}
@@ -326,6 +344,7 @@
const ScopedUse();
+ @override
T readFrom(Iterator<Object?> stream, DeserializationState? state) {
if (state == null) {
throw StateError(
@@ -335,6 +354,7 @@
as T;
}
+ @override
void writeTo(StringBuffer buffer, T object, SerializationState? state) {
if (state == null) {
throw StateError(
@@ -351,12 +371,14 @@
const Tuple2Serializer(this.first, this.second);
+ @override
Tuple2<T1, T2> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
return new Tuple2(
first.readFrom(stream, state), second.readFrom(stream, state));
}
+ @override
void writeTo(
StringBuffer buffer, Tuple2<T1, T2> object, SerializationState? state) {
first.writeTo(buffer, object.first, state);
@@ -379,12 +401,14 @@
const Tuple3Serializer(this.first, this.second, this.third);
+ @override
Tuple3<T1, T2, T3> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
return new Tuple3(first.readFrom(stream, state),
second.readFrom(stream, state), third.readFrom(stream, state));
}
+ @override
void writeTo(StringBuffer buffer, Tuple3<T1, T2, T3> object,
SerializationState? state) {
first.writeTo(buffer, object.first, state);
@@ -412,6 +436,7 @@
const Tuple4Serializer(this.first, this.second, this.third, this.fourth);
+ @override
Tuple4<T1, T2, T3, T4> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
return new Tuple4(
@@ -421,6 +446,7 @@
fourth.readFrom(stream, state));
}
+ @override
void writeTo(StringBuffer buffer, Tuple4<T1, T2, T3, T4> object,
SerializationState? state) {
first.writeTo(buffer, object.first, state);
@@ -453,6 +479,7 @@
const Tuple5Serializer(
this.first, this.second, this.third, this.fourth, this.fifth);
+ @override
Tuple5<T1, T2, T3, T4, T5> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
return new Tuple5(
@@ -463,6 +490,7 @@
fifth.readFrom(stream, state));
}
+ @override
void writeTo(StringBuffer buffer, Tuple5<T1, T2, T3, T4, T5> object,
SerializationState? state) {
first.writeTo(buffer, object.first, state);
@@ -499,6 +527,7 @@
const Tuple6Serializer(
this.first, this.second, this.third, this.fourth, this.fifth, this.sixth);
+ @override
Tuple6<T1, T2, T3, T4, T5, T6> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
return new Tuple6(
@@ -510,6 +539,7 @@
sixth.readFrom(stream, state));
}
+ @override
void writeTo(StringBuffer buffer, Tuple6<T1, T2, T3, T4, T5, T6> object,
SerializationState? state) {
first.writeTo(buffer, object.first, state);
@@ -551,6 +581,7 @@
const Tuple7Serializer(this.first, this.second, this.third, this.fourth,
this.fifth, this.sixth, this.seventh);
+ @override
Tuple7<T1, T2, T3, T4, T5, T6, T7> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
return new Tuple7(
@@ -563,6 +594,7 @@
seventh.readFrom(stream, state));
}
+ @override
void writeTo(StringBuffer buffer, Tuple7<T1, T2, T3, T4, T5, T6, T7> object,
SerializationState? state) {
first.writeTo(buffer, object.first, state);
@@ -608,6 +640,7 @@
const Tuple8Serializer(this.first, this.second, this.third, this.fourth,
this.fifth, this.sixth, this.seventh, this.eighth);
+ @override
Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
return new Tuple8(
@@ -621,6 +654,7 @@
eighth.readFrom(stream, state));
}
+ @override
void writeTo(
StringBuffer buffer,
Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> object,
@@ -663,6 +697,7 @@
const ListSerializer(this.elements);
+ @override
List<T> readFrom(Iterator<Object?> stream, DeserializationState? state) {
Object? iterator = stream.current;
if (iterator is! Iterator<Object?>) {
@@ -677,6 +712,7 @@
return result;
}
+ @override
void writeTo(StringBuffer buffer, List<T> object, SerializationState? state) {
buffer.write('(');
for (int i = 0; i < object.length; ++i) {
@@ -692,6 +728,7 @@
const Optional(this.contents);
+ @override
T? readFrom(Iterator<Object?> stream, DeserializationState? state) {
if (stream.current == '_') {
stream.moveNext();
@@ -700,6 +737,7 @@
return contents.readFrom(stream, state);
}
+ @override
void writeTo(StringBuffer buffer, T? object, SerializationState? state) {
if (object == null) {
buffer.write('_');
@@ -720,6 +758,7 @@
Binder(TextSerializer<T> contents)
: namedContents = new Tuple2Serializer(const DartString(), contents);
+ @override
Tuple2<String, T> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
if (state == null) {
@@ -733,6 +772,7 @@
return new Tuple2(name, object);
}
+ @override
void writeTo(StringBuffer buffer, Tuple2<String?, T> namedObject,
SerializationState? state) {
if (state == null) {
@@ -758,6 +798,7 @@
const Bind(this.pattern, this.term);
+ @override
Tuple2<P, T> readFrom(Iterator<Object?> stream, DeserializationState? state) {
if (state == null) {
throw StateError(
@@ -771,6 +812,7 @@
return new Tuple2(first, second);
}
+ @override
void writeTo(
StringBuffer buffer, Tuple2<P, T> tuple, SerializationState? state) {
if (state == null) {
@@ -797,6 +839,7 @@
const Rebind(this.pattern1, this.pattern2);
+ @override
Tuple2<P, T> readFrom(Iterator<Object?> stream, DeserializationState? state) {
if (state == null) {
throw StateError(
@@ -813,6 +856,7 @@
return new Tuple2(first, second);
}
+ @override
void writeTo(
StringBuffer buffer, Tuple2<P, T> tuple, SerializationState? state) {
if (state == null) {
@@ -837,6 +881,7 @@
const Zip(this.lists, this.zip, this.unzip);
+ @override
List<T> readFrom(Iterator<Object?> stream, DeserializationState? state) {
Tuple2<List<T1>, List<T2>> toZip = lists.readFrom(stream, state);
List<T1> firsts = toZip.first;
@@ -854,6 +899,7 @@
return zipped;
}
+ @override
void writeTo(StringBuffer buffer, List<T> zipped, SerializationState? state) {
List<T1> firsts;
List<T2> seconds;
diff --git a/pkg/kernel/lib/text/text_serialization_verifier.dart b/pkg/kernel/lib/text/text_serialization_verifier.dart
index dab2bc7..a8a0283 100644
--- a/pkg/kernel/lib/text/text_serialization_verifier.dart
+++ b/pkg/kernel/lib/text/text_serialization_verifier.dart
@@ -39,6 +39,7 @@
String get nameForDebugging;
+ @override
int compareTo(RoundTripStatus other) {
Node thisNode = this.node;
Node otherNode = other.node;
@@ -111,6 +112,7 @@
}
}
+ @override
String toString() {
StringBuffer sb = new StringBuffer();
printOn(sb);
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index 0a49543..0f6e9f5 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -15,6 +15,7 @@
class NameTagger implements Tagger<Name> {
const NameTagger();
+ @override
String tag(Name name) => name.isPrivate ? "private" : "public";
}
@@ -33,92 +34,153 @@
implements Tagger<Expression> {
const ExpressionTagger();
+ @override
String tag(Expression expression) => expression.accept(this);
+ @override
String visitStringLiteral(StringLiteral _) => "string";
+ @override
String visitIntLiteral(IntLiteral _) => "int";
+ @override
String visitDoubleLiteral(DoubleLiteral _) => "double";
+ @override
String visitBoolLiteral(BoolLiteral _) => "bool";
+ @override
String visitNullLiteral(NullLiteral _) => "null";
+ @override
String visitInvalidExpression(InvalidExpression _) => "invalid";
+ @override
String visitNot(Not _) => "not";
+ @override
String visitLogicalExpression(LogicalExpression expression) {
return logicalExpressionOperatorToString(expression.operatorEnum);
}
+ @override
String visitStringConcatenation(StringConcatenation _) => "concat";
+ @override
String visitSymbolLiteral(SymbolLiteral _) => "symbol";
+ @override
String visitThisExpression(ThisExpression _) => "this";
+ @override
String visitRethrow(Rethrow _) => "rethrow";
+ @override
String visitThrow(Throw _) => "throw";
+ @override
String visitAwaitExpression(AwaitExpression _) => "await";
+ @override
String visitConditionalExpression(ConditionalExpression _) => "cond";
+ @override
String visitIsExpression(IsExpression _) => "is";
+ @override
String visitAsExpression(AsExpression _) => "as";
+ @override
String visitTypeLiteral(TypeLiteral _) => "type";
+ @override
String visitListLiteral(ListLiteral expression) {
return expression.isConst ? "const-list" : "list";
}
+ @override
String visitSetLiteral(SetLiteral expression) {
return expression.isConst ? "const-set" : "set";
}
+ @override
String visitMapLiteral(MapLiteral expression) {
return expression.isConst ? "const-map" : "map";
}
+ @override
String visitLet(Let _) => "let";
+ @override
String visitInstanceGet(InstanceGet _) => "get-instance";
+ @override
String visitInstanceSet(InstanceSet _) => "set-instance";
+ @override
String visitDynamicGet(DynamicGet _) => "get-dynamic";
+ @override
String visitDynamicSet(DynamicSet _) => "set-dynamic";
+ @override
String visitInstanceTearOff(InstanceTearOff _) => "tearoff-instance";
+ @override
String visitFunctionTearOff(FunctionTearOff _) => "tearoff-function";
+ @override
String visitSuperPropertyGet(SuperPropertyGet _) => "get-super";
+ @override
String visitSuperPropertySet(SuperPropertySet _) => "set-super";
+ @override
String visitInstanceInvocation(InstanceInvocation _) => "invoke-instance";
+ @override
String visitInstanceGetterInvocation(InstanceGetterInvocation _) =>
"invoke-instance-getter";
+ @override
String visitDynamicInvocation(DynamicInvocation _) => "invoke-dynamic";
+ @override
String visitFunctionInvocation(FunctionInvocation _) => "invoke-function";
+ @override
String visitLocalFunctionInvocation(LocalFunctionInvocation _) =>
"invoke-local-function";
+ @override
String visitEqualsNull(EqualsNull _) => "equals-null";
+ @override
String visitEqualsCall(EqualsCall _) => "equals-call";
+ @override
String visitSuperMethodInvocation(SuperMethodInvocation _) => "invoke-super";
+ @override
String visitVariableGet(VariableGet _) => "get-var";
+ @override
String visitVariableSet(VariableSet _) => "set-var";
+ @override
String visitStaticGet(StaticGet _) => "get-static";
+ @override
String visitStaticSet(StaticSet _) => "set-static";
+ @override
String visitStaticTearOff(StaticTearOff _) => "tearoff-static";
+ @override
String visitConstructorTearOff(ConstructorTearOff _) => "tearoff-constructor";
+ @override
String visitRedirectingFactoryTearOff(RedirectingFactoryTearOff _) =>
"tearoff-redirecting-factory";
+ @override
String visitTypedefTearOff(TypedefTearOff _) => "tearoff-typedef";
+ @override
String visitStaticInvocation(StaticInvocation expression) {
return expression.isConst ? "invoke-const-static" : "invoke-static";
}
+ @override
String visitConstructorInvocation(ConstructorInvocation expression) {
return expression.isConst
? "invoke-const-constructor"
: "invoke-constructor";
}
+ @override
String visitFunctionExpression(FunctionExpression _) => "fun";
+ @override
String visitListConcatenation(ListConcatenation _) => "lists";
+ @override
String visitSetConcatenation(SetConcatenation _) => "sets";
+ @override
String visitMapConcatenation(MapConcatenation _) => "maps";
+ @override
String visitBlockExpression(BlockExpression _) => "let-block";
+ @override
String visitInstantiation(Instantiation _) => "apply";
+ @override
String visitNullCheck(NullCheck _) => "not-null";
+ @override
String visitFileUriExpression(FileUriExpression _) => "with-uri";
+ @override
String visitCheckLibraryIsLoaded(CheckLibraryIsLoaded _) => "is-loaded";
+ @override
String visitLoadLibrary(LoadLibrary _) => "load";
+ @override
String visitConstantExpression(ConstantExpression _) => "const";
+ @override
String visitInstanceCreation(InstanceCreation _) => "object";
@override
@@ -574,6 +636,7 @@
class InstanceAccessKindTagger implements Tagger<InstanceAccessKind> {
const InstanceAccessKindTagger();
+ @override
String tag(InstanceAccessKind kind) {
return instanceAccessKindToName[kind] ??
(throw StateError("Unknown InstanceAccessKind flag value: ${kind}."));
@@ -665,6 +728,7 @@
class DynamicAccessKindTagger implements Tagger<DynamicAccessKind> {
const DynamicAccessKindTagger();
+ @override
String tag(DynamicAccessKind kind) {
return dynamicAccessKindToName[kind] ??
(throw StateError("Unknown DynamicAccessKind flag value: ${kind}."));
@@ -704,6 +768,7 @@
class FunctionAccessKindTagger implements Tagger<FunctionAccessKind> {
const FunctionAccessKindTagger();
+ @override
String tag(FunctionAccessKind kind) {
return functionAccessKindToName[kind] ??
(throw StateError("Unknown FunctionAccessKind flag value: ${kind}."));
@@ -849,6 +914,7 @@
}
}
+ @override
CanonicalName readFrom(
Iterator<Object?> stream, DeserializationState? state) {
if (state == null) {
@@ -863,6 +929,7 @@
return name;
}
+ @override
void writeTo(
StringBuffer buffer, CanonicalName name, SerializationState? state) {
StringBuffer sb = new StringBuffer();
@@ -1153,6 +1220,7 @@
};
class VariableDeclarationFlagTagger implements Tagger<int> {
+ @override
String tag(int flag) {
return variableDeclarationFlagToName[flag] ??
(throw StateError("Unknown VariableDeclaration flag value: ${flag}."));
@@ -1226,17 +1294,28 @@
implements Tagger<DartType> {
const DartTypeTagger();
+ @override
String tag(DartType type) => type.accept(this);
+ @override
String visitInvalidType(InvalidType _) => "invalid";
+ @override
String visitDynamicType(DynamicType _) => "dynamic";
+ @override
String visitVoidType(VoidType _) => "void";
+ @override
String visitFunctionType(FunctionType _) => "->";
+ @override
String visitTypeParameterType(TypeParameterType _) => "par";
+ @override
String visitInterfaceType(InterfaceType _) => "interface";
+ @override
String visitNeverType(NeverType _) => "never";
+ @override
String visitTypedefType(TypedefType _) => "typedef";
+ @override
String visitFutureOrType(FutureOrType _) => "futureor";
+ @override
String visitNullType(NullType _) => "null-type";
@override
@@ -1390,37 +1469,58 @@
implements Tagger<Statement> {
const StatementTagger();
+ @override
String tag(Statement statement) => statement.accept(this);
+ @override
String visitExpressionStatement(ExpressionStatement _) => "expr";
+ @override
String visitReturnStatement(ReturnStatement node) {
return node.expression == null ? "ret-void" : "ret";
}
+ @override
String visitYieldStatement(YieldStatement _) => "yield";
+ @override
String visitBlock(Block _) => "block";
+ @override
String visitVariableDeclaration(VariableDeclaration _) => "local";
+ @override
String visitIfStatement(IfStatement node) {
return node.otherwise == null ? "if" : "if-else";
}
+ @override
String visitEmptyStatement(EmptyStatement node) => "skip";
+ @override
String visitWhileStatement(WhileStatement node) => "while";
+ @override
String visitDoStatement(DoStatement node) => "do-while";
+ @override
String visitForStatement(ForStatement node) => "for";
+ @override
String visitForInStatement(ForInStatement node) {
return node.isAsync ? "await-for-in" : "for-in";
}
+ @override
String visitAssertStatement(AssertStatement node) => "assert";
+ @override
String visitAssertBlock(AssertBlock node) => "assert-block";
+ @override
String visitLabeledStatement(LabeledStatement node) => "label";
+ @override
String visitBreakStatement(BreakStatement node) => "break";
+ @override
String visitTryFinally(TryFinally node) => "try-finally";
+ @override
String visitTryCatch(TryCatch node) => "try-catch";
+ @override
String visitSwitchStatement(SwitchStatement node) => "switch";
+ @override
String visitContinueSwitchStatement(ContinueSwitchStatement node) =>
"continue";
+ @override
String visitFunctionDeclaration(FunctionDeclaration node) => "local-fun";
@override
@@ -1509,6 +1609,7 @@
extends TextSerializer<Tuple2<List<Statement>, Expression?>> {
const BlockSerializer();
+ @override
Tuple2<List<Statement>, Expression?> readFrom(
Iterator<Object?> stream, DeserializationState? state) {
if (state == null) {
@@ -1535,6 +1636,7 @@
return new Tuple2(statements, expression);
}
+ @override
void writeTo(StringBuffer buffer, Tuple2<List<Statement>, Expression?> tuple,
SerializationState? state) {
if (state == null) {
@@ -1727,6 +1829,7 @@
(SwitchCase z) => Tuple2(z, z.body))));
class SwitchCaseTagger implements Tagger<SwitchCase> {
+ @override
String tag(SwitchCase node) {
return node.isDefault ? "default" : "case";
}
@@ -1777,6 +1880,7 @@
class AsyncMarkerTagger implements Tagger<AsyncMarker> {
const AsyncMarkerTagger();
+ @override
String tag(AsyncMarker node) {
return asyncMarkerToName[node] ?? (throw new UnsupportedError("${node}"));
}
@@ -1791,8 +1895,10 @@
functionNodeWithInitializersSerializer = Wrapped<
Tuple2<
AsyncMarker,
- Tuple2< /**/
- Tuple2< /**/
+ Tuple2<
+ /**/
+ Tuple2<
+ /**/
List<TypeParameter>,
Tuple3<
List<VariableDeclaration>,
@@ -1856,6 +1962,7 @@
class ProcedureFlagTagger implements Tagger<int> {
const ProcedureFlagTagger();
+ @override
String tag(int flag) {
return procedureFlagToName[flag] ??
(throw StateError("Unknown Procedure flag value: ${flag}."));
@@ -1883,6 +1990,7 @@
class FieldFlagTagger implements Tagger<int> {
const FieldFlagTagger();
+ @override
String tag(int flag) {
return fieldFlagToName[flag] ??
(throw StateError("Unknown Field flag value: ${flag}."));
@@ -1904,6 +2012,7 @@
class ConstructorFlagTagger implements Tagger<int> {
const ConstructorFlagTagger();
+ @override
String tag(int flag) {
return constructorFlagToName[flag] ??
(throw StateError("Unknown Constructor flag value: ${flag}."));
@@ -1925,6 +2034,7 @@
class RedirectingFactoryFlagTagger implements Tagger<int> {
const RedirectingFactoryFlagTagger();
+ @override
String tag(int flag) {
return redirectingFactoryFlagToName[flag] ??
(throw StateError("Unknown RedirectingFactory flag value: ${flag}."));
@@ -1943,6 +2053,7 @@
class MemberTagger implements Tagger<Member> {
const MemberTagger();
+ @override
String tag(Member node) {
if (node is Field) {
return node.hasSetter ? "mutable-field" : "immutable-field";
@@ -2025,13 +2136,14 @@
Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
functionNodeSerializer, UriSerializer()));
-TextSerializer<Procedure> factorySerializer = Wrapped<
- Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
- (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
- (u) => Procedure(u.first, ProcedureKind.Factory, u.third, fileUri: u.fourth)
- ..flags = u.second,
- Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
- functionNodeSerializer, UriSerializer()));
+TextSerializer<Procedure> factorySerializer =
+ Wrapped<Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
+ (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
+ (u) => Procedure(u.first, ProcedureKind.Factory, u.third,
+ fileUri: u.fourth)
+ ..flags = u.second,
+ Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
+ functionNodeSerializer, UriSerializer()));
TextSerializer<Constructor> constructorSerializer = Wrapped<
Tuple4<Name, int, Tuple2<FunctionNode, List<Initializer>?>, Uri>,
@@ -2076,6 +2188,7 @@
class LibraryTagger implements Tagger<Library> {
const LibraryTagger();
+ @override
String tag(Library node) {
return node.isNonNullableByDefault ? "null-safe" : "legacy";
}
@@ -2091,6 +2204,7 @@
class LibraryFlagTagger implements Tagger<int> {
const LibraryFlagTagger();
+ @override
String tag(int flag) {
return libraryFlagToName[flag] ??
(throw StateError("Unknown Library flag value: ${flag}."));
@@ -2137,6 +2251,7 @@
ListSerializer(librarySerializer));
class ShowHideTagger implements Tagger<Combinator> {
+ @override
String tag(Combinator node) => node.isShow ? "show" : "hide";
}
@@ -2171,30 +2286,48 @@
implements Tagger<Constant> {
const ConstantTagger();
+ @override
String tag(Constant node) => node.accept(this);
+ @override
String visitBoolConstant(BoolConstant node) => "const-bool";
+ @override
String visitDoubleConstant(DoubleConstant node) => "const-double";
+ @override
String visitInstanceConstant(InstanceConstant node) => "const-object";
+ @override
String visitIntConstant(IntConstant node) => "const-int";
+ @override
String visitListConstant(ListConstant node) => "const-list";
+ @override
String visitMapConstant(MapConstant node) => "const-map";
+ @override
String visitNullConstant(NullConstant node) => "const-null";
+ @override
String visitInstantiationConstant(InstantiationConstant node) =>
"const-apply";
+ @override
String visitSetConstant(SetConstant node) => "const-set";
+ @override
String visitStringConstant(StringConstant node) => "const-string";
+ @override
String visitSymbolConstant(SymbolConstant node) => "const-symbol";
+ @override
String visitStaticTearOffConstant(StaticTearOffConstant node) =>
"const-tearoff-static";
+ @override
String visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
"const-tearoff-constructor";
+ @override
String visitRedirectingFactoryTearOffConstant(
RedirectingFactoryTearOffConstant node) =>
"const-tearoff-redirecting-factory";
+ @override
String visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
"const-tearoff-typedef";
+ @override
String visitTypeLiteralConstant(TypeLiteralConstant node) => "const-type";
+ @override
String visitUnevaluatedConstant(UnevaluatedConstant node) => "const-expr";
@override
@@ -2335,6 +2468,7 @@
class InitializerTagger implements Tagger<Initializer> {
const InitializerTagger();
+ @override
String tag(Initializer node) {
if (node is AssertInitializer) {
return "assert";
@@ -2406,6 +2540,7 @@
class ClassFlagTagger implements Tagger<int> {
const ClassFlagTagger();
+ @override
String tag(int flag) {
return classFlagToName[flag] ??
(throw StateError("Unknown Class flag value: ${flag}."));
@@ -2482,6 +2617,7 @@
class ExtensionMemberDescriptorFlagTagger implements Tagger<int> {
const ExtensionMemberDescriptorFlagTagger();
+ @override
String tag(int flag) {
return extensionMemberDescriptorFlagToName[flag] ??
(throw StateError(
@@ -2510,6 +2646,7 @@
class ExtensionMemberKindTagger implements Tagger<ExtensionMemberKind> {
const ExtensionMemberKindTagger();
+ @override
String tag(ExtensionMemberKind kind) {
return extensionMemberKindToName[kind] ??
(throw StateError("Unknown ExtensionMemberKind flag value: ${kind}."));
diff --git a/pkg/kernel/lib/transformations/async.dart b/pkg/kernel/lib/transformations/async.dart
index 848a1ce..2866e54 100644
--- a/pkg/kernel/lib/transformations/async.dart
+++ b/pkg/kernel/lib/transformations/async.dart
@@ -157,13 +157,21 @@
// Simple literals. These are pure expressions so they can be evaluated after
// an await to their right.
+ @override
TreeNode visitSymbolLiteral(SymbolLiteral expr) => expr;
+ @override
TreeNode visitTypeLiteral(TypeLiteral expr) => expr;
+ @override
TreeNode visitThisExpression(ThisExpression expr) => expr;
+ @override
TreeNode visitStringLiteral(StringLiteral expr) => expr;
+ @override
TreeNode visitIntLiteral(IntLiteral expr) => expr;
+ @override
TreeNode visitDoubleLiteral(DoubleLiteral expr) => expr;
+ @override
TreeNode visitBoolLiteral(BoolLiteral expr) => expr;
+ @override
TreeNode visitNullLiteral(NullLiteral expr) => expr;
// Nullary expressions with effects.
@@ -175,13 +183,18 @@
return expr;
}
+ @override
TreeNode visitSuperPropertyGet(SuperPropertyGet expr) => nullary(expr);
+ @override
TreeNode visitStaticGet(StaticGet expr) => nullary(expr);
+ @override
TreeNode visitStaticTearOff(StaticTearOff expr) => nullary(expr);
+ @override
TreeNode visitRethrow(Rethrow expr) => nullary(expr);
// Getting a final or const variable is not an effect so it can be evaluated
// after an await to its right.
+ @override
TreeNode visitVariableGet(VariableGet expr) {
Expression result = expr;
if (seenAwait && !expr.variable.isFinal && !expr.variable.isConst) {
@@ -271,6 +284,7 @@
});
}
+ @override
TreeNode visitArguments(Arguments args) {
for (var named in args.named.reversed) {
named.value = transform(named.value)..parent = named;
@@ -326,24 +340,28 @@
});
}
+ @override
TreeNode visitSuperMethodInvocation(SuperMethodInvocation expr) {
return transformTreeNode(expr, () {
visitArguments(expr.arguments);
});
}
+ @override
TreeNode visitStaticInvocation(StaticInvocation expr) {
return transformTreeNode(expr, () {
visitArguments(expr.arguments);
});
}
+ @override
TreeNode visitConstructorInvocation(ConstructorInvocation expr) {
return transformTreeNode(expr, () {
visitArguments(expr.arguments);
});
}
+ @override
TreeNode visitStringConcatenation(StringConcatenation expr) {
return transformTreeNode(expr, () {
var expressions = expr.expressions;
@@ -353,6 +371,7 @@
});
}
+ @override
TreeNode visitListLiteral(ListLiteral expr) {
return transformTreeNode(expr, () {
var expressions = expr.expressions;
@@ -362,6 +381,7 @@
});
}
+ @override
TreeNode visitMapLiteral(MapLiteral expr) {
return transformTreeNode(expr, () {
for (var entry in expr.entries.reversed) {
@@ -372,6 +392,7 @@
}
// Control flow.
+ @override
TreeNode visitLogicalExpression(LogicalExpression expr) {
var shouldName = seenAwait;
@@ -437,6 +458,7 @@
return unsafeCastVariableGet(result, type);
}
+ @override
TreeNode visitConditionalExpression(ConditionalExpression expr) {
// Then and otherwise are delimited because they are conditionally
// evaluated.
@@ -502,6 +524,7 @@
}
// Others.
+ @override
TreeNode visitAwaitExpression(AwaitExpression expr) {
final R = continuationRewriter;
var shouldName = seenAwait;
@@ -558,11 +581,13 @@
return result;
}
+ @override
TreeNode visitFunctionExpression(FunctionExpression expr) {
expr.transformChildren(this);
return expr;
}
+ @override
TreeNode visitLet(Let expr) {
var body = transform(expr.body);
@@ -604,12 +629,14 @@
}
}
+ @override
visitFunctionNode(FunctionNode node) {
var nestedRewriter = new RecursiveContinuationRewriter(
continuationRewriter.helper, _staticTypeContext);
return nestedRewriter.transform(node);
}
+ @override
TreeNode visitBlockExpression(BlockExpression expr) {
return transformTreeNode(expr, () {
expr.value = transform(expr.value)..parent = expr;
@@ -648,6 +675,7 @@
return null;
}
+ @override
TreeNode defaultStatement(Statement stmt) {
throw new UnsupportedError(
"Use _rewriteStatement to transform statement: ${stmt}");
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index fd8476f..3baab93 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -99,6 +99,7 @@
return transform(node);
}
+ @override
visitField(Field node, TreeNode? removalSentinel) {
staticTypeContext.enterMember(node);
final result = super.visitField(node, removalSentinel);
@@ -106,6 +107,7 @@
return result;
}
+ @override
visitConstructor(Constructor node, TreeNode? removalSentinel) {
staticTypeContext.enterMember(node);
final result = super.visitConstructor(node, removalSentinel);
@@ -283,6 +285,7 @@
return new YieldStatement(value, isNative: true);
}
+ @override
TreeNode visitTryCatch(TryCatch node, TreeNode? removalSentinel) {
// ignore: unnecessary_null_comparison
if (node.body != null) {
@@ -298,6 +301,7 @@
return node;
}
+ @override
TreeNode visitTryFinally(TryFinally node, TreeNode? removalSentinel) {
// ignore: unnecessary_null_comparison
if (node.body != null) {
@@ -492,6 +496,7 @@
]);
}
+ @override
visitYieldStatement(YieldStatement node, TreeNode? removalSentinel) {
Expression transformedExpression = transform(node.expression);
@@ -517,6 +522,7 @@
return new Block(statements);
}
+ @override
TreeNode visitReturnStatement(
ReturnStatement node, TreeNode? removalSentinel) {
// sync* functions cannot return a value.
@@ -655,6 +661,7 @@
List<Statement> statements = <Statement>[];
+ @override
TreeNode visitExpressionStatement(
ExpressionStatement stmt, TreeNode? removalSentinel) {
stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
@@ -663,6 +670,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitBlock(Block stmt, TreeNode? removalSentinel) {
var saved = statements;
statements = <Statement>[];
@@ -674,11 +682,13 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitEmptyStatement(EmptyStatement stmt, TreeNode? removalSentinel) {
statements.add(stmt);
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitAssertBlock(AssertBlock stmt, TreeNode? removalSentinel) {
var saved = statements;
statements = <Statement>[];
@@ -690,6 +700,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitAssertStatement(
AssertStatement stmt, TreeNode? removalSentinel) {
var condEffects = <Statement>[];
@@ -760,6 +771,7 @@
return result;
}
+ @override
TreeNode visitLabeledStatement(
LabeledStatement stmt, TreeNode? removalSentinel) {
stmt.body = visitDelimited(stmt.body)..parent = stmt;
@@ -767,11 +779,13 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitBreakStatement(BreakStatement stmt, TreeNode? removalSentinel) {
statements.add(stmt);
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitWhileStatement(WhileStatement stmt, TreeNode? removalSentinel) {
Statement body = visitDelimited(stmt.body);
List<Statement> effects = <Statement>[];
@@ -801,6 +815,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitDoStatement(DoStatement stmt, TreeNode? removalSentinel) {
Statement body = visitDelimited(stmt.body);
List<Statement> effects = <Statement>[];
@@ -820,6 +835,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitForStatement(ForStatement stmt, TreeNode? removalSentinel) {
// Because of for-loop scoping and variable capture, it is tricky to deal
// with await in the loop's variable initializers or update expressions.
@@ -832,7 +848,7 @@
if (decl.initializer != null) {
decl.initializer = expressionRewriter!
.rewrite(decl.initializer!, statements)
- ..parent = decl;
+ ..parent = decl;
}
isSimple = isSimple && statements.isEmpty;
return statements;
@@ -963,6 +979,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitForInStatement(ForInStatement stmt, TreeNode? removalSentinel) {
if (stmt.isAsync) {
// Transform
@@ -1088,6 +1105,7 @@
}
}
+ @override
TreeNode visitSwitchStatement(
SwitchStatement stmt, TreeNode? removalSentinel) {
stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
@@ -1101,12 +1119,14 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitContinueSwitchStatement(
ContinueSwitchStatement stmt, TreeNode? removalSentinel) {
statements.add(stmt);
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitIfStatement(IfStatement stmt, TreeNode? removalSentinel) {
stmt.condition = expressionRewriter!.rewrite(stmt.condition, statements)
..parent = stmt;
@@ -1118,6 +1138,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitTryCatch(TryCatch stmt, TreeNode? removalSentinel) {
++currentTryDepth;
stmt.body = visitDelimited(stmt.body)..parent = stmt;
@@ -1132,6 +1153,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitTryFinally(TryFinally stmt, TreeNode? removalSentinel) {
++currentTryDepth;
stmt.body = visitDelimited(stmt.body)..parent = stmt;
@@ -1143,6 +1165,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitYieldStatement(YieldStatement stmt, TreeNode? removalSentinel) {
stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
..parent = stmt;
@@ -1150,17 +1173,19 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitVariableDeclaration(
VariableDeclaration stmt, TreeNode? removalSentinel) {
if (stmt.initializer != null) {
stmt.initializer = expressionRewriter!
.rewrite(stmt.initializer!, statements)
- ..parent = stmt;
+ ..parent = stmt;
}
statements.add(stmt);
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitFunctionDeclaration(
FunctionDeclaration stmt, TreeNode? removalSentinel) {
stmt.function = transform(stmt.function)..parent = stmt;
@@ -1168,6 +1193,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
defaultExpression(TreeNode node, TreeNode? removalSentinel) =>
throw 'unreachable $node';
}
@@ -1231,6 +1257,7 @@
return enclosingFunction;
}
+ @override
Statement buildWrappedBody() {
++currentTryDepth;
Statement body = super.buildWrappedBody();
@@ -1249,6 +1276,7 @@
return tryFinally;
}
+ @override
Statement buildCatchBody(VariableDeclaration exceptionVariable,
VariableDeclaration stackTraceVariable) {
return new ExpressionStatement(new InstanceInvocation(
@@ -1264,6 +1292,7 @@
as FunctionType));
}
+ @override
Statement buildReturn(Statement body) {
// Async* functions cannot return a value. The returns from the function
// have been translated into breaks from the labeled body.
@@ -1273,6 +1302,7 @@
]);
}
+ @override
TreeNode visitYieldStatement(YieldStatement stmt, TreeNode? removalSentinel) {
Expression expr = expressionRewriter!.rewrite(stmt.expression, statements);
@@ -1298,6 +1328,7 @@
return removalSentinel ?? EmptyStatement();
}
+ @override
TreeNode visitReturnStatement(
ReturnStatement node, TreeNode? removalSentinel) {
// Async* functions cannot return a value.
@@ -1380,6 +1411,7 @@
}
// :async_op's try-catch catch body:
+ @override
Statement buildCatchBody(exceptionVariable, stackTraceVariable) {
// _completeOnAsyncError(_future, e, st, :is_sync)
return ExpressionStatement(StaticInvocation(
@@ -1393,6 +1425,7 @@
}
// :async_op's try-catch try body:
+ @override
Statement buildReturn(Statement body) {
// Returns from the body have all been translated into assignments to the
// return value variable followed by a break from the labeled body.
@@ -1413,6 +1446,7 @@
]);
}
+ @override
visitReturnStatement(ReturnStatement node, TreeNode? removalSentinel) {
var expr = node.expression == null
? new NullLiteral()
diff --git a/pkg/kernel/lib/transformations/scanner.dart b/pkg/kernel/lib/transformations/scanner.dart
index 18c7814..ec75cbd 100644
--- a/pkg/kernel/lib/transformations/scanner.dart
+++ b/pkg/kernel/lib/transformations/scanner.dart
@@ -18,18 +18,22 @@
Map<X, ScanResult<Y, TreeNode?>?> targets = new Map();
Map<X, ScanError>? errors;
+ @override
String toString() => 'ScanResult<$X,$Y>';
}
class ScanError {}
abstract class ClassScanner<Y extends TreeNode?> implements Scanner<Class, Y> {
+ @override
final Scanner<Y, TreeNode?>? next;
ClassScanner(this.next);
+ @override
bool predicate(Class node);
+ @override
ScanResult<Class, Y> scan(TreeNode node) {
ScanResult<Class, Y> result = new ScanResult<Class, Y>();
@@ -64,12 +68,15 @@
}
abstract class FieldScanner<Y extends TreeNode> implements Scanner<Field, Y> {
+ @override
final Scanner<Y, TreeNode>? next;
FieldScanner(this.next);
+ @override
bool predicate(Field node);
+ @override
ScanResult<Field, Y> scan(TreeNode node) {
ScanResult<Field, Y> result = new ScanResult<Field, Y>();
@@ -115,12 +122,15 @@
}
abstract class MemberScanner<Y extends TreeNode> implements Scanner<Member, Y> {
+ @override
final Scanner<Y, TreeNode?>? next;
MemberScanner(this.next);
+ @override
bool predicate(Member node);
+ @override
ScanResult<Member, Y> scan(TreeNode node) {
ScanResult<Member, Y> result = new ScanResult<Member, Y>();
@@ -167,12 +177,15 @@
abstract class ProcedureScanner<Y extends TreeNode?>
implements Scanner<Procedure, Y> {
+ @override
final Scanner<Y, TreeNode>? next;
ProcedureScanner(this.next);
+ @override
bool predicate(Procedure node);
+ @override
ScanResult<Procedure, Y> scan(TreeNode node) {
ScanResult<Procedure, Y> result = new ScanResult<Procedure, Y>();
@@ -219,13 +232,16 @@
abstract class ExpressionScanner<Y extends TreeNode>
extends RecursiveResultVisitor<void> implements Scanner<Expression, Y> {
+ @override
final Scanner<Y, TreeNode>? next;
ScanResult<Expression, Y>? _result;
ExpressionScanner(this.next);
+ @override
bool predicate(Expression node);
+ @override
ScanResult<Expression, Y> scan(TreeNode node) {
ScanResult<Expression, Y> result =
_result = new ScanResult<Expression, Y>();
@@ -245,13 +261,16 @@
abstract class MethodInvocationScanner<Y extends TreeNode?>
extends RecursiveVisitor
implements Scanner<InstanceInvocationExpression, Y> {
+ @override
final Scanner<Y, TreeNode>? next;
ScanResult<InstanceInvocationExpression, Y>? _result;
MethodInvocationScanner(this.next);
+ @override
bool predicate(InstanceInvocationExpression node);
+ @override
ScanResult<InstanceInvocationExpression, Y> scan(TreeNode node) {
ScanResult<InstanceInvocationExpression, Y> result =
_result = new ScanResult<InstanceInvocationExpression, Y>();
@@ -260,6 +279,7 @@
return result;
}
+ @override
void visitInstanceInvocation(InstanceInvocation node) {
if (predicate(node)) {
_result!.targets[node] = next?.scan(node);
diff --git a/pkg/kernel/lib/transformations/value_class.dart b/pkg/kernel/lib/transformations/value_class.dart
index 61481e5..cbb27dc 100644
--- a/pkg/kernel/lib/transformations/value_class.dart
+++ b/pkg/kernel/lib/transformations/value_class.dart
@@ -15,12 +15,14 @@
class ValueClassScanner extends ClassScanner<Null> {
ValueClassScanner() : super(null);
+ @override
bool predicate(Class node) => isValueClass(node);
}
class JenkinsClassScanner extends ClassScanner<Procedure> {
JenkinsClassScanner(Scanner<Procedure, TreeNode?> next) : super(next);
+ @override
bool predicate(Class node) {
return node.name == "JenkinsSmiHash";
}
@@ -29,6 +31,7 @@
class HashCombineMethodsScanner extends ProcedureScanner<Null> {
HashCombineMethodsScanner() : super(null);
+ @override
bool predicate(Procedure node) {
return node.name.text == "combine" || node.name.text == "finish";
}
@@ -38,6 +41,7 @@
AllMemberScanner(Scanner<InstanceInvocationExpression, TreeNode?> next)
: super(next);
+ @override
bool predicate(Member member) => true;
}
@@ -50,6 +54,7 @@
// @valueClass V {}
// V v;
// (v as dynamic).copyWith() as V
+ @override
bool predicate(InstanceInvocationExpression node) {
return node.name.text == "copyWith" &&
_isValueClassAsConstruct(node.receiver);
@@ -346,8 +351,8 @@
.map<VariableDeclaration>(
(f) => VariableDeclaration(f.name, type: f.type))
.toList()
- ..addAll(cls.fields.map<VariableDeclaration>(
- (f) => VariableDeclaration(f.name.text, type: f.type)));
+ ..addAll(cls.fields.map<VariableDeclaration>(
+ (f) => VariableDeclaration(f.name.text, type: f.type)));
}
void removeValueClassAnnotation(Class cls) {
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index 9581107..f836d1e 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -298,6 +298,7 @@
const _NullSubstitution();
+ @override
DartType getSubstitute(TypeParameter parameter, bool upperBound) {
return new TypeParameterType.forAlphaRenaming(parameter, parameter);
}
@@ -318,6 +319,7 @@
_MapSubstitution(this.upper, this.lower);
+ @override
DartType? getSubstitute(TypeParameter parameter, bool upperBound) {
return upperBound ? upper[parameter] : lower[parameter];
}
@@ -335,10 +337,12 @@
}
}
+ @override
DartType? lookup(TypeParameter parameter, bool upperBound) {
return substitution.getSubstitute(parameter, upperBound);
}
+ @override
TypeParameter freshTypeParameter(TypeParameter node) {
throw 'Create a fresh environment first';
}
@@ -349,6 +353,7 @@
_ClassBottomSubstitution(this.class_);
+ @override
DartType? getSubstitute(TypeParameter parameter, bool upperBound) {
if (parameter.parent == class_) {
return upperBound ? const NeverType.nonNullable() : const DynamicType();
@@ -362,6 +367,7 @@
_CombinedSubstitution(this.first, this.second);
+ @override
DartType? getSubstitute(TypeParameter parameter, bool upperBound) {
return first.getSubstitute(parameter, upperBound) ??
second.getSubstitute(parameter, upperBound);
@@ -376,6 +382,7 @@
_FilteredSubstitution(this.base, this.filterFn);
+ @override
DartType? getSubstitute(TypeParameter parameter, bool upperBound) {
return filterFn(parameter)
? base.getSubstitute(parameter, upperBound)
@@ -388,10 +395,12 @@
_InnerTypeSubstitutor(_TypeSubstitutor? outer) : super(outer);
+ @override
DartType? lookup(TypeParameter parameter, bool upperBound) {
return substitution[parameter];
}
+ @override
TypeParameter freshTypeParameter(TypeParameter node) {
TypeParameter fresh = new TypeParameter(node.name)..flags = node.flags;
TypeParameterType typeParameterType = substitution[node] =
@@ -578,13 +587,20 @@
DartType visit(DartType node) => node.accept(this);
+ @override
DartType defaultDartType(DartType node) => node;
+ @override
DartType visitInvalidType(InvalidType node) => node;
+ @override
DartType visitDynamicType(DynamicType node) => node;
+ @override
DartType visitVoidType(VoidType node) => node;
+ @override
DartType visitNeverType(NeverType node) => node;
+ @override
DartType visitNullType(NullType node) => node;
+ @override
DartType visitInterfaceType(InterfaceType node) {
if (node.typeArguments.isEmpty) return node;
int before = useCounter;
@@ -593,6 +609,7 @@
return new InterfaceType(node.classNode, node.nullability, typeArguments);
}
+ @override
DartType visitFutureOrType(FutureOrType node) {
int before = useCounter;
DartType typeArgument = node.typeArgument.accept(this);
@@ -600,6 +617,7 @@
return new FutureOrType(typeArgument, node.declaredNullability);
}
+ @override
DartType visitTypedefType(TypedefType node) {
if (node.typeArguments.isEmpty) return node;
int before = useCounter;
@@ -615,6 +633,7 @@
TypeParameter freshTypeParameter(TypeParameter node);
+ @override
DartType visitFunctionType(FunctionType node) {
// This is a bit tricky because we have to generate fresh type parameters
// in order to change the bounds. At the same time, if the function type
@@ -682,6 +701,7 @@
return null;
}
+ @override
DartType visitTypeParameterType(TypeParameterType node) {
DartType? replacement = getSubstitute(node.parameter);
if (replacement is InvalidType) return replacement;
@@ -749,6 +769,7 @@
return visit(node.type);
}
+ @override
bool defaultDartType(DartType node) {
if (unhandledTypeHandler == null) {
throw new UnsupportedError("Unsupported type '${node.runtimeType}'.");
@@ -757,28 +778,38 @@
}
}
+ @override
bool visitNeverType(NeverType node) => false;
+ @override
bool visitNullType(NullType node) => false;
+ @override
bool visitInvalidType(InvalidType node) => false;
+ @override
bool visitDynamicType(DynamicType node) => false;
+ @override
bool visitVoidType(VoidType node) => false;
+ @override
bool visitInterfaceType(InterfaceType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitExtensionType(ExtensionType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitFutureOrType(FutureOrType node) {
return visit(node.typeArgument);
}
+ @override
bool visitTypedefType(TypedefType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitFunctionType(FunctionType node) {
return node.typeParameters.any(handleTypeParameter) ||
node.positionalParameters.any(visit) ||
@@ -786,6 +817,7 @@
visit(node.returnType);
}
+ @override
bool visitTypeParameterType(TypeParameterType node) {
return variables.contains(node.parameter);
}
@@ -806,6 +838,7 @@
bool visit(DartType node) => node.accept(this);
+ @override
bool defaultDartType(DartType node) {
throw new UnsupportedError("Unsupported type $node (${node.runtimeType}.");
}
@@ -814,28 +847,38 @@
return visit(node.type);
}
+ @override
bool visitNeverType(NeverType node) => false;
+ @override
bool visitNullType(NullType node) => false;
+ @override
bool visitInvalidType(InvalidType node) => false;
+ @override
bool visitDynamicType(DynamicType node) => false;
+ @override
bool visitVoidType(VoidType node) => false;
+ @override
bool visitInterfaceType(InterfaceType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitExtensionType(ExtensionType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitFutureOrType(FutureOrType node) {
return visit(node.typeArgument);
}
+ @override
bool visitTypedefType(TypedefType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitFunctionType(FunctionType node) {
variables.addAll(node.typeParameters);
bool result = node.typeParameters.any(handleTypeParameter) ||
@@ -846,6 +889,7 @@
return result;
}
+ @override
bool visitTypeParameterType(TypeParameterType node) {
return node.parameter.parent == null && !variables.contains(node.parameter);
}
@@ -866,6 +910,7 @@
bool visit(DartType node) => node.accept(this);
+ @override
bool defaultDartType(DartType node) {
throw new UnsupportedError("Unsupported type $node (${node.runtimeType}.");
}
@@ -874,28 +919,38 @@
return visit(node.type);
}
+ @override
bool visitNeverType(NeverType node) => false;
+ @override
bool visitNullType(NullType node) => false;
+ @override
bool visitInvalidType(InvalidType node) => false;
+ @override
bool visitDynamicType(DynamicType node) => false;
+ @override
bool visitVoidType(VoidType node) => false;
+ @override
bool visitInterfaceType(InterfaceType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitExtensionType(ExtensionType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitFutureOrType(FutureOrType node) {
return visit(node.typeArgument);
}
+ @override
bool visitTypedefType(TypedefType node) {
return node.typeArguments.any(visit);
}
+ @override
bool visitFunctionType(FunctionType node) {
variables.addAll(node.typeParameters);
bool result = node.typeParameters.any(handleTypeParameter) ||
@@ -906,6 +961,7 @@
return result;
}
+ @override
bool visitTypeParameterType(TypeParameterType node) {
return !variables.contains(node.parameter);
}
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index 8d9cacc..b321095 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -170,24 +170,30 @@
node.accept(this);
}
+ @override
defaultMember(Member node) => throw 'Unused';
+ @override
DartType defaultBasicLiteral(BasicLiteral node) {
return defaultExpression(node);
}
+ @override
DartType defaultExpression(Expression node) {
throw 'Unexpected expression ${node.runtimeType}';
}
+ @override
defaultStatement(Statement node) {
throw 'Unexpected statement ${node.runtimeType}';
}
+ @override
defaultInitializer(Initializer node) {
throw 'Unexpected initializer ${node.runtimeType}';
}
+ @override
visitField(Field node) {
if (node.initializer != null) {
node.initializer =
@@ -195,6 +201,7 @@
}
}
+ @override
visitConstructor(Constructor node) {
currentReturnType = null;
currentYieldType = null;
@@ -202,12 +209,14 @@
handleFunctionNode(node.function);
}
+ @override
visitProcedure(Procedure node) {
currentReturnType = _getInternalReturnType(node.function);
currentYieldType = _getYieldType(node.function);
handleFunctionNode(node.function);
}
+ @override
visitRedirectingFactory(RedirectingFactory node) {
currentReturnType = null;
currentYieldType = null;
diff --git a/pkg/kernel/lib/type_environment.dart b/pkg/kernel/lib/type_environment.dart
index f0b4795..6b22016 100644
--- a/pkg/kernel/lib/type_environment.dart
+++ b/pkg/kernel/lib/type_environment.dart
@@ -16,6 +16,7 @@
typedef void ErrorHandler(TreeNode node, String message);
abstract class TypeEnvironment extends Types {
+ @override
final CoreTypes coreTypes;
TypeEnvironment.fromSubclass(this.coreTypes, ClassHierarchyBase base)
@@ -509,6 +510,7 @@
return _value == _valueAlways;
}
+ @override
String toString() {
switch (_value) {
case _valueAlways:
@@ -540,15 +542,18 @@
late Map<ForInStatement, DartType> _forInIteratorTypes = {};
late Map<ForInStatement, DartType> _forInElementTypes = {};
+ @override
DartType getExpressionType(Expression node, StaticTypeContext context) {
return _expressionTypes[node] ??= node.getStaticTypeInternal(context);
}
+ @override
DartType getForInIteratorType(
ForInStatement node, StaticTypeContext context) {
return _forInIteratorTypes[node] ??= node.getIteratorTypeInternal(context);
}
+ @override
DartType getForInElementType(ForInStatement node, StaticTypeContext context) {
return _forInElementTypes[node] ??= node.getElementTypeInternal(context);
}
@@ -610,6 +615,7 @@
/// The [TypeEnvironment] used for the static type computation.
///
/// This provides access to the core types and the class hierarchy.
+ @override
final TypeEnvironment typeEnvironment;
/// The library in which the static type is computed.
@@ -619,6 +625,7 @@
final Library _library;
/// The static type of a `this` expression.
+ @override
final InterfaceType? thisType;
final StaticTypeCache? _cache;
@@ -642,21 +649,26 @@
/// The [Nullability] used for non-nullable types.
///
/// For opt out libraries this is [Nullability.legacy].
+ @override
Nullability get nonNullable => _library.nonNullable;
/// The [Nullability] used for nullable types.
///
/// For opt out libraries this is [Nullability.legacy].
+ @override
Nullability get nullable => _library.nullable;
/// Return `true` if the current library is opted in to non-nullable by
/// default.
+ @override
bool get isNonNullableByDefault => _library.isNonNullableByDefault;
/// Returns the mode under which the current library was compiled.
+ @override
NonNullableByDefaultCompiledMode get nonNullableByDefaultCompiledMode =>
_library.nonNullableByDefaultCompiledMode;
+ @override
DartType getExpressionType(Expression node) {
if (_cache != null) {
return _cache!.getExpressionType(node, this);
@@ -665,6 +677,7 @@
}
}
+ @override
DartType getForInIteratorType(ForInStatement node) {
if (_cache != null) {
return _cache!.getForInIteratorType(node, this);
@@ -673,6 +686,7 @@
}
}
+ @override
DartType getForInElementType(ForInStatement node) {
if (_cache != null) {
return _cache!.getForInElementType(node, this);
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 9ef4115..7581e08 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -22,6 +22,7 @@
VerificationError(this.context, this.node, this.details);
+ @override
toString() {
Location? location;
try {
@@ -209,6 +210,7 @@
}
}
+ @override
visitComponent(Component component) {
try {
for (Library library in component.libraries) {
@@ -239,12 +241,14 @@
}
}
+ @override
void visitLibrary(Library node) {
currentLibrary = node;
super.visitLibrary(node);
currentLibrary = null;
}
+ @override
visitExtension(Extension node) {
currentExtension = node;
declareTypeParameters(node.typeParameters);
@@ -276,12 +280,14 @@
typedefState[node] = TypedefState.Done;
}
+ @override
visitTypedef(Typedef node) {
checkTypedef(node);
// Enter and exit the node to check the parent pointer on the typedef node.
exitParent(enterParent(node));
}
+ @override
visitField(Field node) {
currentMember = node;
TreeNode? oldParent = enterParent(node);
@@ -324,6 +330,7 @@
currentMember = null;
}
+ @override
visitProcedure(Procedure node) {
currentMember = node;
TreeNode? oldParent = enterParent(node);
@@ -374,6 +381,7 @@
currentMember = null;
}
+ @override
visitConstructor(Constructor node) {
currentMember = node;
classTypeParametersAreInScope = true;
@@ -394,6 +402,7 @@
currentMember = null;
}
+ @override
visitClass(Class node) {
currentClass = node;
declareTypeParameters(node.typeParameters);
@@ -410,6 +419,7 @@
currentClass = null;
}
+ @override
visitFunctionNode(FunctionNode node) {
declareTypeParameters(node.typeParameters);
bool savedInCatchBlock = inCatchBlock;
@@ -429,6 +439,7 @@
undeclareTypeParameters(node.typeParameters);
}
+ @override
visitFunctionType(FunctionType node) {
for (int i = 1; i < node.namedParameters.length; ++i) {
if (node.namedParameters[i - 1].compareTo(node.namedParameters[i]) >= 0) {
@@ -450,18 +461,22 @@
undeclareTypeParameters(node.typeParameters);
}
+ @override
visitBlock(Block node) {
visitWithLocalScope(node);
}
+ @override
visitForStatement(ForStatement node) {
visitWithLocalScope(node);
}
+ @override
visitForInStatement(ForInStatement node) {
visitWithLocalScope(node);
}
+ @override
visitLet(Let node) {
if (_isCompileTimeErrorEncoding(node)) return;
visitWithLocalScope(node);
@@ -472,6 +487,7 @@
return;
}
+ @override
visitBlockExpression(BlockExpression node) {
int stackHeight = enterLocalScope();
// Do not visit the block directly because the value expression needs to
@@ -487,6 +503,7 @@
exitLocalScope(stackHeight);
}
+ @override
visitCatch(Catch node) {
bool savedInCatchBlock = inCatchBlock;
inCatchBlock = true;
@@ -539,6 +556,7 @@
}
}
+ @override
visitVariableDeclaration(VariableDeclaration node) {
TreeNode? parent = node.parent;
if (parent is! Block &&
@@ -567,6 +585,7 @@
}
}
+ @override
visitVariableGet(VariableGet node) {
checkVariableInScope(node.variable, node);
visitChildren(node);
@@ -575,6 +594,7 @@
}
}
+ @override
visitVariableSet(VariableSet node) {
checkVariableInScope(node.variable, node);
visitChildren(node);
@@ -999,6 +1019,7 @@
CheckParentPointers([this.parent]);
+ @override
defaultTreeNode(TreeNode node) {
if (node.parent != parent) {
throw new VerificationError(
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index 5e5c959..cbd116e 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -186,109 +186,197 @@
R defaultTreeNode(TreeNode node);
// Expressions
+ @override
R defaultExpression(Expression node) => defaultTreeNode(node);
+ @override
R defaultBasicLiteral(BasicLiteral node) => defaultExpression(node);
+ @override
R visitInvalidExpression(InvalidExpression node) => defaultExpression(node);
+ @override
R visitVariableGet(VariableGet node) => defaultExpression(node);
+ @override
R visitVariableSet(VariableSet node) => defaultExpression(node);
+ @override
R visitDynamicGet(DynamicGet node) => defaultExpression(node);
+ @override
R visitDynamicSet(DynamicSet node) => defaultExpression(node);
+ @override
R visitFunctionTearOff(FunctionTearOff node) => defaultExpression(node);
+ @override
R visitInstanceGet(InstanceGet node) => defaultExpression(node);
+ @override
R visitInstanceSet(InstanceSet node) => defaultExpression(node);
+ @override
R visitInstanceTearOff(InstanceTearOff node) => defaultExpression(node);
+ @override
R visitSuperPropertyGet(SuperPropertyGet node) => defaultExpression(node);
+ @override
R visitSuperPropertySet(SuperPropertySet node) => defaultExpression(node);
+ @override
R visitStaticGet(StaticGet node) => defaultExpression(node);
+ @override
R visitStaticSet(StaticSet node) => defaultExpression(node);
+ @override
R visitStaticTearOff(StaticTearOff node) => defaultExpression(node);
+ @override
R visitLocalFunctionInvocation(LocalFunctionInvocation node) =>
defaultExpression(node);
+ @override
R visitDynamicInvocation(DynamicInvocation node) => defaultExpression(node);
+ @override
R visitFunctionInvocation(FunctionInvocation node) => defaultExpression(node);
+ @override
R visitInstanceInvocation(InstanceInvocation node) => defaultExpression(node);
+ @override
R visitInstanceGetterInvocation(InstanceGetterInvocation node) =>
defaultExpression(node);
+ @override
R visitEqualsNull(EqualsNull node) => defaultExpression(node);
+ @override
R visitEqualsCall(EqualsCall node) => defaultExpression(node);
+ @override
R visitSuperMethodInvocation(SuperMethodInvocation node) =>
defaultExpression(node);
+ @override
R visitStaticInvocation(StaticInvocation node) => defaultExpression(node);
+ @override
R visitConstructorInvocation(ConstructorInvocation node) =>
defaultExpression(node);
+ @override
R visitNot(Not node) => defaultExpression(node);
+ @override
R visitNullCheck(NullCheck node) => defaultExpression(node);
+ @override
R visitLogicalExpression(LogicalExpression node) => defaultExpression(node);
+ @override
R visitConditionalExpression(ConditionalExpression node) =>
defaultExpression(node);
+ @override
R visitStringConcatenation(StringConcatenation node) =>
defaultExpression(node);
+ @override
R visitListConcatenation(ListConcatenation node) => defaultExpression(node);
+ @override
R visitSetConcatenation(SetConcatenation node) => defaultExpression(node);
+ @override
R visitMapConcatenation(MapConcatenation node) => defaultExpression(node);
+ @override
R visitInstanceCreation(InstanceCreation node) => defaultExpression(node);
+ @override
R visitFileUriExpression(FileUriExpression node) => defaultExpression(node);
+ @override
R visitIsExpression(IsExpression node) => defaultExpression(node);
+ @override
R visitAsExpression(AsExpression node) => defaultExpression(node);
+ @override
R visitSymbolLiteral(SymbolLiteral node) => defaultExpression(node);
+ @override
R visitTypeLiteral(TypeLiteral node) => defaultExpression(node);
+ @override
R visitThisExpression(ThisExpression node) => defaultExpression(node);
+ @override
R visitRethrow(Rethrow node) => defaultExpression(node);
+ @override
R visitThrow(Throw node) => defaultExpression(node);
+ @override
R visitListLiteral(ListLiteral node) => defaultExpression(node);
+ @override
R visitSetLiteral(SetLiteral node) => defaultExpression(node);
+ @override
R visitMapLiteral(MapLiteral node) => defaultExpression(node);
+ @override
R visitAwaitExpression(AwaitExpression node) => defaultExpression(node);
+ @override
R visitFunctionExpression(FunctionExpression node) => defaultExpression(node);
+ @override
R visitConstantExpression(ConstantExpression node) => defaultExpression(node);
+ @override
R visitStringLiteral(StringLiteral node) => defaultBasicLiteral(node);
+ @override
R visitIntLiteral(IntLiteral node) => defaultBasicLiteral(node);
+ @override
R visitDoubleLiteral(DoubleLiteral node) => defaultBasicLiteral(node);
+ @override
R visitBoolLiteral(BoolLiteral node) => defaultBasicLiteral(node);
+ @override
R visitNullLiteral(NullLiteral node) => defaultBasicLiteral(node);
+ @override
R visitLet(Let node) => defaultExpression(node);
+ @override
R visitBlockExpression(BlockExpression node) => defaultExpression(node);
+ @override
R visitInstantiation(Instantiation node) => defaultExpression(node);
+ @override
R visitLoadLibrary(LoadLibrary node) => defaultExpression(node);
+ @override
R visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) =>
defaultExpression(node);
+ @override
R visitConstructorTearOff(ConstructorTearOff node) => defaultExpression(node);
+ @override
R visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) =>
defaultExpression(node);
+ @override
R visitTypedefTearOff(TypedefTearOff node) => defaultExpression(node);
// Statements
+ @override
R defaultStatement(Statement node) => defaultTreeNode(node);
+ @override
R visitExpressionStatement(ExpressionStatement node) =>
defaultStatement(node);
+ @override
R visitBlock(Block node) => defaultStatement(node);
+ @override
R visitAssertBlock(AssertBlock node) => defaultStatement(node);
+ @override
R visitEmptyStatement(EmptyStatement node) => defaultStatement(node);
+ @override
R visitAssertStatement(AssertStatement node) => defaultStatement(node);
+ @override
R visitLabeledStatement(LabeledStatement node) => defaultStatement(node);
+ @override
R visitBreakStatement(BreakStatement node) => defaultStatement(node);
+ @override
R visitWhileStatement(WhileStatement node) => defaultStatement(node);
+ @override
R visitDoStatement(DoStatement node) => defaultStatement(node);
+ @override
R visitForStatement(ForStatement node) => defaultStatement(node);
+ @override
R visitForInStatement(ForInStatement node) => defaultStatement(node);
+ @override
R visitSwitchStatement(SwitchStatement node) => defaultStatement(node);
+ @override
R visitContinueSwitchStatement(ContinueSwitchStatement node) =>
defaultStatement(node);
+ @override
R visitIfStatement(IfStatement node) => defaultStatement(node);
+ @override
R visitReturnStatement(ReturnStatement node) => defaultStatement(node);
+ @override
R visitTryCatch(TryCatch node) => defaultStatement(node);
+ @override
R visitTryFinally(TryFinally node) => defaultStatement(node);
+ @override
R visitYieldStatement(YieldStatement node) => defaultStatement(node);
+ @override
R visitVariableDeclaration(VariableDeclaration node) =>
defaultStatement(node);
+ @override
R visitFunctionDeclaration(FunctionDeclaration node) =>
defaultStatement(node);
// Members
+ @override
R defaultMember(Member node) => defaultTreeNode(node);
+ @override
R visitConstructor(Constructor node) => defaultMember(node);
+ @override
R visitProcedure(Procedure node) => defaultMember(node);
+ @override
R visitField(Field node) => defaultMember(node);
+ @override
R visitRedirectingFactory(RedirectingFactory node) {
return defaultMember(node);
}
@@ -298,14 +386,21 @@
R visitExtension(Extension node) => defaultTreeNode(node);
// Initializers
+ @override
R defaultInitializer(Initializer node) => defaultTreeNode(node);
+ @override
R visitInvalidInitializer(InvalidInitializer node) =>
defaultInitializer(node);
+ @override
R visitFieldInitializer(FieldInitializer node) => defaultInitializer(node);
+ @override
R visitSuperInitializer(SuperInitializer node) => defaultInitializer(node);
+ @override
R visitRedirectingInitializer(RedirectingInitializer node) =>
defaultInitializer(node);
+ @override
R visitLocalInitializer(LocalInitializer node) => defaultInitializer(node);
+ @override
R visitAssertInitializer(AssertInitializer node) => defaultInitializer(node);
// Other tree nodes
@@ -335,146 +430,234 @@
R defaultTreeNode(TreeNode node, A arg);
// Expressions
+ @override
R defaultExpression(Expression node, A arg) => defaultTreeNode(node, arg);
+ @override
R defaultBasicLiteral(BasicLiteral node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitInvalidExpression(InvalidExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitVariableGet(VariableGet node, A arg) => defaultExpression(node, arg);
+ @override
R visitVariableSet(VariableSet node, A arg) => defaultExpression(node, arg);
+ @override
R visitDynamicGet(DynamicGet node, A arg) => defaultExpression(node, arg);
+ @override
R visitDynamicSet(DynamicSet node, A arg) => defaultExpression(node, arg);
+ @override
R visitFunctionTearOff(FunctionTearOff node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitInstanceGet(InstanceGet node, A arg) => defaultExpression(node, arg);
+ @override
R visitInstanceSet(InstanceSet node, A arg) => defaultExpression(node, arg);
+ @override
R visitInstanceTearOff(InstanceTearOff node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitSuperPropertyGet(SuperPropertyGet node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitSuperPropertySet(SuperPropertySet node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitStaticGet(StaticGet node, A arg) => defaultExpression(node, arg);
+ @override
R visitStaticSet(StaticSet node, A arg) => defaultExpression(node, arg);
+ @override
R visitStaticTearOff(StaticTearOff node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitLocalFunctionInvocation(LocalFunctionInvocation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitDynamicInvocation(DynamicInvocation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitFunctionInvocation(FunctionInvocation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitInstanceInvocation(InstanceInvocation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitInstanceGetterInvocation(InstanceGetterInvocation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitEqualsNull(EqualsNull node, A arg) => defaultExpression(node, arg);
+ @override
R visitEqualsCall(EqualsCall node, A arg) => defaultExpression(node, arg);
+ @override
R visitSuperMethodInvocation(SuperMethodInvocation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitStaticInvocation(StaticInvocation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitConstructorInvocation(ConstructorInvocation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitNot(Not node, A arg) => defaultExpression(node, arg);
+ @override
R visitNullCheck(NullCheck node, A arg) => defaultExpression(node, arg);
+ @override
R visitLogicalExpression(LogicalExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitConditionalExpression(ConditionalExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitStringConcatenation(StringConcatenation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitListConcatenation(ListConcatenation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitSetConcatenation(SetConcatenation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitMapConcatenation(MapConcatenation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitInstanceCreation(InstanceCreation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitFileUriExpression(FileUriExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitIsExpression(IsExpression node, A arg) => defaultExpression(node, arg);
+ @override
R visitAsExpression(AsExpression node, A arg) => defaultExpression(node, arg);
+ @override
R visitSymbolLiteral(SymbolLiteral node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitTypeLiteral(TypeLiteral node, A arg) => defaultExpression(node, arg);
+ @override
R visitThisExpression(ThisExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitRethrow(Rethrow node, A arg) => defaultExpression(node, arg);
+ @override
R visitThrow(Throw node, A arg) => defaultExpression(node, arg);
+ @override
R visitListLiteral(ListLiteral node, A arg) => defaultExpression(node, arg);
+ @override
R visitSetLiteral(SetLiteral node, A arg) => defaultExpression(node, arg);
+ @override
R visitMapLiteral(MapLiteral node, A arg) => defaultExpression(node, arg);
+ @override
R visitAwaitExpression(AwaitExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitFunctionExpression(FunctionExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitConstantExpression(ConstantExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitStringLiteral(StringLiteral node, A arg) =>
defaultBasicLiteral(node, arg);
+ @override
R visitIntLiteral(IntLiteral node, A arg) => defaultBasicLiteral(node, arg);
+ @override
R visitDoubleLiteral(DoubleLiteral node, A arg) =>
defaultBasicLiteral(node, arg);
+ @override
R visitBoolLiteral(BoolLiteral node, A arg) => defaultBasicLiteral(node, arg);
+ @override
R visitNullLiteral(NullLiteral node, A arg) => defaultBasicLiteral(node, arg);
+ @override
R visitLet(Let node, A arg) => defaultExpression(node, arg);
+ @override
R visitBlockExpression(BlockExpression node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitInstantiation(Instantiation node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitLoadLibrary(LoadLibrary node, A arg) => defaultExpression(node, arg);
+ @override
R visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitConstructorTearOff(ConstructorTearOff node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node, A arg) =>
defaultExpression(node, arg);
+ @override
R visitTypedefTearOff(TypedefTearOff node, A arg) =>
defaultExpression(node, arg);
// Statements
+ @override
R defaultStatement(Statement node, A arg) => defaultTreeNode(node, arg);
+ @override
R visitExpressionStatement(ExpressionStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitBlock(Block node, A arg) => defaultStatement(node, arg);
+ @override
R visitAssertBlock(AssertBlock node, A arg) => defaultStatement(node, arg);
+ @override
R visitEmptyStatement(EmptyStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitAssertStatement(AssertStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitLabeledStatement(LabeledStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitBreakStatement(BreakStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitWhileStatement(WhileStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitDoStatement(DoStatement node, A arg) => defaultStatement(node, arg);
+ @override
R visitForStatement(ForStatement node, A arg) => defaultStatement(node, arg);
+ @override
R visitForInStatement(ForInStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitSwitchStatement(SwitchStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitContinueSwitchStatement(ContinueSwitchStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitIfStatement(IfStatement node, A arg) => defaultStatement(node, arg);
+ @override
R visitReturnStatement(ReturnStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitTryCatch(TryCatch node, A arg) => defaultStatement(node, arg);
+ @override
R visitTryFinally(TryFinally node, A arg) => defaultStatement(node, arg);
+ @override
R visitYieldStatement(YieldStatement node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitVariableDeclaration(VariableDeclaration node, A arg) =>
defaultStatement(node, arg);
+ @override
R visitFunctionDeclaration(FunctionDeclaration node, A arg) =>
defaultStatement(node, arg);
// Members
+ @override
R defaultMember(Member node, A arg) => defaultTreeNode(node, arg);
+ @override
R visitConstructor(Constructor node, A arg) => defaultMember(node, arg);
+ @override
R visitProcedure(Procedure node, A arg) => defaultMember(node, arg);
+ @override
R visitField(Field node, A arg) => defaultMember(node, arg);
+ @override
R visitRedirectingFactory(RedirectingFactory node, A arg) {
return defaultMember(node, arg);
}
@@ -484,17 +667,24 @@
R visitExtension(Extension node, A arg) => defaultTreeNode(node, arg);
// Initializers
+ @override
R defaultInitializer(Initializer node, A arg) => defaultTreeNode(node, arg);
+ @override
R visitInvalidInitializer(InvalidInitializer node, A arg) =>
defaultInitializer(node, arg);
+ @override
R visitFieldInitializer(FieldInitializer node, A arg) =>
defaultInitializer(node, arg);
+ @override
R visitSuperInitializer(SuperInitializer node, A arg) =>
defaultInitializer(node, arg);
+ @override
R visitRedirectingInitializer(RedirectingInitializer node, A arg) =>
defaultInitializer(node, arg);
+ @override
R visitLocalInitializer(LocalInitializer node, A arg) =>
defaultInitializer(node, arg);
+ @override
R visitAssertInitializer(AssertInitializer node, A arg) =>
defaultInitializer(node, arg);
@@ -750,30 +940,48 @@
return value;
}
+ @override
R defaultConstant(Constant node);
+ @override
R visitNullConstant(NullConstant node) => defaultConstant(node);
+ @override
R visitBoolConstant(BoolConstant node) => defaultConstant(node);
+ @override
R visitIntConstant(IntConstant node) => defaultConstant(node);
+ @override
R visitDoubleConstant(DoubleConstant node) => defaultConstant(node);
+ @override
R visitStringConstant(StringConstant node) => defaultConstant(node);
+ @override
R visitSymbolConstant(SymbolConstant node) => defaultConstant(node);
+ @override
R visitMapConstant(MapConstant node) => defaultConstant(node);
+ @override
R visitListConstant(ListConstant node) => defaultConstant(node);
+ @override
R visitSetConstant(SetConstant node) => defaultConstant(node);
+ @override
R visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
+ @override
R visitInstantiationConstant(InstantiationConstant node) =>
defaultConstant(node);
+ @override
R visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
defaultConstant(node);
+ @override
R visitStaticTearOffConstant(StaticTearOffConstant node) =>
defaultConstant(node);
+ @override
R visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
defaultConstant(node);
+ @override
R visitRedirectingFactoryTearOffConstant(
RedirectingFactoryTearOffConstant node) =>
defaultConstant(node);
+ @override
R visitTypeLiteralConstant(TypeLiteralConstant node) => defaultConstant(node);
+ @override
R visitUnevaluatedConstant(UnevaluatedConstant node) => defaultConstant(node);
}
@@ -799,29 +1007,46 @@
}
}
+ @override
void defaultConstant(Constant node);
+ @override
void visitNullConstant(NullConstant node) => defaultConstant(node);
+ @override
void visitBoolConstant(BoolConstant node) => defaultConstant(node);
+ @override
void visitIntConstant(IntConstant node) => defaultConstant(node);
+ @override
void visitDoubleConstant(DoubleConstant node) => defaultConstant(node);
+ @override
void visitStringConstant(StringConstant node) => defaultConstant(node);
+ @override
void visitSymbolConstant(SymbolConstant node) => defaultConstant(node);
+ @override
void visitMapConstant(MapConstant node) => defaultConstant(node);
+ @override
void visitListConstant(ListConstant node) => defaultConstant(node);
+ @override
void visitSetConstant(SetConstant node) => defaultConstant(node);
+ @override
void visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
+ @override
void visitInstantiationConstant(InstantiationConstant node) =>
defaultConstant(node);
+ @override
void visitStaticTearOffConstant(StaticTearOffConstant node) =>
defaultConstant(node);
+ @override
void visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
defaultConstant(node);
+ @override
void visitRedirectingFactoryTearOffConstant(
RedirectingFactoryTearOffConstant node) =>
defaultConstant(node);
+ @override
void visitTypeLiteralConstant(TypeLiteralConstant node) =>
defaultConstant(node);
+ @override
void visitUnevaluatedConstant(UnevaluatedConstant node) =>
defaultConstant(node);
}
@@ -863,46 +1088,77 @@
/// The catch-all case, except for references.
R defaultNode(Node node);
+ @override
R defaultTreeNode(TreeNode node) => defaultNode(node);
// DartTypes
+ @override
R defaultDartType(DartType node) => defaultNode(node);
+ @override
R visitInvalidType(InvalidType node) => defaultDartType(node);
+ @override
R visitDynamicType(DynamicType node) => defaultDartType(node);
+ @override
R visitVoidType(VoidType node) => defaultDartType(node);
+ @override
R visitInterfaceType(InterfaceType node) => defaultDartType(node);
+ @override
R visitFutureOrType(FutureOrType node) => defaultDartType(node);
+ @override
R visitFunctionType(FunctionType node) => defaultDartType(node);
+ @override
R visitTypeParameterType(TypeParameterType node) => defaultDartType(node);
+ @override
R visitTypedefType(TypedefType node) => defaultDartType(node);
+ @override
R visitNeverType(NeverType node) => defaultDartType(node);
+ @override
R visitNullType(NullType node) => defaultDartType(node);
+ @override
R visitExtensionType(ExtensionType node) => defaultDartType(node);
// Constants
+ @override
R defaultConstant(Constant node) => defaultNode(node);
+ @override
R visitNullConstant(NullConstant node) => defaultConstant(node);
+ @override
R visitBoolConstant(BoolConstant node) => defaultConstant(node);
+ @override
R visitIntConstant(IntConstant node) => defaultConstant(node);
+ @override
R visitDoubleConstant(DoubleConstant node) => defaultConstant(node);
+ @override
R visitStringConstant(StringConstant node) => defaultConstant(node);
+ @override
R visitSymbolConstant(SymbolConstant node) => defaultConstant(node);
+ @override
R visitMapConstant(MapConstant node) => defaultConstant(node);
+ @override
R visitListConstant(ListConstant node) => defaultConstant(node);
+ @override
R visitSetConstant(SetConstant node) => defaultConstant(node);
+ @override
R visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
+ @override
R visitInstantiationConstant(InstantiationConstant node) =>
defaultConstant(node);
+ @override
R visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
defaultConstant(node);
+ @override
R visitStaticTearOffConstant(StaticTearOffConstant node) =>
defaultConstant(node);
+ @override
R visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
defaultConstant(node);
+ @override
R visitRedirectingFactoryTearOffConstant(
RedirectingFactoryTearOffConstant node) =>
defaultConstant(node);
+ @override
R visitTypeLiteralConstant(TypeLiteralConstant node) => defaultConstant(node);
+ @override
R visitUnevaluatedConstant(UnevaluatedConstant node) => defaultConstant(node);
// Class references
@@ -952,11 +1208,16 @@
defaultConstantReference(node);
// Member references
+ @override
R defaultMemberReference(Member node);
+ @override
R visitFieldReference(Field node) => defaultMemberReference(node);
+ @override
R visitConstructorReference(Constructor node) => defaultMemberReference(node);
+ @override
R visitProcedureReference(Procedure node) => defaultMemberReference(node);
+ @override
R visitRedirectingFactoryReference(RedirectingFactory node) {
return defaultMemberReference(node);
}
@@ -975,43 +1236,70 @@
/// The catch-all case, except for references.
R defaultNode(Node node, A arg);
+ @override
R defaultTreeNode(TreeNode node, A arg) => defaultNode(node, arg);
// DartTypes
+ @override
R defaultDartType(DartType node, A arg) => defaultNode(node, arg);
+ @override
R visitInvalidType(InvalidType node, A arg) => defaultDartType(node, arg);
+ @override
R visitDynamicType(DynamicType node, A arg) => defaultDartType(node, arg);
+ @override
R visitVoidType(VoidType node, A arg) => defaultDartType(node, arg);
+ @override
R visitInterfaceType(InterfaceType node, A arg) => defaultDartType(node, arg);
+ @override
R visitFutureOrType(FutureOrType node, A arg) => defaultDartType(node, arg);
+ @override
R visitFunctionType(FunctionType node, A arg) => defaultDartType(node, arg);
+ @override
R visitTypeParameterType(TypeParameterType node, A arg) =>
defaultDartType(node, arg);
+ @override
R visitTypedefType(TypedefType node, A arg) => defaultDartType(node, arg);
+ @override
R visitNeverType(NeverType node, A arg) => defaultDartType(node, arg);
+ @override
R visitNullType(NullType node, A arg) => defaultDartType(node, arg);
+ @override
R visitExtensionType(ExtensionType node, A arg) => defaultDartType(node, arg);
// Constants
+ @override
R defaultConstant(Constant node, A arg) => defaultNode(node, arg);
+ @override
R visitNullConstant(NullConstant node, A arg) => defaultConstant(node, arg);
+ @override
R visitBoolConstant(BoolConstant node, A arg) => defaultConstant(node, arg);
+ @override
R visitIntConstant(IntConstant node, A arg) => defaultConstant(node, arg);
+ @override
R visitDoubleConstant(DoubleConstant node, A arg) =>
defaultConstant(node, arg);
+ @override
R visitStringConstant(StringConstant node, A arg) =>
defaultConstant(node, arg);
+ @override
R visitSymbolConstant(SymbolConstant node, A arg) =>
defaultConstant(node, arg);
+ @override
R visitMapConstant(MapConstant node, A arg) => defaultConstant(node, arg);
+ @override
R visitListConstant(ListConstant node, A arg) => defaultConstant(node, arg);
+ @override
R visitSetConstant(SetConstant node, A arg) => defaultConstant(node, arg);
+ @override
R visitInstanceConstant(InstanceConstant node, A arg) =>
defaultConstant(node, arg);
+ @override
R visitInstantiationConstant(InstantiationConstant node, A arg) =>
defaultConstant(node, arg);
+ @override
R visitTypeLiteralConstant(TypeLiteralConstant node, A arg) =>
defaultConstant(node, arg);
+ @override
R visitUnevaluatedConstant(UnevaluatedConstant node, A arg) =>
defaultConstant(node, arg);
@@ -1063,13 +1351,18 @@
defaultConstantReference(node, arg);
// Member references
+ @override
R defaultMemberReference(Member node, A arg);
+ @override
R visitFieldReference(Field node, A arg) => defaultMemberReference(node, arg);
+ @override
R visitConstructorReference(Constructor node, A arg) =>
defaultMemberReference(node, arg);
+ @override
R visitProcedureReference(Procedure node, A arg) =>
defaultMemberReference(node, arg);
+ @override
R visitRedirectingFactoryReference(RedirectingFactory node, A arg) =>
defaultMemberReference(node, arg);
@@ -1194,6 +1487,7 @@
class RecursiveVisitor<T> extends Visitor<void> with VisitorVoidMixin {
const RecursiveVisitor();
+ @override
void defaultNode(Node node) {
node.visitChildren(this);
}
@@ -1204,6 +1498,7 @@
class RecursiveResultVisitor<R> extends Visitor<R?> with VisitorNullMixin<R> {
const RecursiveResultVisitor();
+ @override
R? defaultNode(Node node) {
node.visitChildren(this);
return null;
@@ -1295,6 +1590,7 @@
Supertype visitSupertype(Supertype node) => node;
+ @override
TreeNode defaultTreeNode(TreeNode node) {
node.transformChildren(this);
return node;
@@ -1653,6 +1949,7 @@
Supertype visitSupertype(Supertype node, Supertype? removalSentinel) => node;
+ @override
TreeNode defaultTreeNode(TreeNode node, TreeNode? removalSentinel) {
node.transformOrRemoveChildren(this);
return node;
@@ -1806,38 +2103,59 @@
implements StatementVisitor1<R, T> {
const BodyVisitor1();
+ @override
R defaultStatement(Statement node, T arg);
+ @override
R visitExpressionStatement(ExpressionStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitBlock(Block node, T arg) => defaultStatement(node, arg);
+ @override
R visitAssertBlock(AssertBlock node, T arg) => defaultStatement(node, arg);
+ @override
R visitEmptyStatement(EmptyStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitAssertStatement(AssertStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitLabeledStatement(LabeledStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitBreakStatement(BreakStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitWhileStatement(WhileStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitDoStatement(DoStatement node, T arg) => defaultStatement(node, arg);
+ @override
R visitForStatement(ForStatement node, T arg) => defaultStatement(node, arg);
+ @override
R visitForInStatement(ForInStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitSwitchStatement(SwitchStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitContinueSwitchStatement(ContinueSwitchStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitIfStatement(IfStatement node, T arg) => defaultStatement(node, arg);
+ @override
R visitReturnStatement(ReturnStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitTryCatch(TryCatch node, T arg) => defaultStatement(node, arg);
+ @override
R visitTryFinally(TryFinally node, T arg) => defaultStatement(node, arg);
+ @override
R visitYieldStatement(YieldStatement node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitVariableDeclaration(VariableDeclaration node, T arg) =>
defaultStatement(node, arg);
+ @override
R visitFunctionDeclaration(FunctionDeclaration node, T arg) =>
defaultStatement(node, arg);
}
diff --git a/pkg/kernel/test/binary/utils.dart b/pkg/kernel/test/binary/utils.dart
index 1005909..b5faa20 100644
--- a/pkg/kernel/test/binary/utils.dart
+++ b/pkg/kernel/test/binary/utils.dart
@@ -32,9 +32,11 @@
class ByteSink implements Sink<List<int>> {
final BytesBuilder builder = new BytesBuilder();
+ @override
void add(List<int> data) {
builder.add(data);
}
+ @override
void close() {}
}
diff --git a/pkg/kernel/test/class_hierarchy_basic.dart b/pkg/kernel/test/class_hierarchy_basic.dart
index 78ca0c5..259fd47 100644
--- a/pkg/kernel/test/class_hierarchy_basic.dart
+++ b/pkg/kernel/test/class_hierarchy_basic.dart
@@ -11,6 +11,7 @@
/// A simple implementation of the class hierarchy interface using
/// hash tables for everything.
class BasicClassHierarchy implements ClassHierarchy {
+ @override
final Set<Library> knownLibraries;
final Map<Class, Set<Class>> superclasses = <Class, Set<Class>>{};
final Map<Class, Set<Class>> superMixtures = <Class, Set<Class>>{};
@@ -39,6 +40,7 @@
}
}
+ @override
void forEachOverridePair(
Class class_, callback(Member member, Member superMember, bool setter)) {
void report(Member member, Member superMember, bool setter) {
@@ -199,6 +201,7 @@
}
}
+ @override
bool isSubclassOf(Class subtype, Class supertype) {
return superclasses[subtype]!.contains(supertype);
}
@@ -207,18 +210,22 @@
return superMixtures[subtype]!.contains(supertype);
}
+ @override
bool isSubtypeOf(Class subtype, Class supertype) {
return supertypes[subtype]!.contains(supertype);
}
+ @override
Supertype? getClassAsInstanceOf(Class type, Class supertype) {
return supertypeInstantiations[type]![supertype];
}
+ @override
Member? getDispatchTarget(Class class_, Name name, {bool setter: false}) {
return setter ? setters[class_]![name] : gettersAndCalls[class_]![name];
}
+ @override
List<Member> getDispatchTargets(Class class_, {bool setters: false}) {
return setters
? this.setters[class_]!.values.toList()
@@ -229,6 +236,7 @@
return (members == null || members.isEmpty) ? null : members.first;
}
+ @override
Member? getInterfaceMember(Class class_, Name name, {bool setter: false}) {
return tryFirst(getInterfaceMembersByName(class_, name, setter: setter));
}
@@ -241,6 +249,7 @@
return iterable == null ? const <Member>[] : iterable;
}
+ @override
List<Member> getInterfaceMembers(Class class_, {bool setters: false}) {
return setters
? interfaceSetters[class_]!.values.expand((x) => x).toList()
@@ -255,5 +264,6 @@
double getCompressionRatio() => 0.0;
int getSuperTypeHashTableSize() => 0;
+ @override
noSuchMethod(inv) => super.noSuchMethod(inv);
}
diff --git a/pkg/kernel/test/graph_test.dart b/pkg/kernel/test/graph_test.dart
index 1dc79f9..e6d87db 100644
--- a/pkg/kernel/test/graph_test.dart
+++ b/pkg/kernel/test/graph_test.dart
@@ -13,8 +13,10 @@
TestGraph(this.graph);
+ @override
Iterable<String> get vertices => graph.keys;
+ @override
Iterable<String> neighborsOf(String vertex) => graph[vertex]!;
}
diff --git a/pkg/kernel/test/heap_test.dart b/pkg/kernel/test/heap_test.dart
index 32b294e..139fe54 100644
--- a/pkg/kernel/test/heap_test.dart
+++ b/pkg/kernel/test/heap_test.dart
@@ -34,5 +34,6 @@
}
class _intHeap extends Heap<int> {
+ @override
bool sortsBefore(int a, int b) => a < b;
}
diff --git a/pkg/kernel/test/metadata_test.dart b/pkg/kernel/test/metadata_test.dart
index 16418c6..fbdc952 100644
--- a/pkg/kernel/test/metadata_test.dart
+++ b/pkg/kernel/test/metadata_test.dart
@@ -56,10 +56,13 @@
class TestMetadataRepository extends MetadataRepository<Metadata> {
static const kTag = 'kernel.metadata.test';
+ @override
final String tag = kTag;
+ @override
final Map<TreeNode, Metadata> mapping = <TreeNode, Metadata>{};
+ @override
void writeToBinary(Metadata metadata, Node node, BinarySink sink) {
expect(metadata, equals(mapping[node]));
sink.writeByteList(utf8.encode(metadata.string));
@@ -69,6 +72,7 @@
sink.writeDartType(metadata.type);
}
+ @override
Metadata readFromBinary(Node node, BinarySource source) {
final string1 = utf8.decode(source.readByteList());
final string2 = source.readStringReference();
@@ -101,6 +105,7 @@
Visitor(this.predicate, this.handle);
+ @override
defaultTreeNode(TreeNode node) {
super.defaultTreeNode(node);
if (MetadataRepository.isSupported(node) && predicate(node)) {
diff --git a/pkg/kernel/test/type_hashcode_test.dart b/pkg/kernel/test/type_hashcode_test.dart
index 8d13fe6..c232443 100644
--- a/pkg/kernel/test/type_hashcode_test.dart
+++ b/pkg/kernel/test/type_hashcode_test.dart
@@ -65,6 +65,7 @@
bool get shouldSucceed => expectedSubstitution != null;
+ @override
String toString() => '∃ ${quantifiedVariables.join(',')}. $type1 = $type2';
}
diff --git a/pkg/kernel/test/type_substitute_bounds_test.dart b/pkg/kernel/test/type_substitute_bounds_test.dart
index ca16ac0..19436dc 100644
--- a/pkg/kernel/test/type_substitute_bounds_test.dart
+++ b/pkg/kernel/test/type_substitute_bounds_test.dart
@@ -41,6 +41,7 @@
TestCase(this.type, this.bounds, this.expected);
+ @override
String toString() {
var substitution = bounds.keys.map((key) {
var bound = bounds[key]!;