blob: d0033faf0b33f25420e07204df329f5263bfbb13 [file] [log] [blame]
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library fasta.kernel_constants;
import 'package:kernel/ast.dart' show InvalidExpression;
import '../builder/library_builder.dart';
import '../fasta_codes.dart' show LocatedMessage;
import '../loader.dart' show Loader;
import 'constant_evaluator.dart' show ErrorReporter;
class KernelConstantErrorReporter extends ErrorReporter {
final Loader loader;
KernelConstantErrorReporter(this.loader);
@override
void report(LocatedMessage message, List<LocatedMessage>? context) {
// Try to find library.
LibraryBuilder? builder = loader.builders[message.uri];
if (builder == null) {
for (LibraryBuilder candidate in loader.builders.values) {
if (candidate.fileUri == message.uri) {
// Found it.
builder = candidate;
break;
}
}
}
if (builder == null) {
// TODO(jensj): Probably a part or something.
loader.addProblem(message.messageObject, message.charOffset,
message.length, message.uri!,
context: context);
} else {
builder.addProblem(message.messageObject, message.charOffset,
message.length, message.uri,
context: context);
}
}
@override
void reportInvalidExpression(InvalidExpression node) {
// TODO(johnniwinther): Improve the precision of this assertion. Do we
// for instance allow warnings only to have been reported in previous
// compilations.
assert(
// Either we have already reported an error
loader.hasSeenError ||
// or we have reported an error in a previous compilation.
loader.builders.values.any((builder) =>
builder.library.problemsAsJson?.isNotEmpty ?? false),
"No error reported before seeing: "
"${node.message}");
// Assumed to be already reported.
}
}