1
0
mirror of https://github.com/dart-lang/sdk synced 2024-07-01 07:14:29 +00:00

[CFE] Auto-add coverage-ignore comments

This pushes coverage to 100%.

Change-Id: I0d5656698fffa4da4cb097b207e786ae997c21a9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/373662
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Jens Johansen 2024-06-28 13:01:39 +00:00 committed by Commit Queue
parent c2fb6fc707
commit db50ebf837
165 changed files with 4025 additions and 811 deletions

View File

@ -299,6 +299,7 @@ class CompilerOptions {
/// launched again.
Set<Uri> runningPrecompilations = {};
// Coverage-ignore(suite): Not run.
/// Returns the minimum language version needed for a library with the given
/// [importUri] to opt into the experiment with the given [flag].
///
@ -328,6 +329,7 @@ class CompilerOptions {
experimentReleasedVersionForTesting);
}
// Coverage-ignore(suite): Not run.
bool equivalent(CompilerOptions other,
{bool ignoreOnDiagnostic = true,
bool ignoreVerbose = true,
@ -406,6 +408,7 @@ Map<String, bool> parseExperimentalArguments(Iterable<String>? arguments) {
for (String argument in arguments) {
for (String feature in argument.split(',')) {
if (feature.startsWith('no-')) {
// Coverage-ignore-block(suite): Not run.
result[feature.substring(3)] = false;
} else {
result[feature] = true;
@ -437,14 +440,17 @@ Map<ExperimentalFlag, bool> parseExperimentalFlags(
bool value = experiments[experiment]!;
ExperimentalFlag? flag = parseExperimentalFlag(experiment);
if (flag == null) {
// Coverage-ignore-block(suite): Not run.
onError("Unknown experiment: " + experiment);
} else if (flags.containsKey(flag)) {
// Coverage-ignore-block(suite): Not run.
if (flags[flag] != value) {
onError(
"Experiment specified with conflicting values: " + experiment);
}
} else {
if (flag.isExpired) {
// Coverage-ignore-block(suite): Not run.
if (value != flag.isEnabledByDefault) {
/// Produce an error when the value is not the default value.
if (value) {
@ -505,6 +511,7 @@ class InvocationMode {
Set<InvocationMode> result = {};
for (String name in arg.split(',')) {
if (name.isNotEmpty) {
// Coverage-ignore-block(suite): Not run.
InvocationMode? mode = fromName(name);
if (mode == null) {
String message = "Unknown invocation mode '$name'.";
@ -521,6 +528,7 @@ class InvocationMode {
return result;
}
// Coverage-ignore(suite): Not run.
/// Returns the [InvocationMode] with the given [name].
static InvocationMode? fromName(String name) {
for (InvocationMode invocationMode in values) {
@ -553,10 +561,12 @@ class Verbosity {
static const List<Verbosity> values = const [error, warning, info, all];
// Coverage-ignore(suite): Not run.
/// Returns the names of all options.
static List<String> get allowedValues =>
[for (Verbosity value in values) value.name];
// Coverage-ignore(suite): Not run.
/// Returns a map from option name to option help messages.
static Map<String, String> get allowedValuesHelp =>
{for (Verbosity value in values) value.name: value.help};
@ -576,6 +586,7 @@ class Verbosity {
return verbosity;
}
}
// Coverage-ignore-block(suite): Not run.
String message = "Unknown verbosity '$name'.";
if (onError != null) {
onError(message);
@ -584,6 +595,7 @@ class Verbosity {
throw new UnsupportedError(message);
}
// Coverage-ignore(suite): Not run.
static bool shouldPrint(Verbosity verbosity, DiagnosticMessage message) {
Severity severity = message.severity;
switch (verbosity) {
@ -638,6 +650,7 @@ class Verbosity {
String toString() => 'Verbosity($name)';
}
// Coverage-ignore(suite): Not run.
/// Interface for hooking into the compilation pipeline for testing.
class HooksForTesting {
/// Called before the intermediate macro augmentation libraries have been

View File

@ -58,6 +58,7 @@ bool isExperimentEnabled(ExperimentalFlag flag,
enabled = explicitExperimentalFlags[flag];
}
if (defaultExperimentFlagsForTesting != null) {
// Coverage-ignore-block(suite): Not run.
enabled ??= defaultExperimentFlagsForTesting[flag];
}
enabled ??= flag.isEnabledByDefault;
@ -86,6 +87,7 @@ bool isExperimentEnabledInLibrary(ExperimentalFlag flag, Uri canonicalUri,
enabled = explicitExperimentalFlags[flag];
}
if (defaultExperimentFlagsForTesting != null) {
// Coverage-ignore-block(suite): Not run.
enabled ??= defaultExperimentFlagsForTesting[flag];
}
enabled ??= flag.isEnabledByDefault;
@ -137,6 +139,7 @@ Version getExperimentEnabledVersionInLibrary(ExperimentalFlag flag,
Version? version;
bool? enabledByDefault;
if (defaultExperimentFlagsForTesting != null) {
// Coverage-ignore-block(suite): Not run.
enabledByDefault = defaultExperimentFlagsForTesting[flag];
}
enabledByDefault ??= flag.isEnabledByDefault;
@ -149,6 +152,7 @@ Version getExperimentEnabledVersionInLibrary(ExperimentalFlag flag,
// If the feature is not enabled by default or is enabled by the allowed
// list use the experiment release version.
if (experimentReleasedVersionForTesting != null) {
// Coverage-ignore-block(suite): Not run.
version = experimentReleasedVersionForTesting[flag];
}
version ??= flag.experimentReleasedVersion;
@ -156,6 +160,7 @@ Version getExperimentEnabledVersionInLibrary(ExperimentalFlag flag,
// If the feature is enabled by default and is not enabled by the allowed
// list use the enabled version.
if (experimentEnabledVersionForTesting != null) {
// Coverage-ignore-block(suite): Not run.
version = experimentEnabledVersionForTesting[flag];
}
version ??= flag.experimentEnabledVersion;
@ -172,6 +177,7 @@ bool isExperimentEnabledInLibraryByVersion(
Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting}) {
bool? enabledByDefault;
if (defaultExperimentFlagsForTesting != null) {
// Coverage-ignore-block(suite): Not run.
enabledByDefault = defaultExperimentFlagsForTesting[flag];
}
enabledByDefault ??= flag.isEnabledByDefault;
@ -205,6 +211,7 @@ bool isExperimentEnabledInLibraryByVersion(
// If the feature is not enabled by default or is enabled by the allowed
// list, use the experiment release version.
if (experimentReleasedVersionForTesting != null) {
// Coverage-ignore-block(suite): Not run.
enabledVersion = experimentReleasedVersionForTesting[flag]!;
}
enabledVersion ??= flag.experimentReleasedVersion;
@ -212,6 +219,7 @@ bool isExperimentEnabledInLibraryByVersion(
// If the feature is enabled by default and is not enabled by the allowed
// list use the enabled version.
if (experimentEnabledVersionForTesting != null) {
// Coverage-ignore-block(suite): Not run.
enabledVersion = experimentEnabledVersionForTesting[flag];
}
enabledVersion ??= flag.experimentEnabledVersion;

View File

@ -17,6 +17,7 @@ import 'compiler_options.dart' show CompilerOptions;
export '../base/incremental_serializer.dart' show IncrementalSerializer;
// Coverage-ignore(suite): Not run.
abstract class IncrementalKernelGenerator {
factory IncrementalKernelGenerator(
CompilerOptions options, List<Uri> entryPoints,
@ -138,6 +139,7 @@ abstract class IncrementalKernelGenerator {
void setExperimentalFeaturesForTesting(Set<String> features);
}
// Coverage-ignore(suite): Not run.
bool isLegalIdentifier(String identifier) {
return StringScanner.isLegalIdentifier(identifier);
}

View File

@ -18,6 +18,7 @@ import '../kernel_generator_impl.dart'
show generateKernel, generateKernelInternal;
import 'compiler_options.dart' show CompilerOptions;
// Coverage-ignore(suite): Not run.
/// Generates a kernel representation of the program whose main library is in
/// the given [source].
///
@ -44,6 +45,7 @@ Future<CompilerResult?> kernelForProgram(Uri source, CompilerOptions options,
additionalSources: additionalSources));
}
// Coverage-ignore(suite): Not run.
Future<CompilerResult?> kernelForProgramInternal(
Uri source,
CompilerOptions options, {
@ -74,6 +76,7 @@ Future<CompilerResult?> kernelForProgramInternal(
});
}
// Coverage-ignore(suite): Not run.
/// Generates a kernel representation for a module containing [sources].
///
/// A module is a collection of libraries that are compiled together. Libraries

View File

@ -19,6 +19,7 @@ import 'file_system.dart' show FileSystem, FileSystemException;
export 'package:kernel/ast.dart' show Version;
// Coverage-ignore(suite): Not run.
/// Gets the language version for a specific URI.
///
/// Note that this returning some language version, doesn't mean there aren't
@ -128,6 +129,7 @@ Future<VersionAndPackageUri> languageVersionForUri(
});
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if the language version of [uri] does not support null
/// safety.
Future<bool> uriUsesLegacyLanguageVersion(
@ -142,6 +144,7 @@ Future<bool> uriUsesLegacyLanguageVersion(
versionAndLibraryUri.version);
}
// Coverage-ignore(suite): Not run.
class VersionAndPackageUri {
final Version version;
final Uri packageUri;

View File

@ -13,6 +13,7 @@ export '../kernel/constructor_tearoff_lowering.dart'
isTearOffLowering,
isTypedefTearOffLowering;
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is the field holding the value of a lowered late
/// field.
///
@ -37,6 +38,7 @@ bool isLateLoweredField(Field node) {
!node.name.text.endsWith(lateIsSetSuffix);
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original field for a lowered late field where
/// [node] is the field holding the value of a lowered late field.
///
@ -65,6 +67,7 @@ Name extractFieldNameFromLateLoweredField(Field node) {
return new Name(node.name.text.substring(prefix.length), node.name.library);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is the field holding the marker for whether a
/// lowered late field has been set or not.
///
@ -91,6 +94,7 @@ bool isLateLoweredIsSetField(Field node) {
node.name.text.endsWith(lateIsSetSuffix);
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original field for a lowered late field where [node]
/// is the field holding the marker for whether the lowered late field has been
/// set or not.
@ -125,6 +129,7 @@ Name extractFieldNameFromLateLoweredIsSetField(Field node) {
node.name.library);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is the getter for reading the value of a lowered
/// late field.
///
@ -160,6 +165,7 @@ bool isLateLoweredFieldGetter(Procedure node) {
return false;
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original field for a lowered late field where [node]
/// is the getter for reading the value of a lowered late field.
///
@ -184,6 +190,7 @@ Name extractFieldNameFromLateLoweredFieldGetter(Procedure node) {
return node.name;
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is the setter for setting the value of a lowered
/// late field.
///
@ -219,6 +226,7 @@ bool isLateLoweredFieldSetter(Procedure node) {
return false;
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original field for a lowered late field where [node]
/// is the setter for setting the value of a lowered late field.
///
@ -243,6 +251,7 @@ Name extractFieldNameFromLateLoweredFieldSetter(Procedure node) {
return node.name;
}
// Coverage-ignore(suite): Not run.
/// Returns the original initializer of a lowered late field where [node] is
/// either the field holding the value, the field holding the marker for whether
/// it has been set or not, getter for reading the value, or the setter for
@ -394,6 +403,7 @@ Expression? getLateFieldInitializer(Member node) {
return null;
}
// Coverage-ignore(suite): Not run.
/// Returns getter for reading the value of a lowered late field where [node] is
/// either the field holding the value, the field holding the marker for whether
/// it has been set or not, getter for reading the value, or the setter for
@ -428,6 +438,7 @@ Procedure? _getLateFieldTarget(Member node) {
return null;
}
// Coverage-ignore(suite): Not run.
/// Returns the field holding the value for a lowered late field where [node] is
/// either the field holding the value, the field holding the marker for whether
/// it has been set or not, getter for reading the value, or the setter for
@ -481,6 +492,7 @@ Field? getLateFieldTarget(Member node) {
return null;
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is the local variable holding the value of a
/// lowered late variable.
///
@ -503,6 +515,7 @@ bool isLateLoweredLocal(VariableDeclaration node) {
return node.isLowered && isLateLoweredLocalName(node.name!);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [name] is the name of a local variable holding the value
/// of a lowered late variable.
bool isLateLoweredLocalName(String name) {
@ -514,6 +527,7 @@ bool isLateLoweredLocalName(String name) {
!name.contains(joinedIntermediateInfix);
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original late local variable from the [name] of the
/// local variable holding the value of the lowered late variable.
///
@ -522,6 +536,7 @@ String extractLocalNameFromLateLoweredLocal(String name) {
return name.substring(lateLocalPrefix.length);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is the local variable holding the marker for
/// whether a lowered late local variable has been set or not.
///
@ -546,12 +561,14 @@ bool isLateLoweredIsSetLocal(VariableDeclaration node) {
return node.isLowered && isLateLoweredIsSetLocalName(node.name!);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [name] is the name of a local variable holding the marker
/// for whether a lowered late local variable has been set or not.
bool isLateLoweredIsSetLocalName(String name) {
return name.startsWith(lateLocalPrefix) && name.endsWith(lateIsSetSuffix);
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original late local variable from the [name] of the
/// local variable holding the marker for whether the lowered late local
/// variable has been set or not.
@ -562,6 +579,7 @@ String extractLocalNameFromLateLoweredIsSet(String name) {
lateLocalPrefix.length, name.length - lateIsSetSuffix.length);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is the local variable for the local function for
/// reading the value of a lowered late variable.
///
@ -582,6 +600,7 @@ bool isLateLoweredLocalGetter(VariableDeclaration node) {
return node.isLowered && isLateLoweredLocalGetterName(node.name!);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [name] is the name of the local variable for the local
/// function for reading the value of a lowered late variable.
bool isLateLoweredLocalGetterName(String name) {
@ -589,6 +608,7 @@ bool isLateLoweredLocalGetterName(String name) {
name.endsWith(lateLocalGetterSuffix);
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original late local variable from the [name] of the
/// local variable for the local function for reading the value of the lowered
/// late variable.
@ -599,6 +619,7 @@ String extractLocalNameFromLateLoweredGetter(String name) {
lateLocalPrefix.length, name.length - lateLocalGetterSuffix.length);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is the local variable for the local function for
/// setting the value of a lowered late variable.
///
@ -620,6 +641,7 @@ bool isLateLoweredLocalSetter(VariableDeclaration node) {
return node.isLowered && isLateLoweredLocalSetterName(node.name!);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [name] is the name of the local variable for the local
/// function for setting the value of a lowered late variable.
bool isLateLoweredLocalSetterName(String name) {
@ -627,6 +649,7 @@ bool isLateLoweredLocalSetterName(String name) {
name.endsWith(lateLocalSetterSuffix);
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original late local variable from the [name] of the
/// local variable for the local function for setting the value of the lowered
/// late variable.
@ -652,7 +675,9 @@ String extractLocalNameFromLateLoweredSetter(String name) {
///
/// where '#this' is the synthetic "extension this" parameter.
bool isExtensionThis(VariableDeclaration node) {
assert(node.isLowered || node.name == null || !isExtensionThisName(node.name),
assert(
node.isLowered || node.name == null || !isExtensionThisName(node.name),
// Coverage-ignore(suite): Not run.
"$node has name ${node.name} and node.isLowered = ${node.isLowered}");
return node.isLowered && isExtensionThisName(node.name);
}
@ -667,12 +692,14 @@ bool isExtensionThisName(String? name) {
return name == syntheticThisName;
}
// Coverage-ignore(suite): Not run.
/// Return `true` if [node] is the synthetic parameter holding the `this` value
/// in the encoding of extension type instance members and constructors.
bool isExtensionTypeThis(VariableDeclaration node) {
return node.isLowered && isExtensionTypeThisName(node.name);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [name] is the name of the synthetic parameter holding the
/// `this` value in the encoding of extension type instance members and
/// constructors.
@ -680,6 +707,7 @@ bool isExtensionTypeThisName(String? name) {
return name == syntheticThisName;
}
// Coverage-ignore(suite): Not run.
/// Returns the name of the original variable from the [name] of the synthetic
/// parameter holding the `this` value in the encoding of extension instance
/// members.
@ -689,6 +717,7 @@ String extractLocalNameForExtensionThis(String name) {
return 'this';
}
// Coverage-ignore(suite): Not run.
/// Returns the original name of the variable [node].
///
/// If [node] is a lowered variable then the name before lowering is returned.
@ -707,6 +736,7 @@ String? extractLocalNameFromVariable(VariableDeclaration node) {
return node.name;
}
// Coverage-ignore(suite): Not run.
/// Returns the original name of a variable by the given [name].
///
/// If [name] is the name of a lowered variable then the name before lowering is
@ -717,6 +747,7 @@ String extractLocalName(String name) {
return _extractLocalName(name) ?? name;
}
// Coverage-ignore(suite): Not run.
/// Returns the original name of a lowered variable by the given [name].
///
/// If [name] doesn't correspond to a lowered name `null` is returned.
@ -742,6 +773,7 @@ String? _extractLocalName(String name) {
/// See [isJoinedIntermediateName] for details.
const String joinedIntermediateInfix = "#case#";
// Coverage-ignore(suite): Not run.
/// Returns `true` if [node] is a joined intermediate variable.
///
/// See [isJoinedIntermediateName] for details.
@ -751,6 +783,7 @@ bool isJoinedIntermediateVariable(VariableDeclaration node) {
isJoinedIntermediateName(node.name!);
}
// Coverage-ignore(suite): Not run.
/// Returns `true` if [name] is the name of the "joined intermediate" variable
/// for a "joined local variable".
///
@ -794,6 +827,7 @@ bool isJoinedIntermediateName(String name) {
null;
}
// Coverage-ignore(suite): Not run.
/// Returns the original name for a joined intermediate variable from the [name]
/// of the lowered variable.
///
@ -812,6 +846,7 @@ String createJoinedIntermediateName(String variableName, int index) {
return '$variableName$joinedIntermediateInfix$index';
}
// Coverage-ignore(suite): Not run.
/// This turns Foo|bar into Foo.bar.
///
/// This only works for normal methods and operators, but for getters and

View File

@ -44,6 +44,7 @@ class MemoryFileSystem implements FileSystem {
static Uri _addTrailingSlash(Uri uri) {
if (!uri.path.endsWith('/')) {
// Coverage-ignore-block(suite): Not run.
uri = uri.replace(path: uri.path + '/');
}
return uri;
@ -69,6 +70,7 @@ class MemoryFileSystemEntity implements FileSystemEntity {
other.uri == uri &&
identical(other._fileSystem, _fileSystem);
// Coverage-ignore(suite): Not run.
/// Create a directory for this file system entry.
///
/// If the entry is an existing file, this is an error.
@ -86,9 +88,11 @@ class MemoryFileSystemEntity implements FileSystemEntity {
}
@override
// Coverage-ignore(suite): Not run.
Future<bool> existsAsyncIfPossible() => exists();
@override
// Coverage-ignore(suite): Not run.
Future<List<int>> readAsBytes() {
Uint8List? contents = _fileSystem._files[uri];
if (contents == null) {
@ -100,9 +104,11 @@ class MemoryFileSystemEntity implements FileSystemEntity {
}
@override
// Coverage-ignore(suite): Not run.
Future<List<int>> readAsBytesAsyncIfPossible() => readAsBytes();
@override
// Coverage-ignore(suite): Not run.
Future<String> readAsString() async {
List<int> bytes = await readAsBytes();
try {
@ -112,6 +118,7 @@ class MemoryFileSystemEntity implements FileSystemEntity {
}
}
// Coverage-ignore(suite): Not run.
/// Writes the given raw bytes to this file system entity.
///
/// If no file exists, one is created. If a file exists already, it is
@ -124,6 +131,7 @@ class MemoryFileSystemEntity implements FileSystemEntity {
}
}
// Coverage-ignore(suite): Not run.
/// Writes the given string to this file system entity.
///
/// The string is encoded as UTF-8.
@ -134,6 +142,7 @@ class MemoryFileSystemEntity implements FileSystemEntity {
_update(uri, utf8.encode(s));
}
// Coverage-ignore(suite): Not run.
void _update(Uri uri, Uint8List data) {
if (_fileSystem._directories.contains(uri)) {
throw new FileSystemException(uri, 'Entry $uri is a directory.');

View File

@ -24,7 +24,9 @@ class StandardFileSystem implements FileSystem {
FileSystemEntity entityForUri(Uri uri) {
if (uri.isScheme('file')) {
return new _IoFileSystemEntity(uri);
} else if (!uri.hasScheme) {
}
// Coverage-ignore(suite): Not run.
else if (!uri.hasScheme) {
// TODO(askesc): Empty schemes should have been handled elsewhere.
return new _IoFileSystemEntity(Uri.base.resolveUri(uri));
} else if (uri.isScheme('data')) {
@ -56,6 +58,7 @@ class _IoFileSystemEntity implements FileSystemEntity {
return new Future.value(true);
}
if (io.FileSystemEntity.isDirectorySync(uri.toFilePath())) {
// Coverage-ignore-block(suite): Not run.
return new Future.value(true);
}
// TODO(CFE-team): What about [Link]s?
@ -63,6 +66,7 @@ class _IoFileSystemEntity implements FileSystemEntity {
}
@override
// Coverage-ignore(suite): Not run.
Future<bool> existsAsyncIfPossible() async {
if (await new io.File.fromUri(uri).exists()) {
return true;
@ -86,6 +90,7 @@ class _IoFileSystemEntity implements FileSystemEntity {
}
@override
// Coverage-ignore(suite): Not run.
Future<List<int>> readAsBytesAsyncIfPossible() async {
try {
CompilerContext.recordDependency(uri);
@ -100,7 +105,9 @@ class _IoFileSystemEntity implements FileSystemEntity {
try {
CompilerContext.recordDependency(uri);
return await new io.File.fromUri(uri).readAsString();
} on io.FileSystemException catch (exception) {
}
// Coverage-ignore(suite): Not run.
on io.FileSystemException catch (exception) {
throw _toFileSystemException(exception);
}
}
@ -118,6 +125,7 @@ class _IoFileSystemEntity implements FileSystemEntity {
}
}
// Coverage-ignore(suite): Not run.
/// Concrete implementation of [FileSystemEntity] for data: URIs.
class DataFileSystemEntity implements FileSystemEntity {
@override

View File

@ -9,6 +9,7 @@ import '../base/processed_options.dart';
import '../kernel_generator_impl.dart';
import 'compiler_options.dart';
// Coverage-ignore(suite): Not run.
/// Creates a summary representation of the build unit whose source files are in
/// [sources].
///

View File

@ -10,6 +10,7 @@ import 'package:_fe_analyzer_shared/src/util/colors.dart' show enableColors;
export 'package:_fe_analyzer_shared/src/util/colors.dart' show enableColors;
// Coverage-ignore(suite): Not run.
void printDiagnosticMessage(
DiagnosticMessage message, void Function(String) println) {
if (enableColors) {

View File

@ -8,6 +8,7 @@ import '../api_prototype/compiler_options.dart' show CompilerOptions;
import '../base/incremental_compiler.dart' show IncrementalCompiler;
import '../base/processed_options.dart' show ProcessedOptions;
// Coverage-ignore(suite): Not run.
class InitializedCompilerState {
final CompilerOptions options;
final ProcessedOptions processedOpts;
@ -28,6 +29,7 @@ class InitializedCompilerState {
this.libraryToInputDill});
}
// Coverage-ignore(suite): Not run.
/// A cached [Component] for a summary input file.
///
/// Tracks the originally marked "external" libs so that they can be restored,
@ -38,6 +40,7 @@ class WorkerInputComponent {
WorkerInputComponent(this.digest, this.component);
}
// Coverage-ignore(suite): Not run.
bool digestsEqual(List<int>? a, List<int>? b) {
if (a == null || b == null) return false;
if (a.length != b.length) return false;

View File

@ -91,6 +91,7 @@ export '../compute_platform_binaries_location.dart'
show computePlatformBinariesLocation;
export 'compiler_state.dart' show InitializedCompilerState;
// Coverage-ignore(suite): Not run.
InitializedCompilerState initializeCompiler(
InitializedCompilerState? oldState,
Target target,
@ -140,6 +141,7 @@ InitializedCompilerState initializeCompiler(
return new InitializedCompilerState(options, processedOpts);
}
// Coverage-ignore(suite): Not run.
Future<Component?> compile(
InitializedCompilerState state,
bool verbose,

View File

@ -12,6 +12,7 @@ bool equalLists<T>(List<T>? a, List<T>? b) {
return true;
}
// Coverage-ignore(suite): Not run.
bool equalSets<K>(Set<K>? a, Set<K>? b) {
if (identical(a, b)) return true;
if (a == null || b == null) return false;
@ -22,6 +23,7 @@ bool equalSets<K>(Set<K>? a, Set<K>? b) {
return true;
}
// Coverage-ignore(suite): Not run.
bool equalMaps<K, V>(Map<K, V>? a, Map<K, V>? b) {
if (identical(a, b)) return true;
if (a == null || b == null) return false;

View File

@ -20,6 +20,7 @@ class BuilderGraph implements Graph<Uri> {
List<Uri> neighbors = [];
LibraryBuilder? libraryBuilder = libraryBuilders[vertex];
if (libraryBuilder == null) {
// Coverage-ignore-block(suite): Not run.
throw "Library not found: $vertex";
}
for (Uri importUri in libraryBuilder.dependencies) {

View File

@ -44,7 +44,9 @@ PlainAndColorizedString format(LocatedMessage message, Severity severity,
}
String? prefix = severityPrefixes[severity];
String messageTextTmp = prefix == null
? message.problemMessage
?
// Coverage-ignore(suite): Not run.
message.problemMessage
: "$prefix: ${message.problemMessage}";
if (message.correctionMessage != null) {
messageTextTmp += "\n${message.correctionMessage}";
@ -58,6 +60,7 @@ PlainAndColorizedString format(LocatedMessage message, Severity severity,
break;
case Severity.warning:
// Coverage-ignore(suite): Not run.
messageTextColorized = magenta(messageTextPlain);
break;
@ -65,10 +68,12 @@ PlainAndColorizedString format(LocatedMessage message, Severity severity,
messageTextColorized = green(messageTextPlain);
break;
// Coverage-ignore(suite): Not run.
case Severity.info:
messageTextColorized = yellow(messageTextPlain);
break;
// Coverage-ignore(suite): Not run.
case Severity.ignored:
return unhandled("$severity", "format", -1, null);
}
@ -95,6 +100,7 @@ PlainAndColorizedString format(LocatedMessage message, Severity severity,
);
}
} catch (error, trace) {
// Coverage-ignore-block(suite): Not run.
print("Crash when formatting: "
"[${message.code.name}] ${safeToString(message.problemMessage)}\n"
"${safeToString(error)}\n"
@ -119,6 +125,7 @@ String formatErrorMessage(String? sourceLine, Location? location,
int lengthInSourceLine = min(indentation.length, sourceLine.length);
for (int i = 0; i < lengthInSourceLine; i++) {
if (sourceLine.codeUnitAt(i) == $TAB) {
// Coverage-ignore-block(suite): Not run.
indentation[i] = $TAB;
}
}
@ -145,13 +152,18 @@ String formatErrorMessage(String? sourceLine, Location? location,
bool isHidden(Severity severity) {
switch (severity) {
case Severity.error:
// Coverage-ignore(suite): Not run.
case Severity.internalProblem:
// Coverage-ignore(suite): Not run.
case Severity.context:
// Coverage-ignore(suite): Not run.
case Severity.info:
return false;
// Coverage-ignore(suite): Not run.
case Severity.warning:
return hideWarnings;
// Coverage-ignore(suite): Not run.
case Severity.ignored:
return true;
}
@ -164,12 +176,15 @@ bool shouldThrowOn(Severity severity) {
case Severity.error:
return CompilerContext.current.options.throwOnErrorsForDebugging;
// Coverage-ignore(suite): Not run.
case Severity.internalProblem:
return true;
// Coverage-ignore(suite): Not run.
case Severity.warning:
return CompilerContext.current.options.throwOnWarningsForDebugging;
// Coverage-ignore(suite): Not run.
case Severity.info:
case Severity.ignored:
case Severity.context:

View File

@ -72,7 +72,9 @@ class CompilerContext {
}
static void recordDependency(Uri uri) {
if (!uri.isScheme("file") && !uri.isScheme("http")) {
if (!uri.isScheme("file") &&
// Coverage-ignore(suite): Not run.
!uri.isScheme("http")) {
throw new ArgumentError("Expected a file or http URI, but got: '$uri'.");
}
CompilerContext? context = Zone.current[compilerContextKey];
@ -84,6 +86,7 @@ class CompilerContext {
static CompilerContext get current {
CompilerContext? context = Zone.current[compilerContextKey];
if (context == null) {
// Coverage-ignore-block(suite): Not run.
// Note: we throw directly and don't use internalProblem, because
// internalProblem depends on having a compiler context available.
String problemMessage =

View File

@ -61,6 +61,7 @@ void resetCrashReporting() {
Future<T> reportCrash<T>(error, StackTrace trace,
[Uri? uri, int? charOffset]) async {
// Coverage-ignore(suite): Not run.
Future<void> note(String note) async {
stderr.write(note);
await stderr.flush();
@ -68,6 +69,7 @@ Future<T> reportCrash<T>(error, StackTrace trace,
if (hasCrashed) return new Future<T>.error(error, trace);
if (error is Crash) {
// Coverage-ignore-block(suite): Not run.
trace = error.trace ?? trace;
uri = error.uri ?? uri;
charOffset = error.charOffset ?? charOffset;
@ -97,6 +99,7 @@ Future<T> reportCrash<T>(error, StackTrace trace,
new Crash(uri, charOffset, error, trace).._hasBeenReported = true,
trace);
}
// Coverage-ignore-block(suite): Not run.
await note("\nSending crash report data");
request.persistentConnection = false;
request.bufferOutput = false;
@ -109,9 +112,11 @@ Future<T> reportCrash<T>(error, StackTrace trace,
await request.close();
await note(".");
} catch (e, s) {
// Coverage-ignore-block(suite): Not run.
await note("\n${safeToString(e)}\n$s\n");
await note("\n\n\nFE::ERROR::$json\n\n\n");
}
// Coverage-ignore-block(suite): Not run.
client.close(force: true);
await note("\n");
return new Future<T>.error(error, trace);
@ -121,6 +126,7 @@ String safeToString(Object object) {
try {
return "$object";
} catch (e) {
// Coverage-ignore-block(suite): Not run.
return "Error when converting ${object.runtimeType} to string.";
}
}

View File

@ -36,7 +36,9 @@ class Export {
if (combinators != null) {
for (CombinatorBuilder combinator in combinators!) {
if (combinator.isShow && !combinator.names.contains(name)) return false;
if (combinator.isHide && combinator.names.contains(name)) return false;
if (combinator.isHide &&
// Coverage-ignore(suite): Not run.
combinator.names.contains(name)) return false;
}
}
return exporter.addToExportScope(name, member, charOffset);

View File

@ -17,7 +17,8 @@ class HybridFileSystem implements FileSystem {
final FileSystem physical;
HybridFileSystem(this.memory, [FileSystem? _physical])
: physical = _physical ?? StandardFileSystem.instance;
: physical = _physical ?? // Coverage-ignore(suite): Not run.
StandardFileSystem.instance;
@override
FileSystemEntity entityForUri(Uri uri) =>
@ -36,12 +37,17 @@ class HybridFileSystemEntity implements FileSystemEntity {
Future<FileSystemEntity> get delegate async {
if (_delegate != null) {
// Coverage-ignore-block(suite): Not run.
return _delegate!;
}
FileSystemEntity entity = _fs.memory.entityForUri(uri);
if (((!uri.isScheme('file') && !uri.isScheme('data')) &&
if (((!uri.isScheme('file') &&
// Coverage-ignore(suite): Not run.
!uri.isScheme('data')) &&
// Coverage-ignore(suite): Not run.
_fs.physical is StandardFileSystem) ||
await entity.exists()) {
// Coverage-ignore-block(suite): Not run.
_delegate = entity;
return _delegate!;
}
@ -49,9 +55,11 @@ class HybridFileSystemEntity implements FileSystemEntity {
}
@override
// Coverage-ignore(suite): Not run.
Future<bool> exists() async => (await delegate).exists();
@override
// Coverage-ignore(suite): Not run.
Future<bool> existsAsyncIfPossible() async =>
(await delegate).existsAsyncIfPossible();
@ -59,9 +67,11 @@ class HybridFileSystemEntity implements FileSystemEntity {
Future<List<int>> readAsBytes() async => (await delegate).readAsBytes();
@override
// Coverage-ignore(suite): Not run.
Future<List<int>> readAsBytesAsyncIfPossible() async =>
(await delegate).readAsBytesAsyncIfPossible();
@override
// Coverage-ignore(suite): Not run.
Future<String> readAsString() async => (await delegate).readAsString();
}

View File

@ -87,9 +87,11 @@ class OperatorIdentifier implements Identifier {
@override
String get name => operator.text;
// Coverage-ignore(suite): Not run.
int get charOffset => token.charOffset;
@override
// Coverage-ignore(suite): Not run.
int get firstOffset => token.charOffset;
@override
@ -99,14 +101,17 @@ class OperatorIdentifier implements Identifier {
int get nameOffset => token.charOffset;
@override
// Coverage-ignore(suite): Not run.
Expression? get initializer => null;
@override
// Coverage-ignore(suite): Not run.
QualifiedName withQualifier(Object qualifier) {
return unsupported("withQualifier", charOffset, null);
}
@override
// Coverage-ignore(suite): Not run.
TypeName get typeName {
return unsupported("typeName", charOffset, null);
}
@ -123,11 +128,13 @@ class InitializedIdentifier extends SimpleIdentifier {
: super(identifier.token);
@override
// Coverage-ignore(suite): Not run.
QualifiedName withQualifier(Object qualifier) {
return unsupported("withQualifier", charOffset, null);
}
@override
// Coverage-ignore(suite): Not run.
TypeName get typeName {
return unsupported("typeName", charOffset, null);
}
@ -154,6 +161,7 @@ class QualifiedName extends SimpleIdentifier {
int get nameOffset => token.charOffset;
@override
// Coverage-ignore(suite): Not run.
QualifiedName withQualifier(Object qualifier) {
return unsupported("withQualifier", charOffset, null);
}
@ -173,7 +181,9 @@ void flattenQualifiedNameOn(
flattenQualifiedNameOn(qualifier, buffer, charOffset, fileUri);
} else if (qualifier is Identifier) {
buffer.write(qualifier.name);
} else if (qualifier is String) {
}
// Coverage-ignore(suite): Not run.
else if (qualifier is String) {
buffer.write(qualifier);
} else {
unhandled("${qualifier.runtimeType}", "flattenQualifiedNameOn", charOffset,

View File

@ -63,6 +63,7 @@ Set<String> computeImportChainsFor(
if (!importChains.contains(importChain)) {
if (importChains.length > compactChainLimit) {
// Coverage-ignore-block(suite): Not run.
importChains.add('...');
return false;
} else {
@ -72,6 +73,7 @@ Set<String> computeImportChainsFor(
chainCount++;
if (chainCount > chainLimit) {
// Coverage-ignore-block(suite): Not run.
// Assume there are more import chains.
importChains.add('...');
return false;
@ -207,6 +209,7 @@ abstract class CodeLocation {
String packageName = uri.path.substring(0, slashPos);
return new PackageLocation(packageName);
} else {
// Coverage-ignore-block(suite): Not run.
// This is an invalid import uri, like "package:foo.dart".
return new UriLocation(uri);
}

View File

@ -119,8 +119,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
DillTarget? _dillLoadedData;
List<DillLibraryBuilder>? _platformBuilders;
// Coverage-ignore(suite): Not run.
List<DillLibraryBuilder>? get platformBuildersForTesting => _platformBuilders;
Map<Uri, DillLibraryBuilder>? _userBuilders;
// Coverage-ignore(suite): Not run.
Map<Uri, DillLibraryBuilder>? get userBuildersForTesting => _userBuilders;
final _InitializationStrategy _initializationStrategy;
@ -170,6 +172,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
_enableExperimentsBasedOnEnvironment();
}
// Coverage-ignore(suite): Not run.
IncrementalCompiler(this.context,
[Uri? _initializeFromDillUri,
bool? outlineOnly,
@ -184,6 +187,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
_enableExperimentsBasedOnEnvironment();
}
// Coverage-ignore(suite): Not run.
IncrementalCompiler.forExpressionCompilationOnly(
this.context, Component? _componentToInitializeFrom,
[bool? resetTicker])
@ -198,23 +202,29 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
_enableExperimentsBasedOnEnvironment();
}
// Coverage-ignore(suite): Not run.
bool get initializedFromDillForTesting =>
_initializationStrategy.initializedFromDillForTesting;
// Coverage-ignore(suite): Not run.
bool get initializedIncrementalSerializerForTesting =>
_initializationStrategy.initializedIncrementalSerializerForTesting;
// Coverage-ignore(suite): Not run.
DillTarget? get dillTargetForTesting => _dillLoadedData;
IncrementalKernelTarget? get kernelTargetForTesting => _lastGoodKernelTarget;
// Coverage-ignore(suite): Not run.
bool get skipExperimentalInvalidationChecksForTesting => false;
// Coverage-ignore(suite): Not run.
/// Returns the [Package] used for the package [packageName] in the most
/// recent compilation.
Package? getPackageForPackageName(String packageName) =>
_currentPackagesMap?[packageName];
// Coverage-ignore(suite): Not run.
/// Returns the [Library] with the given [importUri] from the most recent
/// compilation.
Library? lookupLibrary(Uri importUri) => _lastGoodKernelTarget?.loader
@ -225,11 +235,13 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// Note that these are all experimental. Use at your own risk.
enabledExperiments ??= getExperimentEnvironment();
if (enabledExperiments.contains(enableIncrementalCompilerBenchmarking)) {
// Coverage-ignore-block(suite): Not run.
_benchmarker = new Benchmarker();
}
}
@override
// Coverage-ignore(suite): Not run.
void setExperimentalFeaturesForTesting(Set<String> features) {
_enableExperimentsBasedOnEnvironment(enabledExperiments: features);
}
@ -240,6 +252,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
bool fullComponent = false,
bool trackNeededDillLibraries = false}) async {
while (_currentlyCompiling != null) {
// Coverage-ignore-block(suite): Not run.
await _currentlyCompiling!.future;
}
_currentlyCompiling = new Completer();
@ -261,17 +274,25 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
_computeDeltaRunOnce = true;
IncrementalKernelTarget? lastGoodKernelTarget = _lastGoodKernelTarget;
_benchmarker?.reset();
_benchmarker
// Coverage-ignore(suite): Not run.
?.reset();
// Initial setup: Load platform, initialize from dill or component etc.
_benchmarker?.enterPhase(BenchmarkPhases.incremental_setupPackages);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_setupPackages);
UriTranslator uriTranslator = await _setupPackagesAndUriTranslator(c);
_benchmarker?.enterPhase(BenchmarkPhases.incremental_ensurePlatform);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_ensurePlatform);
IncrementalCompilerData data =
await _ensurePlatformAndInitialize(uriTranslator, c);
// Figure out what to keep and what to throw away.
_benchmarker?.enterPhase(BenchmarkPhases.incremental_invalidate);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_invalidate);
Set<Uri?> invalidatedUris = this._invalidatedUris.toSet();
_invalidateNotKeptUserBuilders(invalidatedUris);
ReusageResult? reusedResult = _computeReusedLibraries(
@ -279,6 +300,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// Experimental invalidation initialization (e.g. figure out if we can).
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_experimentalInvalidation);
ExperimentalInvalidation? experimentalInvalidation =
await _initializeExperimentalInvalidation(
@ -287,17 +309,21 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
experimentalInvalidation?.missingSources.length ?? 0);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_rewriteEntryPointsIfPart);
_rewriteEntryPointsIfPart(entryPoints, reusedResult);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_invalidatePrecompiledMacros);
await _invalidatePrecompiledMacros(
c.options, reusedResult.notReusedLibraries);
// Cleanup: After (potentially) removing builders we have stuff to cleanup
// to not leak, and we might need to re-create the dill target.
_benchmarker?.enterPhase(BenchmarkPhases.incremental_cleanup);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_cleanup);
_cleanupRemovedBuilders(
lastGoodKernelTarget, reusedResult, uriTranslator);
_recreateDillTargetIfPackageWasUpdated(uriTranslator, c);
@ -315,9 +341,11 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// For modular compilation we can be asked to load components and track
// which libraries we actually use for the compilation. Set that up now.
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_loadEnsureLoadedComponents);
_loadEnsureLoadedComponents(reusedLibraries);
if (trackNeededDillLibraries) {
// Coverage-ignore-block(suite): Not run.
_resetTrackingOfUsedLibraries(hierarchy);
}
@ -326,7 +354,9 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// builders needs to be patched up.
IncrementalKernelTarget currentKernelTarget;
while (true) {
_benchmarker?.enterPhase(BenchmarkPhases.incremental_setupInLoop);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_setupInLoop);
currentKernelTarget = _setupNewKernelTarget(c, uriTranslator, hierarchy,
reusedLibraries, experimentalInvalidation, entryPoints);
Map<DillLibraryBuilder, List<CompilationUnit>>? rebuildBodiesMap =
@ -337,20 +367,27 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// TODO(johnniwinther,jensj): Ensure that the internal state of the
// incremental compiler is consistent across 1 or more macro
// precompilations.
_benchmarker?.enterPhase(BenchmarkPhases.incremental_precompileMacros);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_precompileMacros);
NeededPrecompilations? neededPrecompilations =
await currentKernelTarget.computeNeededPrecompilations();
_benchmarker?.enterPhase(BenchmarkPhases.incremental_precompileMacros);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_precompileMacros);
if (context.options.globalFeatures.macros.isEnabled) {
Map<Uri, macros.ExecutorFactoryToken>? precompiled =
await precompileMacros(neededPrecompilations, c.options);
if (precompiled != null) {
// Coverage-ignore-block(suite): Not run.
macroExecutorFactoryTokens.addAll(precompiled);
continue;
}
}
_benchmarker?.enterPhase(
BenchmarkPhases.incremental_experimentalInvalidationPatchUpScopes);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases
.incremental_experimentalInvalidationPatchUpScopes);
_experimentalInvalidationPatchUpScopes(
experimentalInvalidation, rebuildBodiesMap);
rebuildBodiesMap = null;
@ -374,15 +411,21 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
verify: c.options.verify);
componentWithDill = buildResult.component;
}
buildResult.macroApplications?.close();
buildResult.macroApplications
// Coverage-ignore(suite): Not run.
?.close();
_benchmarker?.enterPhase(BenchmarkPhases.incremental_hierarchy);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_hierarchy);
hierarchy ??= currentKernelTarget.loader.hierarchy;
if (currentKernelTarget.classHierarchyChanges != null) {
// Coverage-ignore-block(suite): Not run.
hierarchy.applyTreeChanges(
[], [], currentKernelTarget.classHierarchyChanges!);
}
if (currentKernelTarget.classMemberChanges != null) {
// Coverage-ignore-block(suite): Not run.
hierarchy.applyMemberChanges(currentKernelTarget.classMemberChanges!,
findDescendants: true);
}
@ -390,6 +433,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
Set<Library>? neededDillLibraries;
if (trackNeededDillLibraries) {
// Coverage-ignore-block(suite): Not run.
_benchmarker
?.enterPhase(BenchmarkPhases.incremental_performDillUsageTracking);
// Perform actual dill usage tracking.
@ -403,6 +447,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// assumed always to be non-null.
if (componentWithDill != null) {
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_releaseAncillaryResources);
this._invalidatedUris.clear();
_hasToCheckPackageUris = false;
@ -413,18 +458,23 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// Compute which libraries to output and which (previous) errors/warnings
// we have to reissue. In the process do some cleanup too.
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_releaseAncillaryResources);
List<Library> compiledLibraries =
new List<Library>.of(currentKernelTarget.loader.libraries);
Map<Uri, Source> uriToSource = componentWithDill!.uriToSource;
_benchmarker?.enterPhase(BenchmarkPhases
.incremental_experimentalCompilationPostCompilePatchup);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases
.incremental_experimentalCompilationPostCompilePatchup);
_experimentalCompilationPostCompilePatchup(
experimentalInvalidation, compiledLibraries, uriToSource);
_benchmarker?.enterPhase(BenchmarkPhases
.incremental_calculateOutputLibrariesAndIssueLibraryProblems);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases
.incremental_calculateOutputLibrariesAndIssueLibraryProblems);
Set<LibraryBuilder> cleanedUpBuilders = {};
List<Library> outputLibraries =
@ -447,13 +497,16 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// calculation has the potential to work.
// ignore: unnecessary_null_comparison
if (componentWithDill == null) {
// Coverage-ignore-block(suite): Not run.
currentKernelTarget.loader.clearLibraryBuilders();
currentKernelTarget = lastGoodKernelTarget!;
_dillLoadedData!.loader.currentSourceLoader =
currentKernelTarget.loader;
} else {
_benchmarker?.enterPhase(
BenchmarkPhases.incremental_convertSourceLibraryBuildersToDill);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(
BenchmarkPhases.incremental_convertSourceLibraryBuildersToDill);
_previousSourceBuilders = _convertSourceLibraryBuildersToDill(
currentKernelTarget,
experimentalInvalidation,
@ -461,17 +514,23 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
);
}
_benchmarker?.enterPhase(BenchmarkPhases.incremental_end);
_benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.incremental_end);
experimentalInvalidation = null;
// Output result.
// ignore: unnecessary_null_comparison
Procedure? mainMethod = componentWithDill == null
? data.component?.mainMethod
?
// Coverage-ignore(suite): Not run.
data.component?.mainMethod
: componentWithDill.mainMethod;
// ignore: unnecessary_null_comparison
NonNullableByDefaultCompiledMode? compiledMode = componentWithDill == null
? data.component?.mode
?
// Coverage-ignore(suite): Not run.
data.component?.mode
: componentWithDill.mode;
Component result = context.options.target.configureComponent(
new Component(libraries: outputLibraries, uriToSource: uriToSource))
@ -485,9 +544,12 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
_lastGoodKernelTarget = currentKernelTarget;
_benchmarker?.stop();
_benchmarker
// Coverage-ignore(suite): Not run.
?.stop();
if (_benchmarker != null) {
// Coverage-ignore-block(suite): Not run.
// Report.
JsonEncoder encoder = new JsonEncoder.withIndent(" ");
print(encoder.convert(_benchmarker));
@ -596,6 +658,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
convertedLibraries = null;
experimentalInvalidation = null;
if (_userBuilders!.isEmpty) {
// Coverage-ignore-block(suite): Not run.
_userBuilders = null;
}
return newDillLibraryBuilders;
@ -605,6 +668,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
SourceLoader sourceLoader, DillLoader dillLoader) {
for (SourceLibraryBuilder sourceLibraryBuilder
in sourceLoader.sourceLibraryBuilders) {
// Coverage-ignore-block(suite): Not run.
Uri uri = sourceLibraryBuilder.importUri;
DillLibraryBuilder dillLibraryBuilder =
dillLoader.lookupLibraryBuilder(uri)!;
@ -616,6 +680,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
return true;
}
// Coverage-ignore(suite): Not run.
String? _hasEquivalentScopes(SourceLibraryBuilder sourceLibraryBuilder,
DillLibraryBuilder dillLibraryBuilder) {
bool isEquivalent = true;
@ -705,12 +770,14 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
);
allLibraries = outputLibraries.toSet();
if (!c.options.omitPlatform) {
// Coverage-ignore-block(suite): Not run.
for (int i = 0; i < _platformBuilders!.length; i++) {
Library lib = _platformBuilders![i].library;
outputLibraries.add(lib);
}
}
} else {
// Coverage-ignore-block(suite): Not run.
outputLibraries = <Library>[];
allLibraries = _computeTransitiveClosure(
currentKernelTarget,
@ -751,6 +818,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
}
// Coverage-ignore(suite): Not run.
/// Perform dill usage tracking if asked. Use the marking on dill builders as
/// well as the class hierarchy to figure out which dill libraries was
/// actually used by the compilation.
@ -808,6 +876,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
assert(
!map.containsKey(name),
// Coverage-ignore(suite): Not run.
"Unexpected double-entry for $name in "
"${compilationUnit.importUri} (org from ${entry.key.importUri}): "
"$childBuilder and ${map[name]}");
@ -928,6 +997,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
if (c.options.globalFeatures.nonNullable.isEnabled) {
switch (c.options.nnbdMode) {
case NnbdMode.Weak:
// Coverage-ignore(suite): Not run.
// Don't expect strong or invalid.
if (seenModes[NonNullableByDefaultCompiledMode.Strong.index] ||
seenModes[NonNullableByDefaultCompiledMode.Invalid.index]) {
@ -938,11 +1008,13 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
// Don't expect weak or invalid.
if (seenModes[NonNullableByDefaultCompiledMode.Weak.index] ||
seenModes[NonNullableByDefaultCompiledMode.Invalid.index]) {
// Coverage-ignore-block(suite): Not run.
kernelTarget.loader.hasInvalidNnbdModeLibrary = true;
}
break;
}
} else {
// Coverage-ignore-block(suite): Not run.
// Don't expect strong or invalid.
if (seenModes[NonNullableByDefaultCompiledMode.Strong.index] ||
seenModes[NonNullableByDefaultCompiledMode.Invalid.index]) {
@ -959,6 +1031,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
return kernelTarget;
}
// Coverage-ignore(suite): Not run.
/// When tracking used libraries we mark them when we use them. To track
/// correctly we have to unmark before the next iteration to not have too much
/// marked and therefore incorrectly marked something as used when it is not.
@ -1016,6 +1089,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
void _recreateDillTargetIfPackageWasUpdated(
UriTranslator uriTranslator, CompilerContext c) {
if (_hasToCheckPackageUris) {
// Coverage-ignore-block(suite): Not run.
// The package file was changed.
// Make sure the dill loader is on the same page.
DillTarget oldDillLoadedData = _dillLoadedData!;
@ -1045,7 +1119,9 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
for (LibraryBuilder builder in reusedResult.notReusedLibraries) {
_cleanupSourcesForBuilder(lastGoodKernelTarget, reusedResult, builder,
uriTranslator, CompilerContext.current.uriToSource);
_incrementalSerializer?.invalidate(builder.fileUri);
_incrementalSerializer
// Coverage-ignore(suite): Not run.
?.invalidate(builder.fileUri);
LibraryBuilder? dillBuilder =
_dillLoadedData!.loader.deregisterLibraryBuilder(builder.importUri);
@ -1093,11 +1169,13 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
if (!context
.options.globalFeatures.alternativeInvalidationStrategy.isEnabled) {
// Coverage-ignore-block(suite): Not run.
recorderForTesting?.recordAdvancedInvalidationResult(
AdvancedInvalidationResult.disabled);
return null;
}
if (_modulesToLoad != null) {
// Coverage-ignore-block(suite): Not run.
recorderForTesting?.recordAdvancedInvalidationResult(
AdvancedInvalidationResult.modulesToLoad);
return null;
@ -1108,6 +1186,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
return null;
}
if (reusedResult.invalidatedBecauseOfPackageUpdate) {
// Coverage-ignore-block(suite): Not run.
recorderForTesting?.recordAdvancedInvalidationResult(
AdvancedInvalidationResult.packageUpdate);
return null;
@ -1169,6 +1248,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
String? before = textualOutline(previousSource, scannerConfiguration,
performModelling: true, enablePatterns: enablePatterns);
if (before == null) {
// Coverage-ignore-block(suite): Not run.
recorderForTesting?.recordAdvancedInvalidationResult(
AdvancedInvalidationResult.noPreviousOutline);
return null;
@ -1241,7 +1321,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
AdvancedInvalidationResult.importsFfi);
return null;
}
for (Reference exportReference in importLibrary.additionalExports) {
for (Reference exportReference
in importLibrary // Coverage-ignore(suite): Not run.
.additionalExports) {
// Coverage-ignore-block(suite): Not run.
NamedNode? export = exportReference.node;
if (export is Class) {
Class c = export;
@ -1288,6 +1371,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
CompilerContext c) async {
bool bypassCache = false;
if (!identical(_previousPackagesUri, c.options.packagesUriRaw)) {
// Coverage-ignore-block(suite): Not run.
_previousPackagesUri = c.options.packagesUriRaw;
bypassCache = true;
} else if (this._invalidatedUris.contains(c.options.packagesUri)) {
@ -1302,6 +1386,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
_hasToCheckPackageUris = _hasToCheckPackageUris || bypassCache;
_ticker.logMs("Read packages file");
if (_initializedForExpressionCompilationOnly) {
// Coverage-ignore-block(suite): Not run.
_hasToCheckPackageUris = false;
}
return uriTranslator;
@ -1344,6 +1429,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
if (builder.importUri.isScheme("dart")) {
_platformBuilders!.add(builder);
} else {
// Coverage-ignore-block(suite): Not run.
_userBuilders![builder.importUri] = builder;
}
}
@ -1353,6 +1439,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
return data;
}
// Coverage-ignore(suite): Not run.
/// Allows for updating the list of needed libraries.
///
/// Useful if a class hierarchy has been used externally.
@ -1436,6 +1523,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
return;
}
if (macroExecutorFactoryTokens.isNotEmpty) {
// Coverage-ignore-block(suite): Not run.
await Future.wait(notReusedLibraries
.map((library) => library.importUri)
.where(macroExecutorFactoryTokens.containsKey)
@ -1448,7 +1536,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
/// Internal method.
void _invalidateNotKeptUserBuilders(Set<Uri?> invalidatedUris) {
if (_modulesToLoad != null && _userBuilders != null) {
if (_modulesToLoad != null &&
// Coverage-ignore(suite): Not run.
_userBuilders != null) {
// Coverage-ignore-block(suite): Not run.
Set<Library> loadedNotKept = new Set<Library>();
for (LibraryBuilder builder in _userBuilders!.values) {
loadedNotKept.add(builder.library);
@ -1465,6 +1556,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
/// Internal method.
void _loadEnsureLoadedComponents(List<LibraryBuilder> reusedLibraries) {
if (_modulesToLoad != null) {
// Coverage-ignore-block(suite): Not run.
bool loadedAnything = false;
for (Component module in _modulesToLoad!) {
bool usedComponent = false;
@ -1561,6 +1653,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
if (library.importUri.isScheme("dart")) {
result.add(library);
// Coverage-ignore-block(suite): Not run.
inputLibrariesFiltered?.add(library);
} else {
potentiallyReferencedLibraries[library.importUri] = library;
@ -1603,6 +1696,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
if (library != null) {
result.add(library);
if (potentiallyReferencedInputLibraries.remove(uri) != null) {
// Coverage-ignore-block(suite): Not run.
inputLibrariesFiltered?.add(library);
}
for (LibraryPart part in library.parts) {
@ -1617,6 +1711,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
List<Library> removedLibraries = <Library>[];
bool removedDillBuilders = false;
for (Uri uri in potentiallyReferencedLibraries.keys) {
// Coverage-ignore-block(suite): Not run.
if (uri.isScheme("package")) continue;
LibraryBuilder? builder =
currentKernelTarget.loader.deregisterLoadedLibraryBuilder(uri);
@ -1647,6 +1742,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
hierarchy.applyTreeChanges(removedLibraries, const [], const []);
if (removedDillBuilders) {
// Coverage-ignore-block(suite): Not run.
_makeDillLoaderLibrariesUpToDateWithBuildersMap();
}
@ -1679,11 +1775,14 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
[Map<Uri, Source>? uriToSourceExtra,
Set<Uri?>? partsUsed]) {
uriToSource.remove(builder.fileUri);
// Coverage-ignore(suite): Not run.
uriToSourceExtra?.remove(builder.fileUri);
Library lib = builder.library;
for (LibraryPart part in lib.parts) {
Uri? partFileUri = uriTranslator.getPartFileUri(lib.fileUri, part);
if (partsUsed != null && partsUsed.contains(partFileUri)) continue;
if (partsUsed != null &&
// Coverage-ignore(suite): Not run.
partsUsed.contains(partFileUri)) continue;
// If the builders map contain the "parts" import uri, it's a real library
// (erroneously) used as a part so we don't want to remove that.
@ -1694,7 +1793,9 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
.containsLoadedLibraryBuilder(partImportUri)) {
continue;
}
} else if (reusedResult != null) {
}
// Coverage-ignore(suite): Not run.
else if (reusedResult != null) {
// We've just launched and don't have [lastGoodKernelTarget] yet. Search
// reusedResult for a kept library with this uri.
bool found = false;
@ -1710,6 +1811,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
}
uriToSource.remove(partFileUri);
// Coverage-ignore-block(suite): Not run.
uriToSourceExtra?.remove(partFileUri);
}
}
@ -1724,6 +1826,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
@override
// Coverage-ignore(suite): Not run.
Future<Procedure?> compileExpression(
String expression,
Map<String, DartType> inputDefinitions,
@ -2002,6 +2105,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
});
}
// Coverage-ignore(suite): Not run.
bool _packagesEqual(Package? a, Package? b) {
if (a == null || b == null) return false;
if (a.name != b.name) return false;
@ -2045,7 +2149,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
if (importUri != fileUri && invalidatedUris.contains(fileUri)) {
return true;
}
if (_hasToCheckPackageUris && importUri.isScheme("package")) {
if (_hasToCheckPackageUris &&
// Coverage-ignore(suite): Not run.
importUri.isScheme("package")) {
// Coverage-ignore-block(suite): Not run.
// Get package name, check if the base URI has changed for the package,
// if it has, translate the URI again,
// otherwise the URI cannot have changed.
@ -2107,6 +2214,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
libraryBuilder.importUri, libraryBuilder as DillLibraryBuilder);
}
} else {
// Coverage-ignore-block(suite): Not run.
// [lastGoodKernelTarget] was null so we explicitly have to add the
// builders from [userBuilders] (which cannot be null as we checked
// initially that one of them was non-null).
@ -2139,6 +2247,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
if (current != null) {
Set<Uri>? s = directDependencies[current.importUri];
if (current.importUri != removed) {
// Coverage-ignore-block(suite): Not run.
if (s == null) {
s = directDependencies[removed];
} else {
@ -2175,6 +2284,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
@override
// Coverage-ignore(suite): Not run.
void invalidateAllSources() {
IncrementalKernelTarget? lastGoodKernelTarget = this._lastGoodKernelTarget;
if (lastGoodKernelTarget != null) {
@ -2191,11 +2301,13 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
}
@override
// Coverage-ignore(suite): Not run.
void setModulesToLoadOnNextComputeDelta(List<Component> components) {
_modulesToLoad = components.toList();
}
}
// Coverage-ignore(suite): Not run.
class _ExtensionTypeFinder extends VisitorDefault<void> with VisitorVoidMixin {
static bool isOrContainsExtensionType(DartType type) {
if (type is ExtensionType) return true;
@ -2280,12 +2392,14 @@ class IncrementalKernelTarget extends KernelTarget
ChangedStructureNotifier get changedStructureNotifier => this;
@override
// Coverage-ignore(suite): Not run.
void registerClassMemberChange(Class c) {
classMemberChanges ??= new Set<Class>();
classMemberChanges!.add(c);
}
@override
// Coverage-ignore(suite): Not run.
void registerClassHierarchyChange(Class cls) {
classHierarchyChanges ??= <Class>{};
classHierarchyChanges!.add(cls);
@ -2306,14 +2420,17 @@ abstract class _InitializationStrategy {
: const _InitializationFromSdkSummary();
}
// Coverage-ignore(suite): Not run.
factory _InitializationStrategy.fromUri(Uri? uri) {
return uri != null
? new _InitializationFromUri(uri)
: const _InitializationFromSdkSummary();
}
// Coverage-ignore(suite): Not run.
bool get initializedFromDillForTesting => false;
// Coverage-ignore(suite): Not run.
bool get initializedIncrementalSerializerForTesting => false;
Future<int> initialize(
@ -2330,6 +2447,7 @@ class _InitializationFromSdkSummary extends _InitializationStrategy {
const _InitializationFromSdkSummary();
@override
// Coverage-ignore(suite): Not run.
Future<int> initialize(
DillTarget dillLoadedData,
UriTranslator uriTranslator,
@ -2343,6 +2461,7 @@ class _InitializationFromSdkSummary extends _InitializationStrategy {
dillLoadedData, summaryBytes, uriTranslator, context, data);
}
// Coverage-ignore(suite): Not run.
int _prepareSummary(
DillTarget dillLoadedTarget,
List<int>? summaryBytes,
@ -2391,8 +2510,13 @@ class _InitializationFromComponent extends _InitializationStrategy {
Component component = data.component = new Component(
libraries: componentToInitializeFrom.libraries,
uriToSource: componentToInitializeFrom.uriToSource)
..setMainMethodAndMode(componentToInitializeFrom.mainMethod?.reference,
true, componentToInitializeFrom.mode);
..setMainMethodAndMode(
componentToInitializeFrom
.mainMethod
// Coverage-ignore(suite): Not run.
?.reference,
true,
componentToInitializeFrom.mode);
componentProblems.saveComponentProblems(component);
bool foundDartCore = false;
@ -2415,6 +2539,7 @@ class _InitializationFromComponent extends _InitializationStrategy {
}
}
// Coverage-ignore(suite): Not run.
class _InitializationFromUri extends _InitializationFromSdkSummary {
Uri initializeFromDillUri;
@ -2588,6 +2713,7 @@ class _ComponentProblems {
_remainingComponentProblems.remove(lib.fileUri);
// Remove parts too.
for (LibraryPart part in lib.parts) {
// Coverage-ignore-block(suite): Not run.
Uri? partFileUri = uriTranslator.getPartFileUri(lib.fileUri, part);
_remainingComponentProblems.remove(partFileUri);
}
@ -2607,6 +2733,7 @@ class _ComponentProblems {
// Report old problems that wasn't reported again.
for (MapEntry<Uri, List<DiagnosticMessageFromJson>> entry
in _remainingComponentProblems.entries) {
// Coverage-ignore-block(suite): Not run.
List<DiagnosticMessageFromJson> messages = entry.value;
for (int i = 0; i < messages.length; i++) {
DiagnosticMessageFromJson message = messages[i];
@ -2632,6 +2759,7 @@ class _ComponentProblems {
new DiagnosticMessageFromJson.fromJson(jsonString);
assert(
message.uri != null ||
// Coverage-ignore(suite): Not run.
(message.involvedFiles != null &&
message.involvedFiles!.isNotEmpty),
jsonString);
@ -2642,6 +2770,7 @@ class _ComponentProblems {
messages.add(message);
}
if (message.involvedFiles != null) {
// Coverage-ignore-block(suite): Not run.
// This indexes the same message under several uris - this way it will
// be issued as long as it's a problem. It will because of
// deduplication when we re-issue these (in reissueComponentProblems)
@ -2662,6 +2791,7 @@ extension on UriTranslator {
Uri? getPartFileUri(Uri parentFileUri, LibraryPart part) {
Uri? fileUri = getPartUri(parentFileUri, part);
if (fileUri.isScheme("package")) {
// Coverage-ignore-block(suite): Not run.
// Part was specified via package URI and the resolve above thus
// did not go as expected. Translate the package URI to get the
// actual file URI.
@ -2722,13 +2852,18 @@ enum AdvancedInvalidationResult {
class RecorderForTesting {
const RecorderForTesting();
// Coverage-ignore(suite): Not run.
void recordAdvancedInvalidationResult(AdvancedInvalidationResult result) {}
// Coverage-ignore(suite): Not run.
void recordNonFullComponent(Component component) {}
// Coverage-ignore(suite): Not run.
void recordInvalidatedImportUris(List<Uri> uris) {}
// Coverage-ignore(suite): Not run.
void recordRebuildBodiesCount(int count) {}
// Coverage-ignore(suite): Not run.
void recordTemporaryFile(Uri uri) {}
}

View File

@ -12,6 +12,7 @@ import 'package:kernel/kernel.dart' show Component, Library, LibraryDependency;
import '../kernel/utils.dart' show ByteSink;
// Coverage-ignore(suite): Not run.
class IncrementalSerializer {
final Map<Uri, SerializationGroup> uriToGroup =
new Map<Uri, SerializationGroup>();
@ -326,6 +327,7 @@ class IncrementalSerializer {
}
}
// Coverage-ignore(suite): Not run.
class SerializationGroup {
final Uint8List serializedData;
final Set<Uri> uris;

View File

@ -16,12 +16,14 @@ class LibraryGraph implements Graph<Uri> {
LibraryGraph(this.libraries);
@override
// Coverage-ignore(suite): Not run.
Iterable<Uri> get vertices => libraries.keys;
@override
Iterable<Uri> neighborsOf(Uri vertex) sync* {
Library? library = libraries[vertex];
if (library == null) {
// Coverage-ignore-block(suite): Not run.
throw "Library not found: $vertex";
}

View File

@ -20,6 +20,7 @@ import 'messages.dart'
templateInternalProblemUnimplemented,
templateInternalProblemUnsupported;
// Coverage-ignore(suite): Not run.
class DebugAbort {
final LocatedMessage message;
@ -36,6 +37,7 @@ class DebugAbort {
String toString() => "DebugAbort: ${message.problemMessage}";
}
// Coverage-ignore(suite): Not run.
/// Used to report an internal error.
///
/// Internal errors should be avoided as best as possible, but are preferred
@ -58,6 +60,7 @@ Never internalProblem(Message message, int charOffset, Uri? uri) {
}
}
// Coverage-ignore(suite): Not run.
Never unimplemented(String what, int charOffset, Uri? uri) {
return internalProblem(
templateInternalProblemUnimplemented.withArguments(what),
@ -65,6 +68,7 @@ Never unimplemented(String what, int charOffset, Uri? uri) {
uri);
}
// Coverage-ignore(suite): Not run.
Never unhandled(String what, String where, int charOffset, Uri? uri) {
return internalProblem(
templateInternalProblemUnhandled.withArguments(what, where),
@ -72,6 +76,7 @@ Never unhandled(String what, String where, int charOffset, Uri? uri) {
uri);
}
// Coverage-ignore(suite): Not run.
Never unexpected(String expected, String actual, int charOffset, Uri? uri) {
return internalProblem(
templateInternalProblemUnexpected.withArguments(expected, actual),
@ -79,6 +84,7 @@ Never unexpected(String expected, String actual, int charOffset, Uri? uri) {
uri);
}
// Coverage-ignore(suite): Not run.
Never unsupported(String operation, int charOffset, Uri? uri) {
return internalProblem(
templateInternalProblemUnsupported.withArguments(operation),
@ -86,6 +92,7 @@ Never unsupported(String operation, int charOffset, Uri? uri) {
uri);
}
// Coverage-ignore(suite): Not run.
Uri? getFileUri(TreeNode node) {
TreeNode? parent = node;
do {

View File

@ -96,6 +96,7 @@ class ProcessedOptions {
/// not been computed yet.
PackageConfig? get _packages => _packageConfigAndUri?.packageConfig;
// Coverage-ignore(suite): Not run.
/// Resolve and return [packagesUri].
Future<Uri> resolvePackagesFileUri() async {
await _getPackages();
@ -145,6 +146,7 @@ class ProcessedOptions {
List<int>? _sdkSummaryBytes;
bool _triedLoadingSdkSummary = false;
// Coverage-ignore(suite): Not run.
/// Get the bytes of the SDK outline, if any.
Future<List<int>?> loadSdkSummaryBytes() async {
if (_sdkSummaryBytes == null && !_triedLoadingSdkSummary) {
@ -172,6 +174,7 @@ class ProcessedOptions {
bool get debugDump => _raw.debugDump;
// Coverage-ignore(suite): Not run.
bool get debugDumpShowOffsets => _raw.debugDumpShowOffsets;
bool get omitPlatform => _raw.omitPlatform;
@ -182,12 +185,15 @@ class ProcessedOptions {
bool get throwOnErrorsForDebugging => _raw.throwOnErrorsForDebugging;
// Coverage-ignore(suite): Not run.
bool get throwOnWarningsForDebugging => _raw.throwOnWarningsForDebugging;
// Coverage-ignore(suite): Not run.
bool get emitDeps => _raw.emitDeps;
NnbdMode get nnbdMode => _raw.nnbdMode;
// Coverage-ignore(suite): Not run.
bool get enableUnscheduledExperiments => _raw.enableUnscheduledExperiments;
bool get hasAdditionalDills => _raw.additionalDills.isNotEmpty;
@ -206,6 +212,7 @@ class ProcessedOptions {
int fatalDiagnosticCount = 0;
MacroSerializer? _macroSerializer;
// Coverage-ignore(suite): Not run.
MacroSerializer get macroSerializer =>
_macroSerializer ??= _raw.macroSerializer ?? new MacroSerializer();
@ -244,11 +251,13 @@ class ProcessedOptions {
{List<LocatedMessage>? context, List<Uri>? involvedFiles}) {
if (command_line_reporting.isHidden(severity)) return;
if (CompilerContext.current.options.setExitCodeOnProblem) {
// Coverage-ignore-block(suite): Not run.
exitCode = 1;
}
reportDiagnosticMessage(
format(message, severity, context, involvedFiles: involvedFiles));
if (command_line_reporting.shouldThrowOn(severity)) {
// Coverage-ignore-block(suite): Not run.
if (fatalDiagnosticCount++ < _raw.skipForDebugging) {
// Skip this one. The interesting one comes later.
return;
@ -265,7 +274,8 @@ class ProcessedOptions {
}
void reportDiagnosticMessage(DiagnosticMessage message) {
(_raw.onDiagnostic ?? defaultDiagnosticMessageHandler)(message);
(_raw.onDiagnostic ?? // Coverage-ignore(suite): Not run.
defaultDiagnosticMessageHandler)(message);
}
/// Returns [error] as a message from the OS.
@ -274,9 +284,11 @@ class ProcessedOptions {
/// be a fixed string, otherwise the toString of [error] will be returned.
String osErrorMessage(Object? error) {
if (_raw.omitOsMessageForTesting) return '<os-message>';
// Coverage-ignore(suite): Not run.
return '$error';
}
// Coverage-ignore(suite): Not run.
void defaultDiagnosticMessageHandler(DiagnosticMessage message) {
if (Verbosity.shouldPrint(_raw.verbosity, message)) {
printDiagnosticMessage(message, print);
@ -292,6 +304,7 @@ class ProcessedOptions {
/// info message about the null safety compilation mode is emitted.
void reportNullSafetyCompilationModeInfo() {
if (_raw.invocationModes.contains(InvocationMode.compile)) {
// Coverage-ignore-block(suite): Not run.
switch (nnbdMode) {
case NnbdMode.Weak:
reportWithoutLocation(messageCompilingWithoutSoundNullSafety,
@ -314,16 +327,20 @@ class ProcessedOptions {
_validated = true;
if (verbose) {
// Coverage-ignore-block(suite): Not run.
print(debugString());
}
if (errorOnMissingInput && inputs.isEmpty) {
// Coverage-ignore-block(suite): Not run.
reportWithoutLocation(messageMissingInput, Severity.error);
return false;
}
if (_raw.sdkRoot != null &&
// Coverage-ignore(suite): Not run.
!await fileSystem.entityForUri(sdkRoot!).exists()) {
// Coverage-ignore-block(suite): Not run.
reportWithoutLocation(
templateSdkRootNotFound.withArguments(sdkRoot!), Severity.error);
return false;
@ -331,12 +348,14 @@ class ProcessedOptions {
Uri? summary = sdkSummary;
if (summary != null && !await fileSystem.entityForUri(summary).exists()) {
// Coverage-ignore-block(suite): Not run.
reportWithoutLocation(
templateSdkSummaryNotFound.withArguments(summary), Severity.error);
return false;
}
if (compileSdk && summary != null) {
// Coverage-ignore-block(suite): Not run.
reportWithoutLocation(
messageInternalProblemProvidedBothCompileSdkAndSdkSummary,
Severity.internalProblem);
@ -344,6 +363,7 @@ class ProcessedOptions {
}
for (Uri source in _raw.additionalDills) {
// Coverage-ignore-block(suite): Not run.
// TODO(ahe): Remove this check, the compiler itself should handle and
// recover from this.
if (!await fileSystem.entityForUri(source).exists()) {
@ -359,6 +379,7 @@ class ProcessedOptions {
bool value = entry.value;
if (experimentalFlag.isExpired &&
value != experimentalFlag.isEnabledByDefault) {
// Coverage-ignore-block(suite): Not run.
if (value) {
reportWithoutLocation(
templateExperimentExpiredEnabled
@ -390,6 +411,7 @@ class ProcessedOptions {
/// effect.
void clearFileSystemCache() => _fileSystem = null;
// Coverage-ignore(suite): Not run.
/// Whether to write a file (e.g. a dill file) when reporting a crash.
bool get writeFileOnCrashReport => _raw.writeFileOnCrashReport;
@ -400,12 +422,14 @@ class ProcessedOptions {
Target? _target;
Target get target => _target ??= _raw.target ??
// Coverage-ignore(suite): Not run.
new NoneTarget(
new TargetFlags(soundNullSafety: nnbdMode == NnbdMode.Strong));
/// Returns the global state of the experimental features.
flags.GlobalFeatures get globalFeatures => _raw.globalFeatures;
// Coverage-ignore(suite): Not run.
/// Returns the minimum language version needed for a library with the given
/// [importUri] to opt into the experiment with the given [flag].
///
@ -444,6 +468,7 @@ class ProcessedOptions {
// TODO(sigmund): move, this doesn't feel like an "option".
Future<Component?> loadSdkSummary(CanonicalName? nameRoot) async {
if (_sdkSummaryComponent == null) {
// Coverage-ignore-block(suite): Not run.
if (sdkSummary == null) return null;
List<int>? bytes = await loadSdkSummaryBytes();
if (bytes != null && bytes.isNotEmpty) {
@ -462,6 +487,7 @@ class ProcessedOptions {
_sdkSummaryComponent = platform;
}
// Coverage-ignore(suite): Not run.
/// Get the components for each of the underlying `additionalDill`
/// provided via [CompilerOptions].
// TODO(sigmund): move, this doesn't feel like an "option".
@ -483,6 +509,7 @@ class ProcessedOptions {
return _additionalDillComponents!;
}
// Coverage-ignore(suite): Not run.
/// Helper to load a .dill file from [uri] using the existing [nameRoot].
Component loadComponent(List<int> bytes, CanonicalName? nameRoot,
{bool? alwaysCreateNewNamedNodes, Uri? fileUri}) {
@ -503,6 +530,7 @@ class ProcessedOptions {
/// required to locate/read the packages file as well as SDK metadata.
Future<UriTranslator> getUriTranslator({bool bypassCache = false}) async {
if (bypassCache) {
// Coverage-ignore-block(suite): Not run.
_uriTranslator = null;
_packageConfigAndUri = null;
}
@ -523,12 +551,14 @@ class ProcessedOptions {
// TODO(sigmund): Eek! We should get to the point where there is no
// fasta-specific targets and the target names are meaningful.
if (name.endsWith('_fasta')) {
// Coverage-ignore-block(suite): Not run.
name = name.substring(0, name.length - 6);
}
if (librariesSpecificationUri == null ||
!await fileSystem.entityForUri(librariesSpecificationUri!).exists()) {
if (compileSdk) {
// Coverage-ignore-block(suite): Not run.
reportWithoutLocation(
templateSdkSpecificationNotFound
.withArguments(librariesSpecificationUri!),
@ -542,7 +572,9 @@ class ProcessedOptions {
librariesSpecificationUri!,
(Uri uri) => fileSystem.entityForUri(uri).readAsString());
return spec.specificationFor(name);
} on LibrariesSpecificationException catch (e) {
}
// Coverage-ignore(suite): Not run.
on LibrariesSpecificationException catch (e) {
reportWithoutLocation(
templateCannotReadSdkSpecification.withArguments('${e.error}'),
Severity.error);
@ -556,6 +588,7 @@ class ProcessedOptions {
/// required to locate/read the packages file.
Future<PackageConfig> _getPackages() async {
if (_packages != null) {
// Coverage-ignore-block(suite): Not run.
return _packages!;
}
_packageConfigAndUri = null;
@ -565,6 +598,7 @@ class ProcessedOptions {
return _packages!;
}
// Coverage-ignore-block(suite): Not run.
if (inputs.isEmpty) {
_packageConfigAndUri = _PackageConfigAndUri.empty;
return _packages!;
@ -608,13 +642,17 @@ class ProcessedOptions {
if (fileContents is Uint8List) {
return fileContents;
} else {
// Coverage-ignore-block(suite): Not run.
return new Uint8List.fromList(fileContents);
}
} on FileSystemException catch (e) {
}
// Coverage-ignore(suite): Not run.
on FileSystemException catch (e) {
reportWithoutLocation(
templateCantReadFile.withArguments(uri, osErrorMessage(e.message)),
Severity.error);
} catch (e) {
// Coverage-ignore-block(suite): Not run.
Message message = templateExceptionReadingFile.withArguments(uri, '$e');
reportWithoutLocation(message, Severity.error);
// We throw a new exception to ensure that the message include the uri
@ -637,11 +675,14 @@ class ProcessedOptions {
Uint8List? contents =
requestedUri == new Uri() ? null : await _readFile(requestedUri);
if (contents == null) {
// Coverage-ignore-block(suite): Not run.
return _PackageConfigAndUri.empty;
}
try {
void Function(Object error) onError = (Object error) {
void Function(Object error) onError =
// Coverage-ignore(suite): Not run.
(Object error) {
if (error is FormatException) {
report(
templatePackagesFileFormat
@ -658,20 +699,25 @@ class ProcessedOptions {
return new _PackageConfigAndUri(
PackageConfig.parseBytes(contents, requestedUri, onError: onError),
requestedUri);
} on FormatException catch (e) {
}
// Coverage-ignore(suite): Not run.
on FormatException catch (e) {
report(
templatePackagesFileFormat
.withArguments(e.message)
.withLocation(requestedUri, e.offset ?? -1, noLength),
Severity.error);
} catch (e) {
// Coverage-ignore-block(suite): Not run.
reportWithoutLocation(
templateCantReadFile.withArguments(requestedUri, "$e"),
Severity.error);
}
// Coverage-ignore(suite): Not run.
return _PackageConfigAndUri.empty;
}
// Coverage-ignore(suite): Not run.
/// Create a [PackageConfig] given the Uri to a `package_config.json` file,
/// and use it in these options.
///
@ -681,6 +727,7 @@ class ProcessedOptions {
return _packageConfigAndUri!.packageConfig;
}
// Coverage-ignore(suite): Not run.
/// Finds a package resolution strategy using a [FileSystem].
///
/// The [scriptUri] points to a Dart script with a valid scheme accepted by
@ -753,6 +800,7 @@ class ProcessedOptions {
_computedSdkDefaults = true;
Uri? root = _raw.sdkRoot;
if (root != null) {
// Coverage-ignore-block(suite): Not run.
// Normalize to always end in '/'
if (!root.path.endsWith('/')) {
root = root.replace(path: root.path + '/');
@ -766,7 +814,9 @@ class ProcessedOptions {
if (_raw.sdkSummary != null) {
_sdkSummary = _raw.sdkSummary;
} else if (!compileSdk) {
}
// Coverage-ignore(suite): Not run.
else if (!compileSdk) {
// Infer based on the sdkRoot, but only when `compileSdk` is false,
// otherwise the default intent was to compile the sdk from sources and
// not to load an sdk summary file.
@ -776,6 +826,7 @@ class ProcessedOptions {
if (_raw.librariesSpecificationUri != null) {
_librariesSpecificationUri = _raw.librariesSpecificationUri;
} else if (compileSdk) {
// Coverage-ignore-block(suite): Not run.
_librariesSpecificationUri = sdkRoot!.resolve('lib/libraries.json');
}
}
@ -831,6 +882,7 @@ class ProcessedOptions {
return '$sb';
}
// Coverage-ignore(suite): Not run.
Future<List<int>?> _readAsBytes(FileSystemEntity file) async {
try {
return await file.readAsBytes();
@ -844,6 +896,7 @@ class ProcessedOptions {
}
}
// Coverage-ignore(suite): Not run.
MultiMacroExecutor get macroExecutor {
if (_raw.macroExecutor != null) return _raw.macroExecutor!;
@ -886,9 +939,11 @@ class ProcessedOptions {
return executor;
}
// Coverage-ignore(suite): Not run.
SerializationMode get macroSerializationMode =>
_raw.macroSerializationMode ??= SerializationMode.byteData;
// Coverage-ignore(suite): Not run.
/// The currently running precompilations.
Set<Uri> get runningPrecompilations => _raw.runningPrecompilations;
@ -896,15 +951,18 @@ class ProcessedOptions {
HooksForTesting? get hooksForTesting => _raw.hooksForTesting;
// Coverage-ignore(suite): Not run.
bool get showGeneratedMacroSourcesForTesting =>
_raw.showGeneratedMacroSourcesForTesting;
// Coverage-ignore(suite): Not run.
/// Disposes macro executor and serializer if configured.
Future<void> dispose() async {
await _raw.macroExecutor?.closeAndReset();
await macroSerializer.close();
}
// Coverage-ignore(suite): Not run.
bool equivalent(ProcessedOptions other,
{bool ignoreOnDiagnostic = true,
bool ignoreVerbose = true,
@ -916,6 +974,7 @@ class ProcessedOptions {
/// A package config and the `URI` it was loaded from.
class _PackageConfigAndUri {
// Coverage-ignore(suite): Not run.
static final _PackageConfigAndUri empty =
new _PackageConfigAndUri(PackageConfig.empty, new Uri());

View File

@ -346,6 +346,7 @@ class Scope extends MutableScope {
}
if (existingGetter == null) {
// Coverage-ignore-block(suite): Not run.
// No existing getter.
if (replacementGetterFromSetter != null) {
// We might have had one implicitly from the setter. Use it here,
@ -358,8 +359,10 @@ class Scope extends MutableScope {
// The existing getter should be replaced.
if (replacementGetterFromGetter != null) {
// With a new getter.
(_local ??= {})[name] = replacementGetterFromGetter;
(_local ??= // Coverage-ignore(suite): Not run.
{})[name] = replacementGetterFromGetter;
} else {
// Coverage-ignore-block(suite): Not run.
// With `null`, i.e. removed. This means that the getter is
// implicitly available through the setter. (This is currently not
// possible, but handled here to match the case for setters below).
@ -373,16 +376,16 @@ class Scope extends MutableScope {
if (replacementSetterFromGetter != null) {
// We might have had one implicitly from the getter. Use it here,
// if so.
(_setters ??= {})[name] =
replacementSetterFromGetter as MemberBuilder;
(_setters ??= // Coverage-ignore(suite): Not run.
{})[name] = replacementSetterFromGetter as MemberBuilder;
}
} else if (existingSetter.parent ==
replacementLibraryBuilderFromSetter) {
// The existing setter should be replaced.
if (replacementSetterFromSetter != null) {
// With a new setter.
(_setters ??= {})[name] =
replacementSetterFromSetter as MemberBuilder;
(_setters ??= // Coverage-ignore(suite): Not run.
{})[name] = replacementSetterFromSetter as MemberBuilder;
} else {
// With `null`, i.e. removed. This means that the setter is
// implicitly available through the getter. This happens when the
@ -395,6 +398,7 @@ class Scope extends MutableScope {
}
}
if (_extensions != null) {
// Coverage-ignore-block(suite): Not run.
bool needsPatching = false;
for (ExtensionBuilder extensionBuilder in _extensions!) {
if (replacementMap.containsKey(extensionBuilder.parent)) {
@ -424,6 +428,7 @@ class Scope extends MutableScope {
}
}
// Coverage-ignore(suite): Not run.
Scope copyWithParent(Scope parent, String debugName) {
return new Scope(
kind: kind,
@ -435,6 +440,7 @@ class Scope extends MutableScope {
isModifiable: isModifiable);
}
// Coverage-ignore(suite): Not run.
/// Don't use this. Use [becomePartOf] instead.
void set parent(_) => unsupported("parent=", -1, null);
@ -515,8 +521,15 @@ class Scope extends MutableScope {
Builder? builder = map[name];
if (builder == null) return null;
if (builder.next != null) {
return new AmbiguousBuilder(name.isEmpty ? classNameOrDebugName : name,
builder, charOffset, fileUri);
return new AmbiguousBuilder(
name.isEmpty
?
// Coverage-ignore(suite): Not run.
classNameOrDebugName
: name,
builder,
charOffset,
fileUri);
} else if (!isInstanceScope && builder.isDeclarationInstanceMember) {
return null;
} else if (builder is MemberBuilder && builder.isConflictingSetter) {
@ -576,7 +589,8 @@ class Scope extends MutableScope {
void addLocalMember(String name, Builder member, {required bool setter}) {
if (setter) {
(_setters ??= {})[name] = member as MemberBuilder;
(_setters ??= // Coverage-ignore(suite): Not run.
{})[name] = member as MemberBuilder;
} else {
(_local ??= {})[name] = member;
}
@ -683,11 +697,13 @@ class Scope extends MutableScope {
}
if (scope._local != null) {
map = _local ??= {};
map = _local ??= // Coverage-ignore(suite): Not run.
{};
scope._local?.forEach(mergeMember);
}
if (scope._setters != null) {
map = _setters ??= {};
map = _setters ??= // Coverage-ignore(suite): Not run.
{};
scope._setters?.forEach(mergeMember);
}
if (scope._extensions != null) {
@ -704,6 +720,7 @@ class Scope extends MutableScope {
return "$buffer";
}
// Coverage-ignore(suite): Not run.
int writeOn(StringSink sink) {
int nestingLevel = (_parent?.writeOn(sink) ?? -1) + 1;
String indent = " " * nestingLevel;
@ -871,6 +888,7 @@ class AccessErrorBuilder extends ProblemBuilder {
Builder? get parent => builder.parent;
@override
// Coverage-ignore(suite): Not run.
bool get isFinal => builder.isFinal;
@override
@ -902,6 +920,7 @@ class AccessErrorBuilder extends ProblemBuilder {
bool get isStatic => builder.isStatic;
@override
// Coverage-ignore(suite): Not run.
bool get isTopLevel => builder.isTopLevel;
@override
@ -911,6 +930,7 @@ class AccessErrorBuilder extends ProblemBuilder {
bool get isLocal => builder.isLocal;
@override
// Coverage-ignore(suite): Not run.
Message get message => templateAccessError.withArguments(name);
}
@ -919,11 +939,13 @@ class AmbiguousBuilder extends ProblemBuilder {
: super(name, builder, charOffset, fileUri);
@override
// Coverage-ignore(suite): Not run.
Builder? get parent => null;
@override
Message get message => templateDuplicatedDeclarationUse.withArguments(name);
// Coverage-ignore(suite): Not run.
// TODO(ahe): Also provide context.
Builder getFirstDeclaration() {
@ -937,33 +959,43 @@ class AmbiguousBuilder extends ProblemBuilder {
mixin ErroneousMemberBuilderMixin implements SourceMemberBuilder {
@override
// Coverage-ignore(suite): Not run.
MemberDataForTesting? get dataForTesting => null;
@override
// Coverage-ignore(suite): Not run.
Member get member => throw new UnsupportedError('$runtimeType.member');
@override
// Coverage-ignore(suite): Not run.
Name get memberName => throw new UnsupportedError('$runtimeType.memberName');
@override
// Coverage-ignore(suite): Not run.
Member? get readTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member? get invokeTarget => null;
@override
// Coverage-ignore(suite): Not run.
Iterable<Member> get exportedMembers => const [];
@override
// Coverage-ignore(suite): Not run.
bool get isAssignable => false;
@override
// Coverage-ignore(suite): Not run.
bool get isExternal => false;
@override
// Coverage-ignore(suite): Not run.
bool get isAbstract => false;
@override
@ -999,6 +1031,7 @@ mixin ErroneousMemberBuilderMixin implements SourceMemberBuilder {
// TODO(johnniwinther): Remove this and create a [ProcedureBuilder] interface.
@override
// Coverage-ignore(suite): Not run.
ProcedureKind? get kind => null;
@override
@ -1010,29 +1043,35 @@ mixin ErroneousMemberBuilderMixin implements SourceMemberBuilder {
}
@override
// Coverage-ignore(suite): Not run.
void buildOutlineNodes(BuildNodesCallback f) {
assert(false, "Unexpected call to $runtimeType.buildOutlineNodes.");
}
@override
// Coverage-ignore(suite): Not run.
int buildBodyNodes(BuildNodesCallback f) {
assert(false, "Unexpected call to $runtimeType.buildBodyNodes.");
return 0;
}
@override
// Coverage-ignore(suite): Not run.
List<ClassMember> get localMembers => const <ClassMember>[];
@override
// Coverage-ignore(suite): Not run.
List<ClassMember> get localSetters => const <ClassMember>[];
@override
// Coverage-ignore(suite): Not run.
void checkVariance(
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
assert(false, "Unexpected call to $runtimeType.checkVariance.");
}
@override
// Coverage-ignore(suite): Not run.
void checkTypes(
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
assert(false, "Unexpected call to $runtimeType.checkVariance.");
@ -1124,7 +1163,8 @@ class ScopeIterator implements Iterator<Builder> {
@override
Builder get current {
return _current ?? (throw new StateError('No element'));
return _current ?? // Coverage-ignore(suite): Not run.
(throw new StateError('No element'));
}
}
@ -1192,7 +1232,8 @@ class ScopeNameIterator extends ScopeIterator implements NameIterator<Builder> {
@override
String get name {
return _name ?? (throw new StateError('No element'));
return _name ?? // Coverage-ignore(suite): Not run.
(throw new StateError('No element'));
}
}
@ -1222,7 +1263,8 @@ class ConstructorScopeIterator implements Iterator<MemberBuilder> {
@override
MemberBuilder get current {
return _current ?? (throw new StateError('No element'));
return _current ?? // Coverage-ignore(suite): Not run.
(throw new StateError('No element'));
}
}
@ -1261,7 +1303,8 @@ class ConstructorScopeNameIterator extends ConstructorScopeIterator
@override
String get name {
return _name ?? (throw new StateError('No element'));
return _name ?? // Coverage-ignore(suite): Not run.
(throw new StateError('No element'));
}
}
@ -1352,6 +1395,7 @@ extension IteratorExtension<T extends Builder> on Iterator<T> {
}
}
// Coverage-ignore(suite): Not run.
List<T> toList() {
List<T> list = [];
while (moveNext()) {
@ -1421,6 +1465,7 @@ abstract class MergedScope<T extends Builder> {
? templateNonPatchLibraryConflict.withArguments(name)
: templateNonAugmentationLibraryConflict.withArguments(name);
} else {
// Coverage-ignore-block(suite): Not run.
message = inPatchLibrary
? templateNonPatchClassMemberConflict.withArguments(name)
: templateNonAugmentationClassMemberConflict
@ -1456,7 +1501,9 @@ abstract class MergedScope<T extends Builder> {
} else {
message = inPatchLibrary
? templateUnmatchedPatchDeclaration.withArguments(name)
: templateUnmatchedAugmentationDeclaration.withArguments(name);
:
// Coverage-ignore(suite): Not run.
templateUnmatchedAugmentationDeclaration.withArguments(name);
}
originLibrary.addProblem(
message, newBuilder.charOffset, name.length, newBuilder.fileUri);
@ -1617,7 +1664,9 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
inPatchLibrary
? templateNonPatchConstructorConflict
.withArguments(newConstructor.fullNameForErrors)
: templateNonAugmentationConstructorConflict
:
// Coverage-ignore(suite): Not run.
templateNonAugmentationConstructorConflict
.withArguments(newConstructor.fullNameForErrors),
newConstructor.charOffset,
noLength,
@ -1635,7 +1684,9 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
inPatchLibrary
? templateUnmatchedPatchConstructor
.withArguments(newConstructor.fullNameForErrors)
: templateUnmatchedAugmentationConstructor
:
// Coverage-ignore(suite): Not run.
templateUnmatchedAugmentationConstructor
.withArguments(newConstructor.fullNameForErrors),
newConstructor.charOffset,
noLength,
@ -1644,6 +1695,7 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
_originConstructorScope.addLocalMember(name, newConstructor);
for (ConstructorScope augmentationConstructorScope
in _augmentationConstructorScopes.values) {
// Coverage-ignore-block(suite): Not run.
_addConstructorToAugmentationScope(
augmentationConstructorScope, name, newConstructor);
}
@ -1651,6 +1703,7 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
if (inPatchLibrary &&
!name.startsWith('_') &&
!_allowInjectedPublicMember(newConstructor)) {
// Coverage-ignore-block(suite): Not run.
originLibrary.addProblem(
templatePatchInjectionFailed.withArguments(
name, originLibrary.importUri),
@ -1694,6 +1747,7 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
return true;
}
if (newBuilder.isStatic) {
// Coverage-ignore-block(suite): Not run.
return _origin.name.startsWith('_');
}
// TODO(johnniwinther): Restrict the use of injected public class members.
@ -1705,6 +1759,7 @@ extension on Builder {
bool get isAugmentation {
Builder self = this;
if (self is SourceLibraryBuilder) {
// Coverage-ignore-block(suite): Not run.
return self.isAugmentationLibrary;
} else if (self is SourceClassBuilder) {
return self.isAugmentation;
@ -1758,6 +1813,7 @@ extension on Builder {
} else if (self is SourceExtensionBuilder) {
return _hasPatchAnnotation(self.metadata);
} else if (self is SourceExtensionTypeDeclarationBuilder) {
// Coverage-ignore-block(suite): Not run.
return _hasPatchAnnotation(self.metadata);
}
return false;
@ -1777,6 +1833,7 @@ class IteratorSequence<T> implements Iterator<T> {
if (_current != null) {
return _current!.current;
}
// Coverage-ignore-block(suite): Not run.
throw new StateError("No current element");
}

View File

@ -16,7 +16,9 @@ class Ticker {
}
void logMs(Object message) {
log((Duration elapsed, Duration sinceStart) {
log(
// Coverage-ignore(suite): Not run.
(Duration elapsed, Duration sinceStart) {
print("$sinceStart: $message in ${elapsed.inMilliseconds}ms.");
});
}
@ -25,6 +27,7 @@ class Ticker {
Duration elapsed = sw.elapsed;
try {
if (isVerbose) {
// Coverage-ignore-block(suite): Not run.
f(elapsed - previousTick, elapsed);
}
} finally {

View File

@ -21,6 +21,7 @@ class UriTranslator {
List<Uri>? getDartPatches(String libraryName) =>
dartLibraries.libraryInfoFor(libraryName)?.patches;
// Coverage-ignore(suite): Not run.
bool isPlatformImplementation(Uri uri) {
if (!uri.isScheme("dart")) return false;
String path = uri.path;
@ -67,7 +68,9 @@ class UriTranslator {
: _packageUriNotFoundNoReport)(uri);
}
return translated;
} on ArgumentError catch (e) {
}
// Coverage-ignore(suite): Not run.
on ArgumentError catch (e) {
// TODO(sigmund): catch a more precise error when
// https://github.com/dart-lang/package_config/issues/40 is fixed.
if (reportMessage) {
@ -88,6 +91,7 @@ class UriTranslator {
return null;
}
// Coverage-ignore(suite): Not run.
static Uri? _packageUriNotFoundNoReport(Uri uri) {
return null;
}

View File

@ -64,7 +64,9 @@ bool isNotMalformedUriScheme(Uri uri) => !uri.isScheme(MALFORMED_URI_SCHEME);
Uri getPartUri(Uri parentUri, LibraryPart part) {
try {
return parentUri.resolve(part.partUri);
} on FormatException {
}
// Coverage-ignore(suite): Not run.
on FormatException {
// This is also done in [SourceLibraryBuilder.resolve]
return new Uri(
scheme: MALFORMED_URI_SCHEME,

View File

@ -1,3 +1,4 @@
// Coverage-ignore(suite): Not run.
// Copyright (c) 2024, 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.

View File

@ -274,9 +274,11 @@ abstract class BuilderImpl implements Builder {
bool get hasProblem => false;
@override
// Coverage-ignore(suite): Not run.
bool get isConst => false;
@override
// Coverage-ignore(suite): Not run.
bool get isConstructor => false;
@override
@ -286,6 +288,7 @@ abstract class BuilderImpl implements Builder {
bool get isField => false;
@override
// Coverage-ignore(suite): Not run.
bool get isFinal => false;
@override
@ -295,15 +298,19 @@ abstract class BuilderImpl implements Builder {
bool get isExtension => false;
@override
// Coverage-ignore(suite): Not run.
bool get isDeclarationMember => false;
@override
// Coverage-ignore(suite): Not run.
bool get isClassMember => false;
@override
// Coverage-ignore(suite): Not run.
bool get isExtensionMember => false;
@override
// Coverage-ignore(suite): Not run.
bool get isExtensionTypeMember => false;
@override
@ -337,15 +344,18 @@ abstract class BuilderImpl implements Builder {
bool get isSetter => false;
@override
// Coverage-ignore(suite): Not run.
bool get isStatic => false;
@override
// Coverage-ignore(suite): Not run.
bool get isExternal => false;
@override
bool get isSynthetic => false;
@override
// Coverage-ignore(suite): Not run.
bool get isTopLevel => false;
@override
@ -355,6 +365,7 @@ abstract class BuilderImpl implements Builder {
bool get isTypeVariable => false;
@override
// Coverage-ignore(suite): Not run.
void applyAugmentation(Builder augmentation) {
unsupported("${runtimeType}.applyAugmentation", charOffset, fileUri);
}

View File

@ -30,6 +30,7 @@ abstract class BuiltinTypeDeclarationBuilder extends TypeDeclarationBuilderImpl
}
@override
// Coverage-ignore(suite): Not run.
DartType buildAliasedTypeWithBuiltArguments(
LibraryBuilder library,
Nullability nullability,

View File

@ -204,7 +204,9 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
@override
bool get isAnonymousMixinApplication {
return isMixinApplication && !isNamedMixinApplication;
return isMixinApplication &&
// Coverage-ignore(suite): Not run.
!isNamedMixinApplication;
}
@override
@ -236,6 +238,7 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
{bool setter = false, bool required = false}) {
Builder? builder = scope.lookupLocalMember(name, setter: setter);
if (builder == null && isAugmenting) {
// Coverage-ignore-block(suite): Not run.
builder = origin.scope.lookupLocalMember(name, setter: setter);
}
if (required && builder == null) {
@ -271,6 +274,7 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
getAsTypeArguments(cls.typeParameters, libraryBuilder.library));
}
// Coverage-ignore(suite): Not run.
InterfaceType get legacyRawType {
return _legacyRawType ??= new InterfaceType(cls, Nullability.legacy,
new List<DartType>.filled(typeVariablesCount, const DynamicType()));
@ -291,11 +295,13 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
InterfaceType rawType(Nullability nullability) {
switch (nullability) {
case Nullability.legacy:
// Coverage-ignore(suite): Not run.
return legacyRawType;
case Nullability.nullable:
return nullableRawType;
case Nullability.nonNullable:
return nonNullableRawType;
// Coverage-ignore(suite): Not run.
case Nullability.undetermined:
return unhandled("$nullability", "rawType", TreeNode.noOffset, noUri);
}
@ -329,13 +335,17 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
return rawType(nullability);
}
if (aliasedTypeWithBuiltArgumentsCacheNonNullable != null &&
// Coverage-ignore(suite): Not run.
nullability == Nullability.nonNullable) {
// Coverage-ignore-block(suite): Not run.
assert(aliasedTypeWithBuiltArgumentsCacheNonNullable!.classReference ==
cls.reference);
assert(arguments.isEmpty);
return aliasedTypeWithBuiltArgumentsCacheNonNullable!;
} else if (aliasedTypeWithBuiltArgumentsCacheNullable != null &&
// Coverage-ignore(suite): Not run.
nullability == Nullability.nullable) {
// Coverage-ignore-block(suite): Not run.
assert(aliasedTypeWithBuiltArgumentsCacheNullable!.classReference ==
cls.reference);
assert(arguments.isEmpty);
@ -343,6 +353,7 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
}
InterfaceType type = new InterfaceType(cls, nullability, arguments);
if (arguments.isEmpty) {
// Coverage-ignore-block(suite): Not run.
assert(typeVariablesCount == 0);
if (nullability == Nullability.nonNullable) {
aliasedTypeWithBuiltArgumentsCacheNonNullable = type;
@ -373,6 +384,7 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
libraryBuilder.importUri.path == "core" &&
library is SourceLibraryBuilder &&
!isRecordAccessAllowed(library)) {
// Coverage-ignore-block(suite): Not run.
library.reportFeatureNotEnabled(
library.libraryFeatures.records, fileUri, charOffset, name.length);
return const InvalidType();
@ -390,7 +402,11 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
@override
Supertype buildMixedInType(
LibraryBuilder library, List<TypeBuilder>? arguments) {
Class cls = isAugmenting ? origin.cls : this.cls;
Class cls = isAugmenting
?
// Coverage-ignore(suite): Not run.
origin.cls
: this.cls;
if (arguments != null) {
List<DartType> typeArguments =
buildAliasedTypeArguments(library, arguments, /* hierarchy = */ null);
@ -418,6 +434,7 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
{bool isSetter = false, bool isSuper = false}) {
Class? instanceClass = cls;
if (isAugmenting) {
// Coverage-ignore-block(suite): Not run.
assert(identical(instanceClass, origin.cls),
"Found ${origin.cls} expected $instanceClass");
if (isSuper) {
@ -442,7 +459,9 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
}
Member? target = isSuper
? hierarchy.getDispatchTarget(instanceClass, name, setter: isSetter)
: hierarchy.getInterfaceMember(instanceClass, name, setter: isSetter);
:
// Coverage-ignore(suite): Not run.
hierarchy.getInterfaceMember(instanceClass, name, setter: isSetter);
if (isSuper && target == null) {
if (cls.isMixinDeclaration) {
target =

View File

@ -21,6 +21,7 @@ class FixedTypeBuilderImpl extends FixedTypeBuilder {
const FixedTypeBuilderImpl(this.type, this.fileUri, this.charOffset);
@override
// Coverage-ignore(suite): Not run.
TypeBuilder clone(
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
@ -29,9 +30,11 @@ class FixedTypeBuilderImpl extends FixedTypeBuilder {
}
@override
// Coverage-ignore(suite): Not run.
TypeName? get typeName => null;
@override
// Coverage-ignore(suite): Not run.
NullabilityBuilder get nullabilityBuilder =>
new NullabilityBuilder.fromNullability(type.nullability);
@ -39,9 +42,11 @@ class FixedTypeBuilderImpl extends FixedTypeBuilder {
String get debugName => 'FixedTypeBuilder';
@override
// Coverage-ignore(suite): Not run.
bool get isVoidType => type is VoidType;
@override
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) {
buffer.write('type=${type}');
return buffer;
@ -60,21 +65,25 @@ class FixedTypeBuilderImpl extends FixedTypeBuilder {
}
@override
// Coverage-ignore(suite): Not run.
Supertype buildSupertype(LibraryBuilder library, TypeUse typeUse) {
return unhandled(
'buildSupertype', 'FixedTypeBuilder', charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
Supertype buildMixedInType(LibraryBuilder library) {
return unhandled(
'buildMixedInType', 'FixedTypeBuilder', charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
TypeBuilder withNullabilityBuilder(NullabilityBuilder nullabilityBuilder) =>
this;
@override
// Coverage-ignore(suite): Not run.
bool get isExplicit => true;
}

View File

@ -153,6 +153,7 @@ class FormalParameterBuilder extends ModifierBuilderImpl
!isSuperInitializingFormal;
@override
// Coverage-ignore(suite): Not run.
String get fullNameForErrors => name;
VariableDeclaration build(SourceLibraryBuilder library) {
@ -319,6 +320,7 @@ class FunctionTypeParameterBuilder implements ParameterBuilder {
FunctionTypeParameterBuilder(this.kind, this.type, this.name);
@override
// Coverage-ignore(suite): Not run.
ParameterBuilder clone(
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,

View File

@ -72,7 +72,9 @@ abstract class FunctionTypeBuilderImpl extends FunctionTypeBuilder {
fileUri,
charOffset,
hasFunctionFormalParameterSyntax)
: new _InferredFunctionTypeBuilder(
:
// Coverage-ignore(suite): Not run.
new _InferredFunctionTypeBuilder(
returnType,
typeVariables,
formals,
@ -98,11 +100,13 @@ abstract class FunctionTypeBuilderImpl extends FunctionTypeBuilder {
String get debugName => "Function";
@override
// Coverage-ignore(suite): Not run.
bool get isVoidType => false;
@override
StringBuffer printOn(StringBuffer buffer) {
if (typeVariables != null) {
// Coverage-ignore-block(suite): Not run.
buffer.write("<");
bool isFirst = true;
for (StructuralVariableBuilder t in typeVariables!) {
@ -117,6 +121,7 @@ abstract class FunctionTypeBuilderImpl extends FunctionTypeBuilder {
}
buffer.write("(");
if (formals != null) {
// Coverage-ignore-block(suite): Not run.
bool isFirst = true;
for (ParameterBuilder t in formals!) {
if (!isFirst) {
@ -143,7 +148,9 @@ abstract class FunctionTypeBuilderImpl extends FunctionTypeBuilder {
@override
DartType buildAliased(
LibraryBuilder library, TypeUse typeUse, ClassHierarchyBase? hierarchy) {
assert(hierarchy != null || isExplicit, "Cannot build $this.");
assert(
hierarchy != null || isExplicit, // Coverage-ignore(suite): Not run.
"Cannot build $this.");
DartType builtReturnType =
returnType.buildAliased(library, TypeUse.returnType, hierarchy);
List<DartType> positionalParameters = <DartType>[];
@ -258,6 +265,7 @@ class _ExplicitFunctionTypeBuilder extends FunctionTypeBuilderImpl {
}
}
// Coverage-ignore(suite): Not run.
/// A function type that needs type inference to be fully defined.
///
/// This occurs through macros where return type or parameter types can be

View File

@ -12,6 +12,7 @@ import 'library_builder.dart';
import 'nullability_builder.dart';
import 'type_builder.dart';
// Coverage-ignore(suite): Not run.
class FutureOrTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
FutureOrTypeDeclarationBuilder(
DartType type, LibraryBuilder compilationUnit, int charOffset)

View File

@ -36,16 +36,19 @@ class InvalidTypeBuilderImpl extends InvalidTypeBuilder {
}
@override
// Coverage-ignore(suite): Not run.
Supertype? buildMixedInType(LibraryBuilder library) {
return null;
}
@override
// Coverage-ignore(suite): Not run.
Supertype? buildSupertype(LibraryBuilder library, TypeUse typeUse) {
return null;
}
@override
// Coverage-ignore(suite): Not run.
TypeBuilder clone(
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
@ -60,19 +63,24 @@ class InvalidTypeBuilderImpl extends InvalidTypeBuilder {
bool get isExplicit => true;
@override
// Coverage-ignore(suite): Not run.
bool get isVoidType => false;
@override
// Coverage-ignore(suite): Not run.
TypeName? get typeName => null;
@override
// Coverage-ignore(suite): Not run.
NullabilityBuilder get nullabilityBuilder =>
const NullabilityBuilder.inherent();
@override
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) => buffer;
@override
// Coverage-ignore(suite): Not run.
TypeBuilder withNullabilityBuilder(NullabilityBuilder nullabilityBuilder) {
return this;
}

View File

@ -21,6 +21,7 @@ class InvalidTypeDeclarationBuilder extends TypeDeclarationBuilderImpl
: super(null, 0, name, null, message.charOffset);
@override
// Coverage-ignore(suite): Not run.
Uri? get fileUri => message.uri;
@override

View File

@ -401,9 +401,11 @@ abstract class LibraryBuilderImpl extends ModifierBuilderImpl
: super(null, -1);
@override
// Coverage-ignore(suite): Not run.
bool get isSynthetic => false;
@override
// Coverage-ignore(suite): Not run.
Builder? get parent => null;
@override
@ -416,6 +418,7 @@ abstract class LibraryBuilderImpl extends ModifierBuilderImpl
Loader get loader;
@override
// Coverage-ignore(suite): Not run.
int get modifiers => 0;
@override
@ -491,6 +494,7 @@ abstract class LibraryBuilderImpl extends ModifierBuilderImpl
Builder? cls = (bypassLibraryPrivacy ? scope : exportScope)
.lookup(className, -1, fileUri);
if (cls is TypeAliasBuilder) {
// Coverage-ignore-block(suite): Not run.
TypeAliasBuilder aliasBuilder = cls;
// No type arguments are available, but this method is only called in
// order to find constructors of specific non-generic classes (errors),
@ -508,10 +512,13 @@ abstract class LibraryBuilderImpl extends ModifierBuilderImpl
if (!cls.isAbstract) {
return constructor;
}
} else if (constructor.isFactory) {
}
// Coverage-ignore(suite): Not run.
else if (constructor.isFactory) {
return constructor;
}
}
// Coverage-ignore-block(suite): Not run.
throw internalProblem(
templateInternalProblemConstructorNotFound.withArguments(
"$className.$constructorName", importUri),
@ -537,6 +544,7 @@ abstract class LibraryBuilderImpl extends ModifierBuilderImpl
CompilationUnit accessor, int charOffset, int length, Uri fileUri) {}
@override
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) {
return buffer..write(isPart || isAugmenting ? fileUri : importUri);
}

View File

@ -251,6 +251,7 @@ abstract class BuilderClassMember implements ClassMember {
bool get isProperty => memberKind != ClassMemberKind.Method;
@override
// Coverage-ignore(suite): Not run.
List<ClassMember> get declarations =>
throw new UnsupportedError("$runtimeType.declarations");

View File

@ -32,6 +32,7 @@ class MetadataBuilder {
: charOffset = _beginToken.charOffset,
hasPatch = _beginToken.next?.lexeme == 'patch';
// Coverage-ignore(suite): Not run.
Token? get beginToken => _beginToken;
static void buildAnnotations(
@ -94,6 +95,7 @@ class MetadataBuilder {
cloner ??= new CloneVisitorNotMembers();
Expression annotation =
cloner.cloneInContext(annotationBuilder._expression!);
// Coverage-ignore(suite): Not run.
if (createFileUriExpression && annotation is! FileUriExpression) {
annotation = new FileUriExpression(annotation, fileUri)
..fileOffset = annotationBuilder.charOffset;

View File

@ -34,6 +34,7 @@ abstract class ModifierBuilderImpl extends BuilderImpl {
@override
bool get isAugment => (modifiers & augmentMask) != 0;
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) {
return buffer..write(name);
}

View File

@ -136,7 +136,9 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
fileUri: fileUri,
charOffset: charOffset,
instanceTypeVariableAccess: instanceTypeVariableAccess)
: new _InferredNamedTypeBuilder(name, nullabilityBuilder,
:
// Coverage-ignore(suite): Not run.
new _InferredNamedTypeBuilder(name, nullabilityBuilder,
arguments: arguments,
fileUri: fileUri,
charOffset: charOffset,
@ -293,6 +295,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
message.withLocation(fileUri!, nameOffset, nameLength));
return;
case InstanceTypeVariableAccessState.Unexpected:
// Coverage-ignore(suite): Not run.
assert(false,
"Unexpected instance type variable $typeParameterBuilder");
break;
@ -315,6 +318,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
bool first = true;
for (TypeBuilder t in typeArguments) {
if (!first) {
// Coverage-ignore-block(suite): Not run.
buffer.write(", ");
}
first = false;
@ -352,6 +356,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
Message message;
if (declaration!.isTypeVariable) {
// Coverage-ignore-block(suite): Not run.
message =
templateSupertypeIsTypeVariable.withArguments(fullNameForErrors);
} else if (type.nullability == Nullability.nullable) {
@ -376,31 +381,36 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
messageExtendsDeferredClass,
typeName.fullNameOffset,
typeName.fullNameLength,
fileUri ?? libraryBuilder.fileUri);
fileUri ?? // Coverage-ignore(suite): Not run.
libraryBuilder.fileUri);
case TypeUse.classImplementsType:
libraryBuilder.addProblem(
messageClassImplementsDeferredClass,
typeName.fullNameOffset,
typeName.fullNameLength,
fileUri ?? libraryBuilder.fileUri);
fileUri ?? // Coverage-ignore(suite): Not run.
libraryBuilder.fileUri);
case TypeUse.mixinOnType:
libraryBuilder.addProblem(
messageMixinSuperClassConstraintDeferredClass,
typeName.fullNameOffset,
typeName.fullNameLength,
fileUri ?? libraryBuilder.fileUri);
fileUri ?? // Coverage-ignore(suite): Not run.
libraryBuilder.fileUri);
case TypeUse.extensionTypeImplementsType:
libraryBuilder.addProblem(
messageExtensionTypeImplementsDeferred,
typeName.fullNameOffset,
typeName.fullNameLength,
fileUri ?? libraryBuilder.fileUri);
fileUri ?? // Coverage-ignore(suite): Not run.
libraryBuilder.fileUri);
case TypeUse.classWithType:
libraryBuilder.addProblem(
messageMixinDeferredMixin,
typeName.fullNameOffset,
typeName.fullNameLength,
fileUri ?? libraryBuilder.fileUri);
fileUri ?? // Coverage-ignore(suite): Not run.
libraryBuilder.fileUri);
case TypeUse.literalTypeArgument:
case TypeUse.variableType:
case TypeUse.typeParameterBound:
@ -419,13 +429,21 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
case TypeUse.typeLiteral:
case TypeUse.extensionOnType:
case TypeUse.extensionTypeRepresentationType:
// Coverage-ignore(suite): Not run.
case TypeUse.typeArgument:
// Coverage-ignore(suite): Not run.
case TypeUse.typedefAlias:
// Coverage-ignore(suite): Not run.
case TypeUse.instantiation:
// Coverage-ignore(suite): Not run.
case TypeUse.enumSelfType:
// Coverage-ignore(suite): Not run.
case TypeUse.macroTypeArgument:
// Coverage-ignore(suite): Not run.
case TypeUse.typeParameterDefaultType:
// Coverage-ignore(suite): Not run.
case TypeUse.defaultTypeAsTypeArgument:
// Coverage-ignore(suite): Not run.
case TypeUse.deferredTypeError:
}
}
@ -438,7 +456,9 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
if (libraryBuilder is SourceLibraryBuilder) {
_checkDeferred(libraryBuilder, typeUse);
if (!isRecordAccessAllowed(libraryBuilder) &&
// Coverage-ignore(suite): Not run.
isDartCoreRecord(aliasedType)) {
// Coverage-ignore-block(suite): Not run.
libraryBuilder.reportFeatureNotEnabled(
libraryBuilder.libraryFeatures.records,
fileUri ?? libraryBuilder.fileUri,
@ -454,7 +474,9 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
{Set<TypeAliasBuilder>? usedTypeAliasBuilders,
List<TypeBuilder>? unboundTypes,
List<StructuralVariableBuilder>? unboundTypeVariables}) {
assert(declaration != null, "Declaration has not been resolved on $this.");
assert(
declaration != null, // Coverage-ignore(suite): Not run.
"Declaration has not been resolved on $this.");
if (declaration is TypeAliasBuilder) {
return (declaration as TypeAliasBuilder).unalias(typeArguments,
usedTypeAliasBuilders: usedTypeAliasBuilders,
@ -467,11 +489,15 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
@override
DartType buildAliased(
LibraryBuilder library, TypeUse typeUse, ClassHierarchyBase? hierarchy) {
assert(hierarchy != null || isExplicit, "Cannot build $this.");
assert(
hierarchy != null || isExplicit, // Coverage-ignore(suite): Not run.
"Cannot build $this.");
DartType builtType = _buildAliasedInternal(library, typeUse, hierarchy);
if (library is SourceLibraryBuilder &&
!isRecordAccessAllowed(library) &&
// Coverage-ignore(suite): Not run.
isDartCoreRecord(builtType)) {
// Coverage-ignore-block(suite): Not run.
library.reportFeatureNotEnabled(
library.libraryFeatures.records,
fileUri ?? library.fileUri,
@ -484,7 +510,9 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
DartType _buildAliasedInternal(
LibraryBuilder library, TypeUse typeUse, ClassHierarchyBase? hierarchy) {
assert(declaration != null, "Declaration has not been resolved on $this.");
assert(
declaration != null, // Coverage-ignore(suite): Not run.
"Declaration has not been resolved on $this.");
return declaration!.buildAliasedType(
library,
nullabilityBuilder,
@ -502,6 +530,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
switch (declaration) {
case ClassBuilder():
if (declaration.isNullClass) {
// Coverage-ignore-block(suite): Not run.
if (!library.mayImplementRestrictedTypes) {
library.addProblem(
templateExtendingRestricted.withArguments(declaration.name),
@ -513,7 +542,9 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
DartType type = build(library, typeUse);
if (type is InterfaceType) {
return new Supertype(type.classNode, type.typeArguments);
} else if (type is FutureOrType) {
}
// Coverage-ignore(suite): Not run.
else if (type is FutureOrType) {
return new Supertype(declaration.cls, [type.typeArgument]);
} else if (type is NullType) {
return new Supertype(declaration.cls, []);
@ -524,6 +555,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
if (type is InterfaceType && type.nullability != Nullability.nullable) {
return new Supertype(type.classNode, type.typeArguments);
} else if (type is NullType) {
// Coverage-ignore-block(suite): Not run.
// Even though `Null` is disallowed as a supertype,
// [ClassHierarchyBuilder] still expects it to be built to the
// respective [InterfaceType] referencing the deprecated class.
@ -544,6 +576,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
return new Supertype(
(unaliasedDeclaration as ClassBuilder).cls, const <DartType>[]);
} else if (type is FutureOrType) {
// Coverage-ignore-block(suite): Not run.
// Even though `FutureOr` is disallowed as a supertype,
// [ClassHierarchyBuilder] still expects it to be built to the
// respective [InterfaceType] referencing the deprecated class. In
@ -580,6 +613,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
case ExtensionTypeDeclarationBuilder():
case ExtensionBuilder():
case BuiltinTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): How should we handle this case?
case OmittedTypeDeclarationBuilder():
}
@ -616,6 +650,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
case ExtensionBuilder():
case ExtensionTypeDeclarationBuilder():
case BuiltinTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): How should we handle this case?
case OmittedTypeDeclarationBuilder():
}
@ -757,6 +792,7 @@ class _ExplicitNamedTypeBuilder extends NamedTypeBuilderImpl {
}
}
// Coverage-ignore(suite): Not run.
/// A named type that needs type inference to be fully defined.
///
/// This occurs through macros where type arguments can be defined in terms of

View File

@ -38,6 +38,7 @@ class NeverTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
}
@override
// Coverage-ignore(suite): Not run.
DartType buildAliasedTypeWithBuiltArguments(
LibraryBuilder library,
Nullability nullability,

View File

@ -22,6 +22,7 @@ class NullTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
String get debugName => "NullTypeBuilder";
@override
// Coverage-ignore(suite): Not run.
DartType buildAliasedType(
LibraryBuilder library,
NullabilityBuilder nullabilityBuilder,
@ -35,6 +36,7 @@ class NullTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
}
@override
// Coverage-ignore(suite): Not run.
DartType buildAliasedTypeWithBuiltArguments(
LibraryBuilder library,
Nullability nullability,

View File

@ -26,6 +26,7 @@ abstract class OmittedTypeBuilderImpl extends OmittedTypeBuilder {
}
@override
// Coverage-ignore(suite): Not run.
int? get charOffset => null;
@override
@ -37,19 +38,24 @@ abstract class OmittedTypeBuilderImpl extends OmittedTypeBuilder {
}
@override
// Coverage-ignore(suite): Not run.
Uri? get fileUri => null;
@override
// Coverage-ignore(suite): Not run.
bool get isVoidType => false;
@override
// Coverage-ignore(suite): Not run.
TypeName? get typeName => null;
@override
// Coverage-ignore(suite): Not run.
NullabilityBuilder get nullabilityBuilder =>
const NullabilityBuilder.omitted();
@override
// Coverage-ignore(suite): Not run.
TypeBuilder withNullabilityBuilder(NullabilityBuilder nullabilityBuilder) {
return this;
}
@ -85,12 +91,14 @@ class ImplicitTypeBuilder extends OmittedTypeBuilderImpl {
String get debugName => 'ImplicitTypeBuilder';
@override
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) => buffer;
@override
bool get isExplicit => true;
@override
// Coverage-ignore(suite): Not run.
bool get hasType => true;
@override
@ -121,6 +129,7 @@ class InferableTypeBuilder extends OmittedTypeBuilderImpl
}
@override
// Coverage-ignore(suite): Not run.
DartType buildAliased(
LibraryBuilder library, TypeUse typeUse, ClassHierarchyBase? hierarchy) {
if (hierarchy != null) {
@ -140,12 +149,14 @@ class InferableTypeBuilder extends OmittedTypeBuilderImpl
Inferable? _inferable;
// Coverage-ignore(suite): Not run.
Inferable? get inferable => _inferable;
@override
void registerInferable(Inferable inferable) {
assert(
_inferable == null,
// Coverage-ignore(suite): Not run.
"Inferable $_inferable has already been register, "
"trying to register $inferable.");
_inferable = inferable;
@ -164,7 +175,9 @@ class InferableTypeBuilder extends OmittedTypeBuilderImpl
} else {
registerInferredType(const DynamicType());
}
assert(hasType, "No type computed for $this");
assert(
hasType, // Coverage-ignore(suite): Not run.
"No type computed for $this");
}
return type;
}
@ -173,6 +186,7 @@ class InferableTypeBuilder extends OmittedTypeBuilderImpl
String get debugName => 'InferredTypeBuilder';
@override
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) {
buffer.write('(inferable=');
buffer.write(inferable);
@ -181,6 +195,7 @@ class InferableTypeBuilder extends OmittedTypeBuilderImpl
}
}
// Coverage-ignore(suite): Not run.
/// A type defined in terms of another omitted type.
///
/// This is used in macro generated code to create type annotations from

View File

@ -4,6 +4,7 @@
part of 'declaration_builders.dart';
// Coverage-ignore(suite): Not run.
/// [TypeDeclaration] wrapper for an [OmittedTypeBuilder].
///
/// This is used in macro generated code to create type annotations from

View File

@ -62,6 +62,7 @@ class PrefixBuilder extends BuilderImpl {
exportScope.lookupLocalMember(name, setter: member.isSetter);
Builder result;
if (existing != null) {
// Coverage-ignore-block(suite): Not run.
result = parent.computeAmbiguousDeclaration(
name, existing, member, charOffset,
isExport: true);
@ -75,5 +76,6 @@ class PrefixBuilder extends BuilderImpl {
}
@override
// Coverage-ignore(suite): Not run.
String get fullNameForErrors => name;
}

View File

@ -63,7 +63,9 @@ abstract class RecordTypeBuilderImpl extends RecordTypeBuilder {
return isExplicit
? new _ExplicitRecordTypeBuilder(
positional, named, nullabilityBuilder, fileUri, charOffset)
: new _InferredRecordTypeBuilder(
:
// Coverage-ignore(suite): Not run.
new _InferredRecordTypeBuilder(
positional, named, nullabilityBuilder, fileUri, charOffset);
}
@ -71,12 +73,14 @@ abstract class RecordTypeBuilderImpl extends RecordTypeBuilder {
this.nullabilityBuilder, this.fileUri, this.charOffset);
@override
// Coverage-ignore(suite): Not run.
TypeName? get typeName => null;
@override
String get debugName => "Record";
@override
// Coverage-ignore(suite): Not run.
bool get isVoidType => false;
@override
@ -92,12 +96,14 @@ abstract class RecordTypeBuilderImpl extends RecordTypeBuilder {
}
field.type.printOn(buffer);
if (field.name != null) {
// Coverage-ignore-block(suite): Not run.
buffer.write(" ");
buffer.write(field.name);
}
}
}
if (namedFields != null) {
// Coverage-ignore-block(suite): Not run.
if (!isFirst) {
buffer.write(", ");
}
@ -131,7 +137,9 @@ abstract class RecordTypeBuilderImpl extends RecordTypeBuilder {
@override
DartType buildAliased(
LibraryBuilder library, TypeUse typeUse, ClassHierarchyBase? hierarchy) {
assert(hierarchy != null || isExplicit, "Cannot build $this.");
assert(
hierarchy != null || isExplicit, // Coverage-ignore(suite): Not run.
"Cannot build $this.");
const List<String> forbiddenObjectMemberNames = [
"noSuchMethod",
"toString",
@ -264,6 +272,7 @@ abstract class RecordTypeBuilderImpl extends RecordTypeBuilder {
}
@override
// Coverage-ignore(suite): Not run.
Supertype? buildSupertype(LibraryBuilder library, TypeUse typeUse) {
library.addProblem(
messageSupertypeIsFunction, charOffset, noLength, fileUri);
@ -271,6 +280,7 @@ abstract class RecordTypeBuilderImpl extends RecordTypeBuilder {
}
@override
// Coverage-ignore(suite): Not run.
Supertype? buildMixedInType(LibraryBuilder library) {
return buildSupertype(library, TypeUse.classWithType);
}
@ -290,6 +300,7 @@ abstract class RecordTypeBuilderImpl extends RecordTypeBuilder {
}
List<RecordTypeFieldBuilder>? clonedNamed;
if (namedFields != null) {
// Coverage-ignore-block(suite): Not run.
clonedNamed = new List<RecordTypeFieldBuilder>.generate(
namedFields!.length, (int i) {
RecordTypeFieldBuilder entry = namedFields![i];
@ -334,6 +345,7 @@ class _ExplicitRecordTypeBuilder extends RecordTypeBuilderImpl {
}
}
// Coverage-ignore(suite): Not run.
/// A record type that needs type inference to be fully defined.
///
/// This occurs through macros where field types can be defined in terms of

View File

@ -4,6 +4,7 @@
part of 'declaration_builders.dart';
// Coverage-ignore(suite): Not run.
abstract class TypeAliasBuilder implements TypeDeclarationBuilder {
TypeBuilder get type;
@ -227,6 +228,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
if (typeVariables != null) {
if (typeArguments == null ||
typeVariables.length != typeArguments.length) {
// Coverage-ignore-block(suite): Not run.
typeArguments = <TypeBuilder>[
for (NominalVariableBuilder typeVariable in typeVariables)
typeVariable.defaultType!
@ -243,6 +245,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
unboundTypeVariables: unboundTypeVariables);
}
_typeAliasesUsedInUnaliasing.addAll(usedTypeAliasBuilders);
// Coverage-ignore(suite): Not run.
case ExtensionBuilder():
unexpected(
"type", "${rhsTypeDeclaration.runtimeType}", charOffset, fileUri);
@ -349,6 +352,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
return _cachedUnaliasedDeclaration = this;
}
if (builders.contains(current)) {
// Coverage-ignore-block(suite): Not run.
// Cyclic type alias.
currentAliasBuilder.libraryBuilder.addProblem(
templateCyclicTypedef.withArguments(this.name),
@ -452,6 +456,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
}
if ((currentAliasBuilder.typeVariables?.length ?? 0) !=
currentTypeArguments.length) {
// Coverage-ignore-block(suite): Not run.
if (previousAliasBuilder != null) {
previousAliasBuilder.libraryBuilder.addProblem(
templateTypeArgumentMismatch.withArguments(
@ -492,6 +497,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
}
return declarationBuilder;
}
// Coverage-ignore(suite): Not run.
// This can be null, e.g, `substitutedBuilder is FunctionTypeBuilder`
return substitutedBuilder.declaration;
}
@ -532,7 +538,9 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
while (currentDeclarationBuilder is TypeAliasBuilder) {
TypeAliasBuilder currentAliasBuilder = currentDeclarationBuilder;
TypeBuilder nextTypeBuilder = currentAliasBuilder.type;
assert(nextTypeBuilder is NamedTypeBuilder,
assert(
nextTypeBuilder is NamedTypeBuilder,
// Coverage-ignore(suite): Not run.
"Expected NamedTypeBuilder, got '${nextTypeBuilder.runtimeType}'.");
NamedTypeBuilder namedNextTypeBuilder =
nextTypeBuilder as NamedTypeBuilder;
@ -540,6 +548,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
int index = 0;
if (currentTypeArguments == null || currentTypeArguments.isEmpty) {
if (currentAliasBuilder.typeVariables != null) {
// Coverage-ignore-block(suite): Not run.
List<TypeBuilder> defaultTypeArguments =
new List<TypeBuilder>.generate(
currentAliasBuilder.typeVariables!.length, (int i) {
@ -561,6 +570,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
namedNextTypeBuilder.declaration;
TypeBuilder substitutedBuilder = nextTypeBuilder.subst(substitution);
if (nextDeclarationBuilder is NominalVariableBuilder) {
// Coverage-ignore-block(suite): Not run.
// We have reached the end of the type alias chain which yields a
// type argument, which may become a type alias, possibly with its
// own similar chain.

View File

@ -360,9 +360,13 @@ sealed class TypeBuilder {
TypeBuilder result = substitute(this, substitution,
unboundTypes: unboundTypesInternal,
unboundTypeVariables: unboundTypeVariablesInternal);
assert(unboundTypes != null || unboundTypesInternal.isEmpty,
assert(
unboundTypes != null || unboundTypesInternal.isEmpty,
// Coverage-ignore(suite): Not run.
"Non-empty unbound types: $unboundTypesInternal.");
assert(unboundTypeVariables != null || unboundTypeVariablesInternal.isEmpty,
assert(
unboundTypeVariables != null || unboundTypeVariablesInternal.isEmpty,
// Coverage-ignore(suite): Not run.
"Non-empty unbound type variables: $unboundTypeVariables.");
return result;
}
@ -557,15 +561,19 @@ class PredefinedTypeName implements TypeName {
int get nameOffset => TreeNode.noOffset;
@override
// Coverage-ignore(suite): Not run.
int get nameLength => noLength;
@override
// Coverage-ignore(suite): Not run.
String get fullName => name;
@override
// Coverage-ignore(suite): Not run.
int get fullNameOffset => nameOffset;
@override
// Coverage-ignore(suite): Not run.
int get fullNameLength => noLength;
}
@ -584,6 +592,7 @@ class SyntheticTypeName implements TypeName {
SyntheticTypeName(this.name, this.nameOffset);
@override
// Coverage-ignore(suite): Not run.
int get nameLength => noLength;
@override
@ -593,9 +602,11 @@ class SyntheticTypeName implements TypeName {
String get fullName => name;
@override
// Coverage-ignore(suite): Not run.
int get fullNameOffset => nameOffset;
@override
// Coverage-ignore(suite): Not run.
int get fullNameLength => noLength;
}

View File

@ -4,6 +4,7 @@
part of 'declaration_builders.dart';
// Coverage-ignore(suite): Not run.
abstract class ITypeDeclarationBuilder implements Builder {
String get name;

View File

@ -51,6 +51,7 @@ sealed class TypeVariableBuilderBase extends TypeDeclarationBuilderImpl
String get debugName => "TypeVariableBuilderBase";
@override
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) {
buffer.write(name);
if (bound != null) {
@ -64,6 +65,7 @@ sealed class TypeVariableBuilderBase extends TypeDeclarationBuilderImpl
String toString() => "${printOn(new StringBuffer())}";
@override
// Coverage-ignore(suite): Not run.
TypeVariableBuilderBase get origin => actualOrigin ?? this;
Variance get variance;
@ -129,6 +131,7 @@ sealed class TypeVariableBuilderBase extends TypeDeclarationBuilderImpl
{Map<TypeVariableBuilderBase, TypeVariableTraversalState>?
typeVariablesTraversalState,
Map<TypeVariableBuilderBase, TypeVariableBuilderBase>? cycleElements}) {
// Coverage-ignore(suite): Not run.
typeVariablesTraversalState ??= {};
cycleElements ??= {};
@ -321,6 +324,7 @@ class NominalVariableBuilder extends TypeVariableBuilderBase {
int charOffset,
{required bool hasExplicitTypeArguments}) {
if (arguments != null) {
// Coverage-ignore-block(suite): Not run.
int charOffset = -1; // TODO(ahe): Provide these.
Uri? fileUri = null; // TODO(ahe): Provide these.
library.addProblem(
@ -343,6 +347,7 @@ class NominalVariableBuilder extends TypeVariableBuilderBase {
ClassHierarchyBase? hierarchy,
{required bool hasExplicitTypeArguments}) {
if (arguments != null) {
// Coverage-ignore-block(suite): Not run.
library.addProblem(
templateTypeArgumentsOnTypeVariable.withArguments(name),
charOffset,
@ -379,6 +384,7 @@ class NominalVariableBuilder extends TypeVariableBuilderBase {
library.registerPendingNullability(
this.fileUri!, this.charOffset, type);
} else {
// Coverage-ignore-block(suite): Not run.
library.addProblem(
templateInternalProblemUnfinishedTypeVariable.withArguments(
name, library.importUri),
@ -409,7 +415,8 @@ class NominalVariableBuilder extends TypeVariableBuilderBase {
const NullabilityBuilder.nullable(),
/* arguments = */ null,
TypeUse.typeParameterBound,
fileUri ?? missingUri,
fileUri ?? // Coverage-ignore(suite): Not run.
missingUri,
charOffset,
/* hierarchy = */ null,
hasExplicitTypeArguments: false);
@ -503,6 +510,7 @@ void _sortAllTypeVariablesTopologicallyFromRoot(
case ExtensionBuilder():
case BuiltinTypeDeclarationBuilder():
case InvalidTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): How should we handle this case?
case OmittedTypeDeclarationBuilder():
case null:
@ -538,6 +546,7 @@ void _sortAllTypeVariablesTopologicallyFromRoot(
internalDependents.add(field.type);
}
}
// Coverage-ignore(suite): Not run.
case OmittedTypeBuilder():
case FixedTypeBuilder():
case InvalidTypeBuilder():
@ -617,31 +626,38 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase {
Variance get variance => parameter.variance;
@override
// Coverage-ignore(suite): Not run.
void set variance(Variance value) {
parameter.variance = value;
}
@override
// Coverage-ignore(suite): Not run.
bool get hasUnsetParameterBound =>
identical(parameter.bound, StructuralParameter.unsetBoundSentinel);
@override
// Coverage-ignore(suite): Not run.
DartType get parameterBound => parameter.bound;
@override
// Coverage-ignore(suite): Not run.
void set parameterBound(DartType bound) {
parameter.bound = bound;
}
@override
// Coverage-ignore(suite): Not run.
Nullability get nullabilityFromParameterBound =>
StructuralParameterType.computeNullabilityFromBound(parameter);
@override
// Coverage-ignore(suite): Not run.
bool get hasUnsetParameterDefaultType => identical(
parameter.defaultType, StructuralParameter.unsetDefaultTypeSentinel);
@override
// Coverage-ignore(suite): Not run.
void set parameterDefaultType(DartType defaultType) {
parameter.defaultType = defaultType;
}
@ -655,6 +671,7 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase {
int get hashCode => parameter.hashCode;
@override
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) {
buffer.write(name);
if (bound != null) {
@ -684,6 +701,7 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase {
ClassHierarchyBase? hierarchy,
{required bool hasExplicitTypeArguments}) {
if (arguments != null) {
// Coverage-ignore-block(suite): Not run.
library.addProblem(
templateTypeArgumentsOnTypeVariable.withArguments(name),
charOffset,
@ -712,6 +730,7 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase {
StructuralParameterType.computeNullabilityFromBound(parameter);
}
} else {
// Coverage-ignore-block(suite): Not run.
nullability = nullabilityBuilder.build();
}
StructuralParameterType type = buildAliasedTypeWithBuiltArguments(
@ -722,6 +741,7 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase {
library.registerPendingFunctionTypeNullability(
this.fileUri!, this.charOffset, type);
} else {
// Coverage-ignore-block(suite): Not run.
library.addProblem(
templateInternalProblemUnfinishedTypeVariable.withArguments(
name, library.importUri),
@ -743,6 +763,7 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase {
int charOffset,
{required bool hasExplicitTypeArguments}) {
if (arguments != null) {
// Coverage-ignore-block(suite): Not run.
int charOffset = -1; // TODO(ahe): Provide these.
Uri? fileUri = null; // TODO(ahe): Provide these.
library.addProblem(
@ -763,7 +784,8 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase {
const NullabilityBuilder.nullable(),
/* arguments = */ null,
TypeUse.typeParameterBound,
fileUri ?? missingUri,
fileUri ?? // Coverage-ignore(suite): Not run.
missingUri,
charOffset,
/* hierarchy = */ null,
hasExplicitTypeArguments: false);
@ -786,6 +808,7 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase {
}
@override
// Coverage-ignore(suite): Not run.
void applyAugmentation(covariant StructuralVariableBuilder augmentation) {
augmentation.actualOrigin = this;
}

View File

@ -159,7 +159,8 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
@override
void visitStructuralParameterType(StructuralParameterType node) {
result.add(node.parameter.name ?? "T#${identityHashCode(node.parameter)}");
result.add(node.parameter.name ?? // Coverage-ignore(suite): Not run.
"T#${identityHashCode(node.parameter)}");
addNullability(node.declaredNullability);
}
@ -203,6 +204,7 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
i < node.positionalParameters.length;
i++) {
if (!first) {
// Coverage-ignore-block(suite): Not run.
result.add(", ");
}
node.positionalParameters[i].accept(this);
@ -216,6 +218,7 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
first = true;
for (int i = 0; i < node.namedParameters.length; i++) {
if (!first) {
// Coverage-ignore-block(suite): Not run.
result.add(", ");
}
node.namedParameters[i].type.accept(this);
@ -330,6 +333,7 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
}
@override
// Coverage-ignore(suite): Not run.
void visitSymbolConstant(SymbolConstant node) {
String text = node.libraryReference != null
? '#${node.libraryReference!.asLibrary.importUri}::${node.name}'
@ -374,6 +378,7 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
}
@override
// Coverage-ignore(suite): Not run.
void visitSetConstant(SetConstant node) {
result.add("<");
node.typeArgument.accept(this);
@ -397,6 +402,7 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
bool first = true;
for (ConstantMapEntry entry in node.entries) {
if (!first) {
// Coverage-ignore-block(suite): Not run.
result.add(", ");
}
entry.key.accept(this);
@ -460,6 +466,7 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
}
@override
// Coverage-ignore(suite): Not run.
void visitRedirectingFactoryTearOffConstant(
RedirectingFactoryTearOffConstant node) {
Member constructor = node.target;
@ -489,6 +496,7 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
}
@override
// Coverage-ignore(suite): Not run.
void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
node.tearOffConstant.accept(this);
if (node.parameters.isNotEmpty) {
@ -583,7 +591,9 @@ class LabeledNode {
}
Message message = (importUri == fileUri || importUri.isScheme('dart'))
? templateTypeOrigin.withArguments(toString(), importUri)
: templateTypeOriginWithFileUri.withArguments(
:
// Coverage-ignore(suite): Not run.
templateTypeOriginWithFileUri.withArguments(
toString(), importUri, fileUri);
return "\n - " + message.problemMessage;
}

View File

@ -25,6 +25,7 @@ String? computePlatformDillName(
// DDC is always compiled against the outline so we use it here by
// default.
return 'ddc_outline.dill';
// Coverage-ignore(suite): Not run.
//TODO(johnniwinther): Support using the full dill.
//return 'ddc_platform.dill';
case NnbdMode.Weak:
@ -38,13 +39,16 @@ String? computePlatformDillName(
switch (nnbdMode) {
case NnbdMode.Strong:
return 'dart2js_platform.dill';
// Coverage-ignore(suite): Not run.
case NnbdMode.Weak:
return 'dart2js_platform_unsound.dill';
}
case 'dart2js_server':
switch (nnbdMode) {
// Coverage-ignore(suite): Not run.
case NnbdMode.Strong:
return 'dart2js_server_platform.dill';
// Coverage-ignore(suite): Not run.
case NnbdMode.Weak:
return 'dart2js_server_platform_unsound.dill';
}
@ -58,12 +62,14 @@ String? computePlatformDillName(
switch (nnbdMode) {
case NnbdMode.Strong:
return 'dart2wasm_outline.dill';
// Coverage-ignore(suite): Not run.
//TODO(johnniwinther): Support using the full dill.
//return 'dart2wasm_platform.dill';
case NnbdMode.Weak:
break;
}
break;
// Coverage-ignore(suite): Not run.
case 'wasm_js_compatibility':
switch (nnbdMode) {
case NnbdMode.Strong:
@ -77,6 +83,7 @@ String? computePlatformDillName(
default:
break;
}
// Coverage-ignore-block(suite): Not run.
onError();
return null;
}
@ -114,15 +121,19 @@ Uri translateSdk(Uri uri) {
ProcessedOptions options = context.options;
sdkRoot = options.sdkRoot;
if (sdkRoot == null) {
sdkRoot = options.librariesSpecificationUri?.resolve("../");
sdkRoot = options.librariesSpecificationUri
// Coverage-ignore(suite): Not run.
?.resolve("../");
if (sdkRoot != null) {
// Coverage-ignore-block(suite): Not run.
if (!isExistingFile(sdkRoot.resolve("lib/libraries.json"))) {
sdkRoot = null;
}
}
}
if (sdkRoot == null) {
sdkRoot = (options.sdkSummary ?? computePlatformBinariesLocation())
sdkRoot = (options.sdkSummary ?? // Coverage-ignore(suite): Not run.
computePlatformBinariesLocation())
.resolve("../../");
if (!isExistingFile(sdkRoot.resolve("lib/libraries.json"))) {
if (isExistingFile(sdkRoot.resolve("sdk/lib/libraries.json"))) {
@ -132,6 +143,7 @@ Uri translateSdk(Uri uri) {
}
}
}
// Coverage-ignore(suite): Not run.
sdkRoot ??= Uri.parse("org-dartlang-sdk:///sdk/");
context.cachedSdkRoot = sdkRoot;
}
@ -140,6 +152,7 @@ Uri translateSdk(Uri uri) {
Map<Uri, Source> uriToSource = CompilerContext.current.uriToSource;
Source source = uriToSource[uri]!;
if (source.source.isEmpty) {
// Coverage-ignore-block(suite): Not run.
uriToSource[uri] = new Source(
source.lineStarts,
new File.fromUri(candidate).readAsBytesSync(),

View File

@ -25,6 +25,7 @@ mixin DillClassMemberAccessMixin implements ClassMemberAccess {
ConstructorScope get constructorScope;
@override
// Coverage-ignore(suite): Not run.
Iterator<T> fullConstructorIterator<T extends MemberBuilder>() =>
constructorScope.filteredIterator<T>(
includeAugmentations: true, includeDuplicates: false);
@ -40,6 +41,7 @@ mixin DillClassMemberAccessMixin implements ClassMemberAccess {
includeAugmentations: true, includeDuplicates: false);
@override
// Coverage-ignore(suite): Not run.
NameIterator<T> fullMemberNameIterator<T extends Builder>() =>
scope.filteredNameIterator<T>(
includeAugmentations: true, includeDuplicates: false);
@ -129,6 +131,7 @@ class DillClassBuilder extends ClassBuilderImpl
}
@override
// Coverage-ignore(suite): Not run.
List<TypeBuilder>? get onTypes => null;
void addField(Field field) {
@ -154,6 +157,7 @@ class DillClassBuilder extends ClassBuilderImpl
String name = procedure.name.text;
switch (procedure.kind) {
case ProcedureKind.Factory:
// Coverage-ignore(suite): Not run.
throw new UnsupportedError("Use addFactory for adding factories");
case ProcedureKind.Setter:
scope.addLocalMember(name, new DillSetterBuilder(procedure, this),
@ -204,6 +208,7 @@ class DillClassBuilder extends ClassBuilderImpl
bool get isMixinApplication => cls.isMixinApplication;
@override
// Coverage-ignore(suite): Not run.
bool get declaresConstConstructor => cls.hasConstConstructor;
@override
@ -212,6 +217,7 @@ class DillClassBuilder extends ClassBuilderImpl
}
@override
// Coverage-ignore(suite): Not run.
void set mixedInTypeBuilder(TypeBuilder? mixin) {
unimplemented("mixedInType=", -1, null);
}

View File

@ -48,7 +48,9 @@ class DillExtensionBuilder extends ExtensionBuilderImpl
} else {
Procedure procedure = descriptor.memberReference.asProcedure;
Procedure? tearOff = descriptor.tearOffReference?.asProcedure;
assert(tearOff != null, "No tear found for ${descriptor}");
assert(
tearOff != null, // Coverage-ignore(suite): Not run.
"No tear found for ${descriptor}");
scope.addLocalMember(
name.text,
new DillExtensionInstanceMethodBuilder(
@ -94,11 +96,13 @@ class DillExtensionBuilder extends ExtensionBuilderImpl
}
@override
// Coverage-ignore(suite): Not run.
TypeBuilder get onType {
return _onType ??=
libraryBuilder.loader.computeTypeBuilder(extension.onType);
}
@override
// Coverage-ignore(suite): Not run.
List<TypeParameter> get typeParameterNodes => extension.typeParameters;
}

View File

@ -17,9 +17,11 @@ abstract class DillExtensionMemberBuilder extends DillMemberBuilder {
bool get isStatic => _descriptor.isStatic;
@override
// Coverage-ignore(suite): Not run.
bool get isExternal => member.isExternal;
@override
// Coverage-ignore(suite): Not run.
String get name => _descriptor.name.text;
@override
@ -47,6 +49,7 @@ class DillExtensionFieldBuilder extends DillExtensionMemberBuilder {
: super(field, descriptor, parent);
@override
// Coverage-ignore(suite): Not run.
Member get member => field;
@override
@ -56,6 +59,7 @@ class DillExtensionFieldBuilder extends DillExtensionMemberBuilder {
Member? get writeTarget => isAssignable ? field : null;
@override
// Coverage-ignore(suite): Not run.
Member get invokeTarget => field;
@override
@ -74,6 +78,7 @@ class DillExtensionSetterBuilder extends DillExtensionMemberBuilder {
super(procedure, descriptor, parent);
@override
// Coverage-ignore(suite): Not run.
Member get member => procedure;
@override
@ -83,6 +88,7 @@ class DillExtensionSetterBuilder extends DillExtensionMemberBuilder {
Member get writeTarget => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get invokeTarget => null;
}
@ -95,12 +101,14 @@ class DillExtensionGetterBuilder extends DillExtensionMemberBuilder {
super(procedure, descriptor, parent);
@override
// Coverage-ignore(suite): Not run.
Member get member => procedure;
@override
Member get readTarget => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
@ -122,6 +130,7 @@ class DillExtensionOperatorBuilder extends DillExtensionMemberBuilder {
Member? get readTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
@ -138,15 +147,18 @@ class DillExtensionStaticMethodBuilder extends DillExtensionMemberBuilder {
super(procedure, descriptor, parent);
@override
// Coverage-ignore(suite): Not run.
Member get member => procedure;
@override
Member get readTarget => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member get invokeTarget => procedure;
}
@ -165,15 +177,18 @@ class DillExtensionInstanceMethodBuilder extends DillExtensionMemberBuilder {
super(procedure, descriptor, parent);
@override
// Coverage-ignore(suite): Not run.
Member get member => procedure;
@override
// Coverage-ignore(suite): Not run.
Iterable<Member> get exportedMembers => [procedure, _extensionTearOff];
@override
Member get readTarget => _extensionTearOff;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override

View File

@ -48,10 +48,12 @@ class DillExtensionTypeDeclarationBuilder
String name = procedure.name.text;
switch (procedure.kind) {
case ProcedureKind.Factory:
// Coverage-ignore(suite): Not run.
throw new UnsupportedError(
"Unexpected procedure kind in extension type declaration: "
"$procedure (${procedure.kind}).");
case ProcedureKind.Setter:
// Coverage-ignore(suite): Not run.
scope.addLocalMember(name, new DillSetterBuilder(procedure, this),
setter: true);
break;
@ -84,7 +86,9 @@ class DillExtensionTypeDeclarationBuilder
} else {
Procedure procedure = descriptor.memberReference.asProcedure;
Procedure? tearOff = descriptor.tearOffReference?.asProcedure;
assert(tearOff != null, "No tear found for ${descriptor}");
assert(
tearOff != null, // Coverage-ignore(suite): Not run.
"No tear found for ${descriptor}");
scope.addLocalMember(
name.text,
new DillExtensionTypeInstanceMethodBuilder(

View File

@ -19,6 +19,7 @@ abstract class DillExtensionTypeMemberBuilder extends DillMemberBuilder {
bool get isStatic => _descriptor.isStatic;
@override
// Coverage-ignore(suite): Not run.
bool get isExternal => member.isExternal;
@override
@ -36,8 +37,11 @@ abstract class DillExtensionTypeMemberBuilder extends DillMemberBuilder {
case ExtensionTypeMemberKind.Setter:
return ProcedureKind.Setter;
case ExtensionTypeMemberKind.Field:
// Coverage-ignore(suite): Not run.
case ExtensionTypeMemberKind.Constructor:
// Coverage-ignore(suite): Not run.
case ExtensionTypeMemberKind.Factory:
// Coverage-ignore(suite): Not run.
case ExtensionTypeMemberKind.RedirectingFactory:
}
return null;
@ -67,8 +71,10 @@ abstract class DillExtensionTypeMemberBuilder extends DillMemberBuilder {
case ExtensionTypeMemberKind.Operator:
case ExtensionTypeMemberKind.Setter:
case ExtensionTypeMemberKind.Field:
// Coverage-ignore(suite): Not run.
case ExtensionTypeMemberKind.Constructor:
return false;
// Coverage-ignore(suite): Not run.
case ExtensionTypeMemberKind.Factory:
case ExtensionTypeMemberKind.RedirectingFactory:
return true;
@ -96,6 +102,7 @@ class DillExtensionTypeFieldBuilder extends DillExtensionTypeMemberBuilder {
Member? get writeTarget => isAssignable ? field : null;
@override
// Coverage-ignore(suite): Not run.
Member get invokeTarget => field;
@override
@ -141,6 +148,7 @@ class DillExtensionTypeGetterBuilder extends DillExtensionTypeMemberBuilder {
Member get readTarget => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
@ -162,6 +170,7 @@ class DillExtensionTypeOperatorBuilder extends DillExtensionTypeMemberBuilder {
Member? get readTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
@ -185,9 +194,11 @@ class DillExtensionTypeStaticMethodBuilder
Member get readTarget => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member get invokeTarget => procedure;
}
@ -210,12 +221,14 @@ class DillExtensionTypeInstanceMethodBuilder
Member get member => procedure;
@override
// Coverage-ignore(suite): Not run.
Iterable<Member> get exportedMembers => [procedure, _extensionTearOff];
@override
Member get readTarget => _extensionTearOff;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
@ -241,9 +254,12 @@ class DillExtensionTypeConstructorBuilder extends DillExtensionTypeMemberBuilder
Procedure get member => constructor;
@override
Member get readTarget => _constructorTearOff ?? constructor;
Member get readTarget =>
_constructorTearOff ?? // Coverage-ignore(suite): Not run.
constructor;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
@ -262,9 +278,12 @@ class DillExtensionTypeFactoryBuilder extends DillExtensionTypeMemberBuilder {
Member get member => _procedure;
@override
Member? get readTarget => _factoryTearOff ?? _procedure;
Member? get readTarget =>
_factoryTearOff ?? // Coverage-ignore(suite): Not run.
_procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override

View File

@ -67,6 +67,7 @@ class DillCompilationUnitImpl extends DillCompilationUnit {
}
@override
// Coverage-ignore(suite): Not run.
void addProblem(Message message, int charOffset, int length, Uri? fileUri,
{bool wasHandled = false,
List<LocatedMessage>? context,
@ -174,6 +175,7 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
throw new StateError("Not ready to build.");
}
if (isBuilt && !isBuiltAndMarked) {
// Coverage-ignore-block(suite): Not run.
isBuiltAndMarked = true;
finalizeExports();
return;
@ -223,6 +225,7 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
Uri get fileUri => library.fileUri;
@override
// Coverage-ignore(suite): Not run.
String? get name => library.name;
@override
@ -299,6 +302,7 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
StringConstant string = constantExpression.constant as StringConstant;
stringValue = string.value;
} else {
// Coverage-ignore-block(suite): Not run.
StringLiteral string = field.initializer as StringLiteral;
stringValue = string.value;
}
@ -317,11 +321,13 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
_addBuilder(name, new DillGetterBuilder(member, this));
break;
case ProcedureKind.Operator:
// Coverage-ignore(suite): Not run.
_addBuilder(name, new DillOperatorBuilder(member, this));
break;
case ProcedureKind.Method:
_addBuilder(name, new DillMethodBuilder(member, this));
break;
// Coverage-ignore(suite): Not run.
case ProcedureKind.Factory:
throw new UnsupportedError(
"Unexpected library procedure ${member.kind} for ${member}");
@ -362,6 +368,7 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
}
@override
// Coverage-ignore(suite): Not run.
Builder computeAmbiguousDeclaration(
String name, Builder builder, Builder other, int charOffset,
{bool isExport = false, bool isImport = false}) {
@ -379,6 +386,7 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
}
@override
// Coverage-ignore(suite): Not run.
String get fullNameForErrors {
return library.name ?? "<library '${library.fileUri}'>";
}
@ -397,11 +405,14 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
Builder declaration;
if (messageText == exportDynamicSentinel) {
assert(
name == 'dynamic', "Unexpected export name for 'dynamic': '$name'");
name == 'dynamic', // Coverage-ignore(suite): Not run.
"Unexpected export name for 'dynamic': '$name'");
declaration = loader.coreLibrary.exportScope
.lookupLocalMember(name, setter: false)!;
} else if (messageText == exportNeverSentinel) {
assert(name == 'Never', "Unexpected export name for 'Never': '$name'");
assert(
name == 'Never', // Coverage-ignore(suite): Not run.
"Unexpected export name for 'Never': '$name'");
declaration = loader.coreLibrary.exportScope
.lookupLocalMember(name, setter: false)!;
} else {
@ -422,6 +433,7 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
Builder declaration;
String name;
if (sourceBuildersMap?.containsKey(reference) == true) {
// Coverage-ignore-block(suite): Not run.
declaration = sourceBuildersMap![reference]!;
if (declaration is TypeDeclarationBuilder) {
name = declaration.name;
@ -492,18 +504,21 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
node == declaration.extension) ||
(declaration is ExtensionTypeDeclarationBuilder &&
node == declaration.extensionTypeDeclaration),
// Coverage-ignore(suite): Not run.
"Unexpected declaration ${declaration} (${declaration.runtimeType}) "
"for node ${node} (${node.runtimeType}).");
}
}
@override
// Coverage-ignore(suite): Not run.
Iterator<T> fullMemberIterator<T extends Builder>() {
return scope.filteredIterator<T>(
includeDuplicates: false, includeAugmentations: false);
}
@override
// Coverage-ignore(suite): Not run.
NameIterator<T> fullMemberNameIterator<T extends Builder>() {
return scope.filteredNameIterator(
includeDuplicates: false, includeAugmentations: false);

View File

@ -106,7 +106,9 @@ class DillLoader extends Loader {
DillLibraryBuilder? libraryBuilder = _builders[uri];
if (libraryBuilder == null) {
libraryBuilder = _knownLibraryBuilders.remove(uri);
assert(libraryBuilder != null, "No library found for $uri.");
assert(
libraryBuilder != null, // Coverage-ignore(suite): Not run.
"No library found for $uri.");
_builders[uri] = libraryBuilder!;
assert(libraryBuilder.loader == this);
if (uri.isScheme("dart")) {
@ -136,6 +138,7 @@ class DillLoader extends Loader {
!accessor.isPart &&
!target.backendTarget
.allowPlatformPrivateLibraryAccess(accessor.importUri, uri)) {
// Coverage-ignore-block(suite): Not run.
accessor.addProblem(messagePlatformPrivateLibraryAccess, charOffset,
noLength, accessor.fileUri);
}
@ -145,6 +148,7 @@ class DillLoader extends Loader {
void _ensureCoreLibrary() {
if (_coreLibrary == null) {
// Coverage-ignore-block(suite): Not run.
read(Uri.parse("dart:core"), 0, accessor: first);
// TODO(askesc): When all backends support set literals, we no longer
// need to index dart:collection, as it is only needed for desugaring of
@ -164,7 +168,9 @@ class DillLoader extends Loader {
}
void _logSummary(Template<SummaryTemplate> template) {
ticker.log((Duration elapsed, Duration sinceStart) {
ticker.log(
// Coverage-ignore(suite): Not run.
(Duration elapsed, Duration sinceStart) {
int libraryCount = 0;
for (DillLibraryBuilder library in libraryBuilders) {
assert(library.loader == this);
@ -237,14 +243,23 @@ severity: $severity
target.context.report(
fileUri != null
? message.withLocation(fileUri, charOffset, length)
: message.withoutLocation(),
:
// Coverage-ignore(suite): Not run.
message.withoutLocation(),
severity,
context: context,
involvedFiles: involvedFiles);
if (severity == Severity.error) {
(wasHandled ? handledErrors : unhandledErrors).add(fileUri != null
? message.withLocation(fileUri, charOffset, length)
: message.withoutLocation());
(wasHandled
?
// Coverage-ignore(suite): Not run.
handledErrors
: unhandledErrors)
.add(fileUri != null
? message.withLocation(fileUri, charOffset, length)
:
// Coverage-ignore(suite): Not run.
message.withoutLocation());
}
FormattedMessage formattedMessage = target.createFormattedMessage(
message, charOffset, length, fileUri, context, severity,
@ -264,7 +279,9 @@ severity: $severity
for (int i = 0; i < componentLibraries.length; i++) {
Library library = componentLibraries[i];
Uri uri = library.importUri;
if (filter == null || filter(library.importUri)) {
if (filter == null ||
// Coverage-ignore(suite): Not run.
filter(library.importUri)) {
libraries.add(library);
registerKnownLibrary(library);
requestedLibraries.add(uri);
@ -340,6 +357,7 @@ severity: $severity
return _typeBuilderComputer.visit(type);
}
// Coverage-ignore(suite): Not run.
bool containsLibraryBuilder(Uri importUri) =>
_builders.containsKey(importUri);
@ -348,8 +366,10 @@ severity: $severity
Iterable<DillLibraryBuilder> get libraryBuilders => _builders.values;
// Coverage-ignore(suite): Not run.
Iterable<Uri> get libraryImportUris => _builders.keys;
// Coverage-ignore(suite): Not run.
void registerLibraryBuilder(DillLibraryBuilder libraryBuilder) {
Uri importUri = libraryBuilder.importUri;
libraryBuilder.loader = this;

View File

@ -57,7 +57,11 @@ abstract class DillMemberBuilder extends MemberBuilderImpl {
@override
ProcedureKind? get kind {
final Member member = this.member;
return member is Procedure ? member.kind : null;
return member is Procedure
?
// Coverage-ignore(suite): Not run.
member.kind
: null;
}
@override
@ -82,6 +86,7 @@ abstract class DillMemberBuilder extends MemberBuilderImpl {
}
@override
// Coverage-ignore(suite): Not run.
bool get isAssignable => false;
List<ClassMember>? _localMembers;
@ -105,6 +110,7 @@ abstract class DillMemberBuilder extends MemberBuilderImpl {
: const <ClassMember>[];
@override
// Coverage-ignore(suite): Not run.
Iterable<Annotatable> get annotatables => [member];
}
@ -124,6 +130,7 @@ class DillFieldBuilder extends DillMemberBuilder implements FieldBuilder {
Member? get writeTarget => isAssignable ? field : null;
@override
// Coverage-ignore(suite): Not run.
Member? get invokeTarget => field;
@override
@ -160,9 +167,11 @@ class DillGetterBuilder extends DillProcedureBuilder {
Member get readTarget => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member get invokeTarget => procedure;
}
@ -175,12 +184,14 @@ class DillSetterBuilder extends DillProcedureBuilder {
Member get member => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get readTarget => null;
@override
Member get writeTarget => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get invokeTarget => null;
}
@ -196,9 +207,11 @@ class DillMethodBuilder extends DillProcedureBuilder {
Member get readTarget => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member get invokeTarget => procedure;
}
@ -211,12 +224,15 @@ class DillOperatorBuilder extends DillProcedureBuilder {
Member get member => procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get readTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
// Coverage-ignore(suite): Not run.
Member get invokeTarget => procedure;
}
@ -233,6 +249,7 @@ class DillFactoryBuilder extends DillProcedureBuilder {
Member? get readTarget => _factoryTearOff ?? procedure;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
@ -258,6 +275,7 @@ class DillConstructorBuilder extends DillMemberBuilder
Member get readTarget => _constructorTearOff ?? constructor;
@override
// Coverage-ignore(suite): Not run.
Member? get writeTarget => null;
@override
@ -319,11 +337,13 @@ class DillClassMember extends BuilderClassMember {
}
@override
// Coverage-ignore(suite): Not run.
void inferType(ClassMembersBuilder hierarchy) {
// Do nothing; this is only for source members.
}
@override
// Coverage-ignore(suite): Not run.
void registerOverrideDependency(Set<ClassMember> overriddenMembers) {
// Do nothing; this is only for source members.
}
@ -363,6 +383,7 @@ int computeModifiers(Member member) {
} else if (member is Constructor) {
modifier |= member.isConst ? constMask : 0;
} else {
// Coverage-ignore-block(suite): Not run.
dynamic parent = member.parent;
unhandled("${member.runtimeType}", "computeModifiers", member.fileOffset,
Uri.base.resolve(parent.fileUri));

View File

@ -43,6 +43,7 @@ class DillTarget {
accessor: loader.coreLibraryCompilationUnit);
}
if (context.compilingPlatform) {
// Coverage-ignore-block(suite): Not run.
for (String uri in backendTarget.extraRequiredLibrariesPlatform) {
loader.read(Uri.parse(uri), 0,
accessor: loader.coreLibraryCompilationUnit);
@ -62,7 +63,9 @@ class DillTarget {
return processedOptions.format(
fileUri != null
? message.withLocation(fileUri, charOffset, length)
: message.withoutLocation(),
:
// Coverage-ignore(suite): Not run.
message.withoutLocation(),
severity,
messageContext,
involvedFiles: involvedFiles);
@ -70,12 +73,18 @@ class DillTarget {
void buildOutlines({bool suppressFinalizationErrors = false}) {
if (loader.libraries.isNotEmpty) {
benchmarker?.enterPhase(BenchmarkPhases.dill_buildOutlines);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.dill_buildOutlines);
loader.buildOutlines();
benchmarker?.enterPhase(BenchmarkPhases.dill_finalizeExports);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.dill_finalizeExports);
loader.finalizeExports(
suppressFinalizationErrors: suppressFinalizationErrors);
benchmarker?.enterPhase(BenchmarkPhases.unknownDillTarget);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.unknownDillTarget);
}
isLoaded = true;
}

View File

@ -32,6 +32,7 @@ class DillTypeAliasBuilder extends TypeAliasBuilderImpl {
: super(null, typedef.name, parent, typedef.fileOffset);
@override
// Coverage-ignore(suite): Not run.
List<MetadataBuilder> get metadata {
return unimplemented("metadata", -1, null);
}
@ -46,6 +47,7 @@ class DillTypeAliasBuilder extends TypeAliasBuilderImpl {
}
@override
// Coverage-ignore(suite): Not run.
bool get fromDill => true;
@override

View File

@ -1,3 +1,4 @@
// Coverage-ignore(suite): Not run.
// Copyright (c) 2022, 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.
@ -91,6 +92,7 @@ class Benchmarker {
}
}
// Coverage-ignore(suite): Not run.
class PhaseTiming {
final BenchmarkPhases phase;
int _runtime = 0;
@ -125,6 +127,7 @@ class PhaseTiming {
}
}
// Coverage-ignore(suite): Not run.
class SubdivideTiming {
final BenchmarkSubdivides phase;
int _runtime = 0;

View File

@ -495,6 +495,7 @@ class BodyBuilder extends StackListenerImpl
LibraryFeatures get libraryFeatures => libraryBuilder.libraryFeatures;
@override
// Coverage-ignore(suite): Not run.
bool get isDartLibrary =>
libraryBuilder.origin.importUri.isScheme("dart") ||
uri.isScheme("org-dartlang-sdk");
@ -547,6 +548,7 @@ class BodyBuilder extends StackListenerImpl
]));
assert(
expectedScopeKinds == null || expectedScopeKinds.contains(scope.kind),
// Coverage-ignore(suite): Not run.
"Expected the current scope to be one of the kinds "
"${expectedScopeKinds.map((k) => "'${k}'").join(", ")}, "
"but got '${scope.kind}'.");
@ -772,7 +774,9 @@ class BodyBuilder extends StackListenerImpl
return forest.createConstantPattern(node.buildSimpleRead());
} else if (node is Expression) {
return forest.createConstantPattern(node);
} else if (node is ProblemBuilder) {
}
// Coverage-ignore(suite): Not run.
else if (node is ProblemBuilder) {
// ignore: unused_local_variable
Expression expression =
buildProblem(node.message, node.charOffset, noLength);
@ -834,6 +838,7 @@ class BodyBuilder extends StackListenerImpl
switchScope!.unclaimedForwardDeclarations!
.forEach((String name, JumpTarget declaration) {
if (outerSwitchScope == null) {
// Coverage-ignore-block(suite): Not run.
for (Statement statement in declaration.users) {
statement.parent!.replaceChild(
statement,
@ -860,6 +865,7 @@ class BodyBuilder extends StackListenerImpl
buildProblem(message, offset, name.length, context: context)
..parent = variable;
} else {
// Coverage-ignore-block(suite): Not run.
variable.initializer = wrapInLocatedProblem(
variable.initializer!, message.withLocation(uri, offset, name.length),
context: context)
@ -965,6 +971,7 @@ class BodyBuilder extends StackListenerImpl
pop(); // Type arguments (ignored, already reported by parser).
Object? expression = pop();
if (expression is Identifier) {
// Coverage-ignore-block(suite): Not run.
Identifier identifier = expression;
expression = new UnresolvedNameGenerator(this, identifier.token,
new Name(identifier.name, libraryBuilder.nameOrigin),
@ -987,7 +994,9 @@ class BodyBuilder extends StackListenerImpl
// TODO(johnniwinther): Stop using the type of the generator here.
// Ask a property instead.
(expression is! ReadOnlyAccessGenerator ||
// Coverage-ignore(suite): Not run.
expression is TypeUseGenerator ||
// Coverage-ignore(suite): Not run.
expression is ParenthesizedExpressionGenerator)) {
Expression value = toValue(expression);
push(wrapInProblem(value, fasta.messageExpressionNotMetadata,
@ -1153,6 +1162,7 @@ class BodyBuilder extends StackListenerImpl
if (hasDelayedActions) {
assert(
delayedActionPerformers != null,
// Coverage-ignore(suite): Not run.
"Body builder has delayed actions that cannot be performed: "
"${[
...delayedRedirectingFactoryInvocations,
@ -1195,6 +1205,7 @@ class BodyBuilder extends StackListenerImpl
if (formal.isInitializingFormal) {
List<Initializer> initializers;
if (_context.isExternalConstructor) {
// Coverage-ignore-block(suite): Not run.
initializers = <Initializer>[
buildInvalidInitializer(
buildProblem(
@ -1280,6 +1291,7 @@ class BodyBuilder extends StackListenerImpl
} else if (node is Generator) {
initializers = node.buildFieldInitializer(initializedFields);
} else if (node is ConstructorInvocation) {
// Coverage-ignore-block(suite): Not run.
initializers = <Initializer>[
// TODO(jensj): Does this offset make sense?
buildSuperInitializer(
@ -1368,6 +1380,7 @@ class BodyBuilder extends StackListenerImpl
}
if (inferInitializer) {
if (!parameter.initializerWasInferred) {
// Coverage-ignore(suite): Not run.
initializer ??= forest.createNullLiteral(
// TODO(ahe): Should store: originParameter.fileOffset
// https://github.com/dart-lang/sdk/issues/32289
@ -1425,7 +1438,9 @@ class BodyBuilder extends StackListenerImpl
formals!.parameters!.length != 1 ||
formals.parameters!.single.isOptionalPositional) {
int charOffset = formals?.charOffset ??
// Coverage-ignore(suite): Not run.
body?.fileOffset ??
// Coverage-ignore(suite): Not run.
_context.memberCharOffset;
if (body == null) {
body = new EmptyStatement()..fileOffset = charOffset;
@ -1536,6 +1551,7 @@ class BodyBuilder extends StackListenerImpl
Library ensureLibraryLoaded = member.enclosingLibrary;
LibraryBuilder? builder = libraryBuilder.loader
.lookupLoadedLibraryBuilder(ensureLibraryLoaded.importUri) ??
// Coverage-ignore(suite): Not run.
libraryBuilder.loader.target.dillTarget.loader
.lookupLibraryBuilder(ensureLibraryLoaded.importUri);
if (builder is DillLibraryBuilder) {
@ -1572,6 +1588,7 @@ class BodyBuilder extends StackListenerImpl
return sub.substituteType(nextTypeArguments[i]);
}, growable: true);
} else {
// Coverage-ignore-block(suite): Not run.
typeArguments = <DartType>[];
}
target = nextMember;
@ -1680,7 +1697,9 @@ class BodyBuilder extends StackListenerImpl
];
typeAliasedConstructorInvocations.clear();
for (TypeAliasedConstructorInvocation invocation in invocations) {
assert(invocation.hasBeenInferred || isOrphaned(invocation),
assert(
invocation.hasBeenInferred || isOrphaned(invocation),
// Coverage-ignore(suite): Not run.
"Node $invocation has not been inferred.");
Expression? replacement;
@ -1720,7 +1739,9 @@ class BodyBuilder extends StackListenerImpl
typeAliasedFactoryInvocations.toList();
typeAliasedFactoryInvocations.clear();
for (TypeAliasedFactoryInvocation invocation in invocations) {
assert(invocation.hasBeenInferred || isOrphaned(invocation),
assert(
invocation.hasBeenInferred || isOrphaned(invocation),
// Coverage-ignore(suite): Not run.
"Node $invocation has not been inferred.");
Expression? replacement;
@ -1769,6 +1790,7 @@ class BodyBuilder extends StackListenerImpl
_resolveRedirectingFactoryTargets(delayedRedirectingFactoryInvocations,
allowFurtherDelays: allowFurtherDelays);
if (delayedRedirectingFactoryInvocations.isNotEmpty) {
// Coverage-ignore-block(suite): Not run.
for (StaticInvocation invocation
in delayedRedirectingFactoryInvocations) {
internalProblem(
@ -1783,6 +1805,7 @@ class BodyBuilder extends StackListenerImpl
_unaliasTypeAliasedFactoryInvocations(
delayedTypeAliasedFactoryInvocations);
if (delayedTypeAliasedFactoryInvocations.isNotEmpty) {
// Coverage-ignore-block(suite): Not run.
for (StaticInvocation invocation
in delayedTypeAliasedFactoryInvocations) {
internalProblem(
@ -1797,6 +1820,7 @@ class BodyBuilder extends StackListenerImpl
_unaliasTypeAliasedConstructorInvocations(
delayedTypeAliasedConstructorInvocations);
if (delayedTypeAliasedConstructorInvocations.isNotEmpty) {
// Coverage-ignore-block(suite): Not run.
for (ConstructorInvocation invocation
in delayedTypeAliasedConstructorInvocations) {
internalProblem(
@ -1861,12 +1885,15 @@ class BodyBuilder extends StackListenerImpl
parent.addAnnotation(expression);
}
} else {
// Coverage-ignore-block(suite): Not run.
temporaryParent = new ListLiteral(expressions);
}
performBacklogComputations(allowFurtherDelays: false);
// Coverage-ignore(suite): Not run.
return temporaryParent != null ? temporaryParent.expressions : expressions;
}
// Coverage-ignore(suite): Not run.
Expression parseSingleExpression(
Parser parser, Token token, FunctionNode parameters) {
assert(redirectingFactoryInvocations.isEmpty);
@ -2084,6 +2111,7 @@ class BodyBuilder extends StackListenerImpl
} else if (formals != null) {
for (FormalParameterBuilder formal in formals) {
if (formal.isSuperInitializingFormal) {
// Coverage-ignore-block(suite): Not run.
if (formal.isNamed) {
NamedExpression superParameterAsArgument = new NamedExpression(
formal.name,
@ -2458,6 +2486,7 @@ class BodyBuilder extends StackListenerImpl
debugEvent("ParenthesizedExpression");
Expression value = popForValue();
if (value is ShadowLargeIntLiteral) {
// Coverage-ignore-block(suite): Not run.
// We need to know that the expression was parenthesized because we will
// treat -n differently from -(n). If the expression occurs in a double
// context, -n is a double literal and -(n) is an application of unary- to
@ -2696,6 +2725,7 @@ class BodyBuilder extends StackListenerImpl
Scope headScope = pop() as Scope;
assert(
headScope.classNameOrDebugName == "switch block",
// Coverage-ignore(suite): Not run.
"Expected to have scope 'switch block', "
"but got '${headScope.classNameOrDebugName}'.");
if (value is Pattern) {
@ -2932,6 +2962,7 @@ class BodyBuilder extends StackListenerImpl
push(forest.createOrPattern(token.charOffset, left, right,
orPatternJointVariables: jointVariables));
break;
// Coverage-ignore(suite): Not run.
default:
internalProblem(
fasta.templateInternalProblemUnhandled
@ -2980,6 +3011,7 @@ class BodyBuilder extends StackListenerImpl
token.charOffset,
token.length));
} else {
// Coverage-ignore-block(suite): Not run.
push(buildProblem(fasta.templateInvalidOperator.withArguments(token),
token.charOffset, token.length));
}
@ -3211,9 +3243,12 @@ class BodyBuilder extends StackListenerImpl
bool reportWarning = true,
List<LocatedMessage>? context}) {
Message message = isSuper
? fasta.templateSuperclassHasNoMember.withArguments(name.text)
?
// Coverage-ignore(suite): Not run.
fasta.templateSuperclassHasNoMember.withArguments(name.text)
: fasta.templateMemberNotFound.withArguments(name.text);
if (reportWarning) {
// Coverage-ignore-block(suite): Not run.
addProblemErrorIfConst(message, charOffset, name.text.length,
context: context);
}
@ -3228,6 +3263,7 @@ class BodyBuilder extends StackListenerImpl
? fasta.templateSuperclassHasNoGetter.withArguments(name.text)
: fasta.templateGetterNotFound.withArguments(name.text);
if (reportWarning) {
// Coverage-ignore-block(suite): Not run.
addProblemErrorIfConst(message, charOffset, name.text.length,
context: context);
}
@ -3242,6 +3278,7 @@ class BodyBuilder extends StackListenerImpl
? fasta.templateSuperclassHasNoSetter.withArguments(name.text)
: fasta.templateSetterNotFound.withArguments(name.text);
if (reportWarning) {
// Coverage-ignore-block(suite): Not run.
addProblemErrorIfConst(message, charOffset, name.text.length,
context: context);
}
@ -3268,6 +3305,7 @@ class BodyBuilder extends StackListenerImpl
? fasta.templateSuperclassHasNoMethod.withArguments(name.text)
: fasta.templateMethodNotFound.withArguments(name.text);
if (reportWarning) {
// Coverage-ignore-block(suite): Not run.
addProblemErrorIfConst(message, charOffset, length, context: context);
}
return message;
@ -3275,7 +3313,9 @@ class BodyBuilder extends StackListenerImpl
Message warnUnresolvedConstructor(Name name, {bool isSuper = false}) {
Message message = isSuper
? fasta.templateSuperclassHasNoConstructor.withArguments(name.text)
?
// Coverage-ignore(suite): Not run.
fasta.templateSuperclassHasNoConstructor.withArguments(name.text)
: fasta.templateConstructorNotFound.withArguments(name.text);
return message;
}
@ -3304,6 +3344,7 @@ class BodyBuilder extends StackListenerImpl
if (!context.inDeclaration &&
constantContext != ConstantContext.none &&
!context.allowedInConstantExpression) {
// Coverage-ignore-block(suite): Not run.
addProblem(fasta.messageNotAConstantExpression, token.charOffset,
token.length);
}
@ -3585,8 +3626,10 @@ class BodyBuilder extends StackListenerImpl
Object? node = pop();
Object? qualifier = pop();
if (qualifier is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
push(qualifier);
} else if (node is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
push(node);
} else {
Identifier identifier = node as Identifier;
@ -3618,6 +3661,7 @@ class BodyBuilder extends StackListenerImpl
List<Object>? parts = const FixedNullableList<Object>()
.popNonNullable(stack, count, /* dummyValue = */ 0);
if (parts == null) {
// Coverage-ignore-block(suite): Not run.
push(new ParserRecovery(endToken.charOffset));
return;
}
@ -3669,6 +3713,7 @@ class BodyBuilder extends StackListenerImpl
}
@override
// Coverage-ignore(suite): Not run.
void handleScript(Token token) {
debugEvent("Script");
}
@ -3894,6 +3939,7 @@ class BodyBuilder extends StackListenerImpl
void pushNewLocalVariable(Expression? initializer, {Token? equalsToken}) {
Object? node = pop();
if (node is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
push(node);
return;
}
@ -3951,6 +3997,7 @@ class BodyBuilder extends StackListenerImpl
debugEvent("NoFieldInitializer");
constantContext = _context.constantContext;
if (constantContext == ConstantContext.inferred) {
// Coverage-ignore-block(suite): Not run.
// Creating a null value to prevent the Dart VM from crashing.
push(forest.createNullLiteral(offsetForToken(token)));
} else {
@ -3965,6 +4012,7 @@ class BodyBuilder extends StackListenerImpl
debugEvent("InitializedIdentifier");
Object? node = pop();
if (node is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
push(node);
return;
}
@ -4012,6 +4060,7 @@ class BodyBuilder extends StackListenerImpl
currentLocalVariableModifiers = pop() as int;
List<Expression>? annotations = pop() as List<Expression>?;
if (node is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
push(node);
return;
}
@ -4032,6 +4081,7 @@ class BodyBuilder extends StackListenerImpl
currentLocalVariableModifiers = pop() as int;
List<Expression>? annotations = pop() as List<Expression>?;
if (variables == null) {
// Coverage-ignore-block(suite): Not run.
push(new ParserRecovery(offsetForToken(endToken)));
return;
}
@ -4087,6 +4137,7 @@ class BodyBuilder extends StackListenerImpl
}
@override
// Coverage-ignore(suite): Not run.
void handleInvalidTopLevelBlock(Token token) {
// TODO(danrubel): Consider improved recovery by adding this block
// as part of a synthetic top level function.
@ -4133,6 +4184,7 @@ class BodyBuilder extends StackListenerImpl
void exitLoopOrSwitch(Statement statement) {
if (problemInLoopOrSwitch != null) {
// Coverage-ignore-block(suite): Not run.
push(problemInLoopOrSwitch);
problemInLoopOrSwitch = null;
} else {
@ -4157,6 +4209,7 @@ class BodyBuilder extends StackListenerImpl
new VariableDeclarationImpl.forEffect(variableOrExpression);
return <VariableDeclaration>[variable];
} else if (variableOrExpression is ExpressionStatement) {
// Coverage-ignore-block(suite): Not run.
VariableDeclaration variable = new VariableDeclarationImpl.forEffect(
variableOrExpression.expression);
return <VariableDeclaration>[variable];
@ -4164,14 +4217,17 @@ class BodyBuilder extends StackListenerImpl
return forest
.variablesDeclarationExtractDeclarations(variableOrExpression);
} else if (variableOrExpression is List<Object>) {
// Coverage-ignore-block(suite): Not run.
List<VariableDeclaration> variables = <VariableDeclaration>[];
for (Object v in variableOrExpression) {
variables.addAll(_buildForLoopVariableDeclarations(v)!);
}
return variables;
} else if (variableOrExpression is PatternVariableDeclaration) {
// Coverage-ignore-block(suite): Not run.
return <VariableDeclaration>[];
} else if (variableOrExpression is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
return <VariableDeclaration>[];
} else if (variableOrExpression == null) {
return <VariableDeclaration>[];
@ -4487,6 +4543,7 @@ class BodyBuilder extends StackListenerImpl
<Statement>[variableOrExpression, ...intermediateVariables!, result]);
}
if (variableOrExpression is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
problemInLoopOrSwitch ??= buildProblemStatement(
fasta.messageSyntheticToken, variableOrExpression.charOffset,
suppressMessage: true);
@ -4556,6 +4613,7 @@ class BodyBuilder extends StackListenerImpl
DartType typeArgument;
if (typeArguments != null) {
if (typeArguments.length > 1) {
// Coverage-ignore-block(suite): Not run.
addProblem(
fasta.messageListLiteralTooManyTypeArguments,
offsetForToken(leftBracket),
@ -4761,6 +4819,7 @@ class BodyBuilder extends StackListenerImpl
if (setOrMapEntries != null) {
for (dynamic entry in setOrMapEntries) {
if (entry is MapLiteralEntry) {
// Coverage-ignore-block(suite): Not run.
// TODO(danrubel): report the error on the colon
addProblem(fasta.templateExpectedButGot.withArguments(','),
entry.fileOffset, 1);
@ -5004,6 +5063,7 @@ class BodyBuilder extends StackListenerImpl
push(forest.createMapEntry(offsetForToken(colon), key, value));
} else {
if (!libraryFeatures.nullAwareElements.isEnabled) {
// Coverage-ignore-block(suite): Not run.
addProblem(
templateExperimentNotEnabledOffByDefault
.withArguments(ExperimentalFlag.nullAwareElements.name),
@ -5036,6 +5096,7 @@ class BodyBuilder extends StackListenerImpl
if (identifierCount == 1) {
Object? part = pop();
if (part is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
push(new ParserErrorGenerator(
this, hashToken, fasta.messageSyntheticToken));
} else {
@ -5046,6 +5107,7 @@ class BodyBuilder extends StackListenerImpl
List<Identifier>? parts = const FixedNullableList<Identifier>()
.popNonNullable(stack, identifierCount, dummyIdentifier);
if (parts == null) {
// Coverage-ignore-block(suite): Not run.
push(new ParserErrorGenerator(
this, hashToken, fasta.messageSyntheticToken));
return;
@ -5173,6 +5235,7 @@ class BodyBuilder extends StackListenerImpl
if (existing == null) {
scope.addLocalMember(name, builder, setter: false);
} else {
// Coverage-ignore-block(suite): Not run.
reportDuplicatedDeclaration(existing, name, builder.charOffset);
}
}
@ -5195,6 +5258,7 @@ class BodyBuilder extends StackListenerImpl
if (existing == null) {
scope.addLocalMember(name, builder, setter: false);
} else {
// Coverage-ignore-block(suite): Not run.
reportDuplicatedDeclaration(existing, name, builder.charOffset);
}
}
@ -5263,7 +5327,9 @@ class BodyBuilder extends StackListenerImpl
push(new RecordTypeFieldBuilder(
[],
type is ParserRecovery
? new InvalidTypeBuilderImpl(uri, type.charOffset)
?
// Coverage-ignore(suite): Not run.
new InvalidTypeBuilderImpl(uri, type.charOffset)
: type as TypeBuilder,
fieldName,
name is Identifier ? name.nameOffset : TreeNode.noOffset,
@ -5318,6 +5384,7 @@ class BodyBuilder extends StackListenerImpl
}
@override
// Coverage-ignore(suite): Not run.
void handleVoidKeywordWithTypeArguments(Token token) {
assert(checkState(token, <ValueKind>[
/* arguments */ ValueKinds.TypeArgumentsOrNull,
@ -5441,6 +5508,7 @@ class BodyBuilder extends StackListenerImpl
debugEvent("ThrowExpression");
Expression expression = popForValue();
if (constantContext != ConstantContext.none) {
// Coverage-ignore-block(suite): Not run.
push(buildProblem(
fasta.templateNotConstantExpression.withArguments('Throw'),
throwToken.offset,
@ -5991,7 +6059,10 @@ class BodyBuilder extends StackListenerImpl
suffix = suffixObject;
} else {
assert(
suffixObject == null || suffixObject is ParserRecovery,
suffixObject == null ||
// Coverage-ignore(suite): Not run.
suffixObject is ParserRecovery,
// Coverage-ignore(suite): Not run.
"Unexpected qualified name suffix $suffixObject "
"(${suffixObject.runtimeType})");
// There was a `.` without a suffix.
@ -6036,6 +6107,7 @@ class BodyBuilder extends StackListenerImpl
}
String name;
if (identifier != null && suffix != null) {
// Coverage-ignore-block(suite): Not run.
name = "${identifier.name}.${suffix.name}";
} else if (identifier != null) {
name = identifier.name;
@ -6125,6 +6197,7 @@ class BodyBuilder extends StackListenerImpl
if (isConstructorInvocation) {
if (constantContext == ConstantContext.required &&
constness == Constness.implicit) {
// Coverage-ignore-block(suite): Not run.
addProblem(fasta.messageMissingExplicitConst, charOffset, charLength);
}
if (isConst && !procedure.isConst) {
@ -6408,6 +6481,7 @@ class BodyBuilder extends StackListenerImpl
List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
if (inMetadata && typeArguments != null) {
if (!libraryFeatures.genericMetadata.isEnabled) {
// Coverage-ignore-block(suite): Not run.
handleRecoverableError(fasta.messageMetadataTypeArguments,
nameLastToken.next!, nameLastToken.next!);
}
@ -6426,6 +6500,7 @@ class BodyBuilder extends StackListenerImpl
typeArguments, name, arguments, nameToken, nameLastToken, constness,
inImplicitCreationContext: inImplicitCreationContext));
} else if (type is ParserRecovery) {
// Coverage-ignore-block(suite): Not run.
push(new ParserErrorGenerator(
this, nameToken, fasta.messageSyntheticToken));
} else if (type is InvalidExpression) {
@ -6523,6 +6598,7 @@ class BodyBuilder extends StackListenerImpl
TypeDeclarationBuilder? typeAliasBuilder,
required UnresolvedKind unresolvedKind}) {
if (arguments == null) {
// Coverage-ignore-block(suite): Not run.
return buildProblem(fasta.messageMissingArgumentList,
nameToken.charOffset, nameToken.length);
}
@ -6542,6 +6618,7 @@ class BodyBuilder extends StackListenerImpl
int numberOfTypeArguments = typeArguments?.length ?? 0;
if (typeArguments != null &&
numberOfTypeParameters != numberOfTypeArguments) {
// Coverage-ignore-block(suite): Not run.
// TODO(eernst): Use position of type arguments, not nameToken.
return evaluateArgumentsBefore(
arguments,
@ -6578,6 +6655,7 @@ class BodyBuilder extends StackListenerImpl
target = null;
} else if (constructorBuilder.isConstructor) {
if (typeDeclarationBuilder.isAbstract) {
// Coverage-ignore-block(suite): Not run.
return evaluateArgumentsBefore(
arguments,
buildAbstractClassInstantiationError(
@ -6614,9 +6692,11 @@ class BodyBuilder extends StackListenerImpl
if (constructorBuilder == null) {
// Not found. Reported below.
} else if (constructorBuilder is AmbiguousMemberBuilder) {
// Coverage-ignore-block(suite): Not run.
message = constructorBuilder.message
.withLocation(uri, charOffset, noLength);
} else if (constructorBuilder.isConstructor ||
// Coverage-ignore(suite): Not run.
constructorBuilder.isFactory) {
Member target = constructorBuilder.invokeTarget!;
return buildStaticInvocation(target, arguments,
@ -6630,12 +6710,14 @@ class BodyBuilder extends StackListenerImpl
arguments: arguments,
message: message,
kind: UnresolvedKind.Constructor);
// Coverage-ignore(suite): Not run.
case InvalidTypeDeclarationBuilder():
LocatedMessage message = typeDeclarationBuilder.message;
return evaluateArgumentsBefore(
arguments,
buildProblem(message.messageObject, nameToken.charOffset,
nameToken.lexeme.length));
// Coverage-ignore(suite): Not run.
case TypeAliasBuilder():
case NominalVariableBuilder():
case StructuralVariableBuilder():
@ -6658,6 +6740,7 @@ class BodyBuilder extends StackListenerImpl
List<TypeBuilder>? unaliasedTypeArgumentBuilders =
aliasBuilder.unaliasTypeArguments(const []);
if (unaliasedTypeArgumentBuilders == null) {
// Coverage-ignore-block(suite): Not run.
// TODO(eernst): This is a wrong number of type arguments,
// occurring indirectly (in an alias of an alias, etc.).
return evaluateArgumentsBefore(
@ -6677,11 +6760,17 @@ class BodyBuilder extends StackListenerImpl
assert(forest.argumentsTypeArguments(arguments).isEmpty);
forest.argumentsSetTypeArguments(arguments, dartTypeArguments);
case TypeAliasBuilder():
// Coverage-ignore(suite): Not run.
case NominalVariableBuilder():
// Coverage-ignore(suite): Not run.
case StructuralVariableBuilder():
// Coverage-ignore(suite): Not run.
case ExtensionBuilder():
// Coverage-ignore(suite): Not run.
case InvalidTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
case BuiltinTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): How should we handle this case?
case OmittedTypeDeclarationBuilder():
case null:
@ -6712,6 +6801,7 @@ class BodyBuilder extends StackListenerImpl
int numberOfTypeParameters =
aliasBuilder.typeVariables?.length ?? 0;
if (numberOfTypeParameters != typeArgumentBuilders.length) {
// Coverage-ignore-block(suite): Not run.
// TODO(eernst): Use position of type arguments, not nameToken.
return evaluateArgumentsBefore(
arguments,
@ -6724,6 +6814,7 @@ class BodyBuilder extends StackListenerImpl
List<TypeBuilder>? unaliasedTypeArgumentBuilders =
aliasBuilder.unaliasTypeArguments(typeArgumentBuilders);
if (unaliasedTypeArgumentBuilders == null) {
// Coverage-ignore-block(suite): Not run.
// TODO(eernst): This is a wrong number of type arguments,
// occurring indirectly (in an alias of an alias, etc.).
return evaluateArgumentsBefore(
@ -6760,6 +6851,7 @@ class BodyBuilder extends StackListenerImpl
forest.argumentsSetTypeArguments(arguments, []);
} else {
if (forest.argumentsTypeArguments(arguments).isEmpty) {
// Coverage-ignore-block(suite): Not run.
// No type arguments provided to unaliased class, use defaults.
List<DartType> result = new List<DartType>.generate(
typeVariables.length,
@ -6776,7 +6868,9 @@ class BodyBuilder extends StackListenerImpl
case StructuralVariableBuilder():
case ExtensionBuilder():
case InvalidTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
case BuiltinTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): How should we handle this case?
case OmittedTypeDeclarationBuilder():
case null:
@ -6843,6 +6937,7 @@ class BodyBuilder extends StackListenerImpl
if (constructorBuilder == null) {
// Not found. Reported below.
} else if (constructorBuilder is AmbiguousMemberBuilder) {
// Coverage-ignore-block(suite): Not run.
message = constructorBuilder.message
.withLocation(uri, charOffset, noLength);
} else {
@ -6869,6 +6964,7 @@ class BodyBuilder extends StackListenerImpl
case StructuralVariableBuilder():
case ExtensionBuilder():
case BuiltinTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): How should we handle this case?
case OmittedTypeDeclarationBuilder():
case null:
@ -6888,6 +6984,7 @@ class BodyBuilder extends StackListenerImpl
}
@override
// Coverage-ignore(suite): Not run.
void handleConstFactory(Token constKeyword) {
debugEvent("ConstFactory");
if (!libraryFeatures.constFunctions.isEnabled) {
@ -7087,7 +7184,9 @@ class BodyBuilder extends StackListenerImpl
} else {
int offset = elseEntry is Expression
? elseEntry.fileOffset
: offsetForToken(ifToken);
:
// Coverage-ignore(suite): Not run.
offsetForToken(ifToken);
node = new MapLiteralEntry(
buildProblem(fasta.templateExpectedAfterButGot.withArguments(':'),
offset, 1),
@ -7103,6 +7202,7 @@ class BodyBuilder extends StackListenerImpl
node = forest.createIfMapEntry(offsetForToken(ifToken),
condition.expression, thenMapEntry, elseEntry);
} else {
// Coverage-ignore-block(suite): Not run.
node = forest.createIfCaseMapEntry(offsetForToken(ifToken),
prelude: [],
expression: condition.expression,
@ -7121,7 +7221,9 @@ class BodyBuilder extends StackListenerImpl
} else {
int offset = thenEntry is Expression
? thenEntry.fileOffset
: offsetForToken(ifToken);
:
// Coverage-ignore(suite): Not run.
offsetForToken(ifToken);
node = new MapLiteralEntry(
buildProblem(fasta.templateExpectedAfterButGot.withArguments(':'),
offset, 1),
@ -7153,6 +7255,7 @@ class BodyBuilder extends StackListenerImpl
// TODO(cstefantsova): Replace the following no-op with the node for
// handling null-aware elements.
if (!libraryFeatures.nullAwareElements.isEnabled) {
// Coverage-ignore-block(suite): Not run.
addProblem(
templateExperimentNotEnabledOffByDefault
.withArguments(ExperimentalFlag.nullAwareElements.name),
@ -7256,6 +7359,7 @@ class BodyBuilder extends StackListenerImpl
} else {
assert(
identifier is ParserRecovery,
// Coverage-ignore(suite): Not run.
"Unexpected argument name: "
"${identifier} (${identifier.runtimeType})");
push(identifier);
@ -7282,6 +7386,7 @@ class BodyBuilder extends StackListenerImpl
// scope?
Builder? existing = scope.lookupLocalMember(name.name, setter: false);
if (existing != null) {
// Coverage-ignore-block(suite): Not run.
reportDuplicatedDeclaration(existing, name.name, name.nameOffset);
}
push(new FunctionDeclarationImpl(
@ -7513,7 +7618,9 @@ class BodyBuilder extends StackListenerImpl
/* break target = */ ValueKinds.BreakTarget,
]));
Condition condition = pop() as Condition;
assert(condition.patternGuard == null,
assert(
condition.patternGuard == null,
// Coverage-ignore(suite): Not run.
"Unexpected pattern in do statement: ${condition.patternGuard}.");
Expression expression = condition.expression;
Statement body = popStatement();
@ -7549,6 +7656,7 @@ class BodyBuilder extends StackListenerImpl
if (scope.parent != null) {
enterLocalScope(scope.parent!);
} else {
// Coverage-ignore-block(suite): Not run.
createAndEnterLocalScope(
debugName: 'forIn', kind: ScopeKind.statementLocalScope);
}
@ -7785,6 +7893,7 @@ class BodyBuilder extends StackListenerImpl
JumpTarget breakTarget = exitBreakTarget()!;
List<BreakStatementImpl>? continueStatements;
if (continueTarget.hasUsers) {
// Coverage-ignore-block(suite): Not run.
LabeledStatement labeledStatement = forest.createLabeledStatement(body);
continueStatements =
continueTarget.resolveContinues(forest, labeledStatement);
@ -7815,6 +7924,7 @@ class BodyBuilder extends StackListenerImpl
typeInferrer.assignedVariables
.storeInfo(forInStatement, assignedVariablesNodeInfo);
if (continueStatements != null) {
// Coverage-ignore-block(suite): Not run.
for (BreakStatementImpl continueStatement in continueStatements) {
continueStatement.targetStatement = forInStatement;
}
@ -7899,6 +8009,7 @@ class BodyBuilder extends StackListenerImpl
push(forest.createRethrowStatement(
offsetForToken(rethrowToken), offsetForToken(endToken)));
} else {
// Coverage-ignore-block(suite): Not run.
push(new ExpressionStatement(buildProblem(fasta.messageRethrowNotCatch,
offsetForToken(rethrowToken), lengthForToken(rethrowToken)))
..fileOffset = offsetForToken(rethrowToken));
@ -7930,7 +8041,9 @@ class BodyBuilder extends StackListenerImpl
]));
Statement body = popStatement();
Condition condition = pop() as Condition;
assert(condition.patternGuard == null,
assert(
condition.patternGuard == null,
// Coverage-ignore(suite): Not run.
"Unexpected pattern in while statement: ${condition.patternGuard}.");
Expression expression = condition.expression;
JumpTarget continueTarget = exitContinueTarget()!;
@ -8013,6 +8126,7 @@ class BodyBuilder extends StackListenerImpl
conditionLastToken = nextToken;
}
if (conditionLastToken.isEof) {
// Coverage-ignore-block(suite): Not run.
endOffset = startOffset = -1;
} else {
endOffset = conditionLastToken.offset + conditionLastToken.length;
@ -8125,6 +8239,7 @@ class BodyBuilder extends StackListenerImpl
if (scope.hasLocalLabel(labelName)) {
// TODO(ahe): Should validate this is a goto target.
if (!scope.claimLabel(labelName)) {
// Coverage-ignore-block(suite): Not run.
addProblem(
fasta.templateDuplicateLabelInSwitchStatement
.withArguments(labelName),
@ -8349,6 +8464,7 @@ class BodyBuilder extends StackListenerImpl
assert(
scope.kind == ScopeKind.switchCase ||
scope.kind == ScopeKind.jointVariables,
// Coverage-ignore(suite): Not run.
"Expected the current scope to be of kind '${ScopeKind.switchCase}' "
"or '${ScopeKind.jointVariables}', but got '${scope.kind}.");
Map<String, List<int>>? usedNamesOffsets = scope.usedNames;
@ -8504,7 +8620,9 @@ class BodyBuilder extends StackListenerImpl
exitSwitchScope();
exitLocalScope();
Condition condition = pop() as Condition;
assert(condition.patternGuard == null,
assert(
condition.patternGuard == null,
// Coverage-ignore(suite): Not run.
"Unexpected pattern in switch statement: ${condition.patternGuard}.");
Expression expression = condition.expression;
Statement switchStatement;
@ -8519,6 +8637,7 @@ class BodyBuilder extends StackListenerImpl
if (switchCase is PatternSwitchCase) {
patternSwitchCase = switchCase;
} else {
// Coverage-ignore-block(suite): Not run.
List<PatternGuard> patterns = new List<PatternGuard>.generate(
switchCase.expressions.length, (int index) {
return forest.createPatternGuard(
@ -8648,7 +8767,9 @@ class BodyBuilder extends StackListenerImpl
List<SwitchExpressionCase> cases = pop() as List<SwitchExpressionCase>;
Condition condition = pop() as Condition;
assert(condition.patternGuard == null,
assert(
condition.patternGuard == null,
// Coverage-ignore(suite): Not run.
"Unexpected pattern in switch expression: ${condition.patternGuard}.");
Expression expression = condition.expression;
push(forest.createSwitchExpression(
@ -8735,12 +8856,14 @@ class BodyBuilder extends StackListenerImpl
push(problemInLoopOrSwitch = buildProblemStatement(
fasta.messageBreakOutsideOfLoop, breakKeyword.charOffset));
} else if (target == null || !target.isBreakTarget) {
// Coverage-ignore-block(suite): Not run.
Token labelToken = breakKeyword.next!;
push(problemInLoopOrSwitch = buildProblemStatement(
fasta.templateInvalidBreakTarget.withArguments(name!),
labelToken.charOffset,
length: labelToken.length));
} else if (target.functionNestingLevel != functionNestingLevel) {
// Coverage-ignore-block(suite): Not run.
push(buildProblemTargetOutsideLocalFunction(name, breakKeyword));
} else {
Statement statement =
@ -8750,6 +8873,7 @@ class BodyBuilder extends StackListenerImpl
}
}
// Coverage-ignore(suite): Not run.
Statement buildProblemTargetOutsideLocalFunction(
String? name, Token keyword) {
Statement problem;
@ -8804,16 +8928,19 @@ class BodyBuilder extends StackListenerImpl
}
}
if (target == null) {
// Coverage-ignore-block(suite): Not run.
push(problemInLoopOrSwitch = buildProblemStatement(
fasta.messageContinueWithoutLabelInCase, continueKeyword.charOffset,
length: continueKeyword.length));
} else if (!target.isContinueTarget) {
// Coverage-ignore-block(suite): Not run.
Token labelToken = continueKeyword.next!;
push(problemInLoopOrSwitch = buildProblemStatement(
fasta.templateInvalidContinueTarget.withArguments(name!),
labelToken.charOffset,
length: labelToken.length));
} else if (target.functionNestingLevel != functionNestingLevel) {
// Coverage-ignore-block(suite): Not run.
push(buildProblemTargetOutsideLocalFunction(name, continueKeyword));
} else {
Statement statement = forest.createContinueStatement(
@ -8906,6 +9033,7 @@ class BodyBuilder extends StackListenerImpl
TypeVariableBuilderBase variable = typeVariables[index];
variable.bound = bound;
if (variance != null) {
// Coverage-ignore-block(suite): Not run.
if (!libraryFeatures.variance.isEnabled) {
reportVarianceModifierNotEnabled(variance);
}
@ -8938,7 +9066,11 @@ class BodyBuilder extends StackListenerImpl
libraryBuilder.loader.target.objectClassBuilder,
libraryBuilder.loader.target.dynamicType);
}
for (int i = 0; i < unboundTypeVariables.length; ++i) {
for (int i = 0;
i < unboundTypeVariables.length;
// Coverage-ignore(suite): Not run.
++i) {
// Coverage-ignore-block(suite): Not run.
unboundTypeVariables[i].finish(
libraryBuilder,
libraryBuilder.loader.target.objectClassBuilder,
@ -8991,6 +9123,7 @@ class BodyBuilder extends StackListenerImpl
expression, message.withLocation(uri, fileOffset, length),
context: context);
} else {
// Coverage-ignore-block(suite): Not run.
addProblem(message, fileOffset, length, context: context);
return expression;
}
@ -9026,6 +9159,7 @@ class BodyBuilder extends StackListenerImpl
context: context, suppressMessage: suppressMessage));
}
// Coverage-ignore(suite): Not run.
Statement wrapInProblemStatement(Statement statement, Message message) {
// TODO(askesc): Produce explicit error statement wrapping the original.
// See [issue 29717](https://github.com/dart-lang/sdk/issues/29717)
@ -9147,6 +9281,7 @@ class BodyBuilder extends StackListenerImpl
DartType fieldType = _context.substituteFieldType(builder.fieldType);
if (!typeEnvironment.isSubtypeOf(
formalType, fieldType, SubtypeCheckMode.withNullabilities)) {
// Coverage-ignore-block(suite): Not run.
libraryBuilder.addProblem(
fasta.templateInitializingFormalTypeMismatch
.withArguments(name, formalType, builder.fieldType),
@ -9230,12 +9365,14 @@ class BodyBuilder extends StackListenerImpl
}
@override
// Coverage-ignore(suite): Not run.
void handleSymbolVoid(Token token) {
debugEvent("SymbolVoid");
push(new SimpleIdentifier(token));
}
@override
// Coverage-ignore(suite): Not run.
void handleInvalidFunctionBody(Token token) {
if (_context.isNativeMethod) {
push(NullValues.FunctionBody);
@ -9380,6 +9517,7 @@ class BodyBuilder extends StackListenerImpl
List<Expression> expressions =
new List<Expression>.of(forest.argumentsPositional(arguments));
for (NamedExpression named in forest.argumentsNamed(arguments)) {
// Coverage-ignore-block(suite): Not run.
expressions.add(named.value);
}
for (Expression argument in expressions.reversed) {
@ -9542,6 +9680,7 @@ class BodyBuilder extends StackListenerImpl
List<TypeBuilder>? unresolvedTypes, TypeUse typeUse,
{required bool allowPotentiallyConstantType}) {
if (unresolvedTypes == null) {
// Coverage-ignore-block(suite): Not run.
return <DartType>[];
}
return new List<DartType>.generate(
@ -9718,6 +9857,7 @@ class BodyBuilder extends StackListenerImpl
case '>=':
kind = RelationalPatternKind.greaterThanEqual;
break;
// Coverage-ignore(suite): Not run.
default:
internalProblem(
fasta.templateInternalProblemUnhandled
@ -9832,7 +9972,9 @@ class BodyBuilder extends StackListenerImpl
DartType? patternType = type?.build(libraryBuilder, TypeUse.variableType);
// Note: if `default` appears in a switch expression, parser error recovery
// treats it as a wildcard pattern.
assert(wildcard.lexeme == '_' || wildcard.lexeme == 'default');
assert(wildcard.lexeme == '_' ||
// Coverage-ignore(suite): Not run.
wildcard.lexeme == 'default');
push(forest.createWildcardPattern(wildcard.charOffset, patternType));
}
@ -10040,12 +10182,15 @@ class LabelTarget implements JumpTarget {
JumpTargetKind.Continue, functionNestingLevel, fileUri, charOffset);
@override
// Coverage-ignore(suite): Not run.
bool get hasUsers => breakTarget.hasUsers || continueTarget.hasUsers;
@override
// Coverage-ignore(suite): Not run.
List<Statement> get users => unsupported("users", charOffset, fileUri);
@override
// Coverage-ignore(suite): Not run.
JumpTargetKind get kind => unsupported("kind", charOffset, fileUri);
@override
@ -10068,23 +10213,27 @@ class LabelTarget implements JumpTarget {
}
@override
// Coverage-ignore(suite): Not run.
void addGoto(Statement statement) {
unsupported("addGoto", charOffset, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
void resolveBreaks(
Forest forest, LabeledStatement target, Statement targetStatement) {
breakTarget.resolveBreaks(forest, target, targetStatement);
}
@override
// Coverage-ignore(suite): Not run.
List<BreakStatementImpl>? resolveContinues(
Forest forest, LabeledStatement target) {
return continueTarget.resolveContinues(forest, target);
}
@override
// Coverage-ignore(suite): Not run.
void resolveGotos(Forest forest, SwitchCase target) {
unsupported("resolveGotos", charOffset, fileUri);
}
@ -10213,7 +10362,11 @@ Block combineStatements(Statement statement, Statement body) {
return body;
} else {
return new Block(<Statement>[
if (statement is Block) ...statement.statements else statement,
if (statement is Block)
...statement // Coverage-ignore(suite): Not run.
.statements
else
statement,
body
])
..fileOffset = statement.fileOffset;
@ -10238,6 +10391,7 @@ Block combineStatements(Statement statement, Statement body) {
/// )
String debugName(String className, String name, [String? prefix]) {
String result = name.isEmpty ? className : "$className.$name";
// Coverage-ignore(suite): Not run.
return prefix == null ? result : "$prefix.$result";
}
@ -10245,10 +10399,13 @@ String debugName(String className, String name, [String? prefix]) {
// of objects can be anticipated and handle these directly.
String getNodeName(Object node) {
if (node is Identifier) {
// Coverage-ignore-block(suite): Not run.
return node.name;
} else if (node is Builder) {
return node.fullNameForErrors;
} else if (node is QualifiedName) {
}
// Coverage-ignore(suite): Not run.
else if (node is QualifiedName) {
return flattenName(node, node.charOffset, null);
} else {
return unhandled("${node.runtimeType}", "getNodeName", -1, null);
@ -10292,7 +10449,9 @@ class _BodyBuilderCloner extends CloneVisitorNotMembers {
..hasBeenInferred = node.hasBeenInferred;
bodyBuilder.redirectingFactoryInvocations.add(result);
return result;
} else if (node is TypeAliasedFactoryInvocation) {
}
// Coverage-ignore(suite): Not run.
else if (node is TypeAliasedFactoryInvocation) {
TypeAliasedFactoryInvocation result = new TypeAliasedFactoryInvocation(
node.typeAliasBuilder, node.target, clone(node.arguments),
isConst: node.isConst)
@ -10300,12 +10459,14 @@ class _BodyBuilderCloner extends CloneVisitorNotMembers {
bodyBuilder.typeAliasedFactoryInvocations.add(result);
return result;
}
// Coverage-ignore(suite): Not run.
return super.visitStaticInvocation(node);
}
@override
TreeNode visitConstructorInvocation(ConstructorInvocation node) {
if (node is TypeAliasedConstructorInvocation) {
// Coverage-ignore-block(suite): Not run.
TypeAliasedConstructorInvocation result =
new TypeAliasedConstructorInvocation(
node.typeAliasBuilder, node.target, clone(node.arguments),
@ -10323,6 +10484,7 @@ class _BodyBuilderCloner extends CloneVisitorNotMembers {
return ArgumentsImpl.clone(node, node.positional.map(clone).toList(),
node.named.map(clone).toList(), node.types.map(visitType).toList());
}
// Coverage-ignore(suite): Not run.
return super.visitArguments(node);
}
}
@ -10344,11 +10506,13 @@ bool isOrphaned(TreeNode node) {
if (member == null) {
return true;
}
// Coverage-ignore-block(suite): Not run.
_FindChildVisitor visitor = new _FindChildVisitor(node);
member.accept(visitor);
return !visitor.foundNode;
}
// Coverage-ignore(suite): Not run.
class _FindChildVisitor extends VisitorDefault<void> with VisitorVoidMixin {
final TreeNode soughtNode;
bool foundNode = false;

View File

@ -109,16 +109,22 @@ abstract class BodyBuilderContext {
bool get isConstructor => false;
// Coverage-ignore(suite): Not run.
bool get isExternalConstructor => false;
// Coverage-ignore(suite): Not run.
bool get isExternalFunction => false;
// Coverage-ignore(suite): Not run.
bool get isSetter => false;
// Coverage-ignore(suite): Not run.
bool get isConstConstructor => false;
// Coverage-ignore(suite): Not run.
bool get isFactory => false;
// Coverage-ignore(suite): Not run.
bool get isNativeMethod => false;
bool get isDeclarationInstanceContext {
@ -151,10 +157,13 @@ abstract class BodyBuilderContext {
ConstantContext get constantContext => ConstantContext.none;
// Coverage-ignore(suite): Not run.
bool get isLateField => false;
// Coverage-ignore(suite): Not run.
bool get isAbstractField => false;
// Coverage-ignore(suite): Not run.
bool get isExternalField => false;
bool get isMixinClass => _declarationContext.isMixinClass;
@ -216,6 +225,7 @@ abstract class BodyBuilderContext {
throw new UnsupportedError("${runtimeType}.memberCharOffset");
}
// Coverage-ignore(suite): Not run.
AugmentSuperTarget? get augmentSuperTarget {
return null;
}
@ -241,6 +251,7 @@ abstract class BodyBuilderDeclarationContext {
return new _SourceClassBodyBuilderDeclarationContext(
libraryBuilder, declarationBuilder);
} else if (declarationBuilder is DillClassBuilder) {
// Coverage-ignore-block(suite): Not run.
return new _DillClassBodyBuilderDeclarationContext(
libraryBuilder, declarationBuilder);
} else if (declarationBuilder is SourceExtensionTypeDeclarationBuilder) {
@ -286,6 +297,7 @@ abstract class BodyBuilderDeclarationContext {
bool get isMixinClass => false;
// Coverage-ignore(suite): Not run.
bool get isEnumClass => false;
String get className {
@ -304,6 +316,7 @@ abstract class BodyBuilderDeclarationContext {
bool get declaresConstConstructor => false;
// Coverage-ignore(suite): Not run.
bool isObjectClass(CoreTypes coreTypes) => false;
}
@ -415,6 +428,7 @@ class _SourceClassBodyBuilderDeclarationContext
}
}
// Coverage-ignore(suite): Not run.
class _DillClassBodyBuilderDeclarationContext
extends BodyBuilderDeclarationContext
with _DeclarationBodyBuilderDeclarationContextMixin {
@ -506,6 +520,7 @@ class LibraryBodyBuilderContext extends BodyBuilderContext {
inConstFields: inConstFields);
@override
// Coverage-ignore(suite): Not run.
bool get hasFormalParameters => false;
}
@ -530,6 +545,7 @@ class ClassBodyBuilderContext extends BodyBuilderContext
inConstFields: inConstFields);
@override
// Coverage-ignore(suite): Not run.
bool get hasFormalParameters => false;
}
@ -546,6 +562,7 @@ class EnumBodyBuilderContext extends BodyBuilderContext
inConstFields: inConstFields);
@override
// Coverage-ignore(suite): Not run.
bool get hasFormalParameters => false;
}
@ -562,6 +579,7 @@ class ExtensionBodyBuilderContext extends BodyBuilderContext
inConstFields: inConstFields);
@override
// Coverage-ignore(suite): Not run.
bool get hasFormalParameters => false;
}
@ -581,6 +599,7 @@ class ExtensionTypeBodyBuilderContext extends BodyBuilderContext
inConstFields: inConstFields);
@override
// Coverage-ignore(suite): Not run.
bool get hasFormalParameters => false;
}
@ -596,6 +615,7 @@ class TypedefBodyBuilderContext extends BodyBuilderContext {
inConstFields: inConstFields);
@override
// Coverage-ignore(suite): Not run.
bool get hasFormalParameters => false;
}
@ -715,6 +735,7 @@ mixin _FunctionBodyBuilderContextMixin<T extends SourceFunctionBuilder>
}
@override
// Coverage-ignore(suite): Not run.
bool get isNativeMethod {
return _member.isNative;
}
@ -979,9 +1000,11 @@ class ParameterBodyBuilderContext extends BodyBuilderContext {
inConstFields: inConstFields);
@override
// Coverage-ignore(suite): Not run.
bool get hasFormalParameters => false;
}
// Coverage-ignore(suite): Not run.
class ExpressionCompilerProcedureBodyBuildContext extends BodyBuilderContext
with _MemberBodyBuilderContext<SourceProcedureBuilder> {
@override

View File

@ -24,19 +24,23 @@ mixin ControlFlowElement on AuxiliaryExpression {
/// Spread and control-flow elements are not expressions and do not have a
/// static type.
@override
// Coverage-ignore(suite): Not run.
DartType getStaticType(StaticTypeContext context) {
return unsupported("getStaticType", fileOffset, getFileUri(this));
}
@override
// Coverage-ignore(suite): Not run.
DartType getStaticTypeInternal(StaticTypeContext context) {
return unsupported("getStaticTypeInternal", fileOffset, getFileUri(this));
}
@override
// Coverage-ignore(suite): Not run.
R accept<R>(ExpressionVisitor<R> v) => v.visitAuxiliaryExpression(this);
@override
// Coverage-ignore(suite): Not run.
R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
v.visitAuxiliaryExpression(this, arg);
@ -67,17 +71,20 @@ class SpreadElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
expression.accept(v);
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
expression = v.transform(expression);
expression.parent = this;
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
expression = v.transform(expression);
expression.parent = this;
@ -96,6 +103,7 @@ class SpreadElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('...');
if (isNullAware) {
@ -118,6 +126,7 @@ class IfElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
condition.accept(v);
then.accept(v);
@ -125,6 +134,7 @@ class IfElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
condition = v.transform(condition);
condition.parent = this;
@ -137,6 +147,7 @@ class IfElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
condition = v.transform(condition);
condition.parent = this;
@ -161,6 +172,7 @@ class IfElement extends AuxiliaryExpression with ControlFlowElement {
MapLiteralEntry? otherwiseEntry;
Expression? otherwise = this.otherwise;
if (otherwise != null) {
// Coverage-ignore-block(suite): Not run.
if (otherwise is ControlFlowElement) {
ControlFlowElement otherwiseElement = otherwise;
otherwiseEntry = otherwiseElement.toMapLiteralEntry(onConvertElement);
@ -179,6 +191,7 @@ class IfElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('if (');
printer.writeExpression(condition);
@ -206,6 +219,7 @@ class ForElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
visitList(variables, v);
condition?.accept(v);
@ -214,6 +228,7 @@ class ForElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
v.transformList(variables, this);
if (condition != null) {
@ -226,6 +241,7 @@ class ForElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
v.transformVariableDeclarationList(variables, this);
if (condition != null) {
@ -260,6 +276,7 @@ class ForElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('for (');
for (int index = 0; index < variables.length; index++) {
@ -298,7 +315,9 @@ class ForInElement extends AuxiliaryExpression with ControlFlowElement {
syntheticAssignment?.parent = this;
expressionEffects?.parent = this;
body.parent = this;
problem?.parent = this;
problem
// Coverage-ignore(suite): Not run.
?.parent = this;
}
Statement? get prologue => syntheticAssignment != null
@ -307,6 +326,7 @@ class ForInElement extends AuxiliaryExpression with ControlFlowElement {
: expressionEffects;
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
variable.accept(v);
iterable.accept(v);
@ -317,6 +337,7 @@ class ForInElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
variable = v.transform(variable);
variable.parent = this;
@ -339,6 +360,7 @@ class ForInElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
variable = v.transform(variable);
variable.parent = this;
@ -383,6 +405,7 @@ class ForInElement extends AuxiliaryExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter state) {
// TODO(johnniwinther): Implement this.
}
@ -410,13 +433,16 @@ mixin ControlFlowMapEntry implements MapLiteralEntry {
}
@override
// Coverage-ignore(suite): Not run.
R accept<R>(TreeVisitor<R> v) => v.visitMapLiteralEntry(this);
@override
// Coverage-ignore(suite): Not run.
R accept1<R, A>(TreeVisitor1<R, A> v, A arg) =>
v.visitMapLiteralEntry(this, arg);
@override
// Coverage-ignore(suite): Not run.
String toStringInternal() => toText(defaultAstTextStrategy);
}
@ -436,17 +462,20 @@ class SpreadMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
expression.accept(v);
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
expression = v.transform(expression);
expression.parent = this;
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
expression = v.transform(expression);
expression.parent = this;
@ -458,6 +487,7 @@ class SpreadMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('...');
expression.toTextInternal(printer);
@ -477,6 +507,7 @@ class IfMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
condition.accept(v);
then.accept(v);
@ -484,6 +515,7 @@ class IfMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
condition = v.transform(condition);
condition.parent = this;
@ -496,6 +528,7 @@ class IfMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
condition = v.transform(condition);
condition.parent = this;
@ -513,6 +546,7 @@ class IfMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('if (');
condition.toTextInternal(printer);
@ -540,6 +574,7 @@ class ForMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
visitList(variables, v);
condition?.accept(v);
@ -548,6 +583,7 @@ class ForMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
v.transformList(variables, this);
if (condition != null) {
@ -560,6 +596,7 @@ class ForMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
v.transformVariableDeclarationList(variables, this);
if (condition != null) {
@ -577,6 +614,7 @@ class ForMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('for (');
for (int index = 0; index < variables.length; index++) {
@ -615,7 +653,9 @@ class ForInMapEntry extends TreeNode with ControlFlowMapEntry {
syntheticAssignment?.parent = this;
expressionEffects?.parent = this;
body.parent = this;
problem?.parent = this;
problem
// Coverage-ignore(suite): Not run.
?.parent = this;
}
Statement? get prologue => syntheticAssignment != null
@ -624,6 +664,7 @@ class ForInMapEntry extends TreeNode with ControlFlowMapEntry {
: expressionEffects;
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
variable.accept(v);
iterable.accept(v);
@ -634,6 +675,7 @@ class ForInMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
variable = v.transform(variable);
variable.parent = this;
@ -656,6 +698,7 @@ class ForInMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
variable = v.transform(variable);
variable.parent = this;
@ -683,6 +726,7 @@ class ForInMapEntry extends TreeNode with ControlFlowMapEntry {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter state) {
// TODO(johnniwinther): Implement this.
}
@ -712,7 +756,9 @@ Expression convertToElement(
convertToElement(entry.then, helper, onConvertMapEntry),
entry.otherwise == null
? null
: convertToElement(entry.otherwise!, helper, onConvertMapEntry))
:
// Coverage-ignore(suite): Not run.
convertToElement(entry.otherwise!, helper, onConvertMapEntry))
..fileOffset = entry.fileOffset;
onConvertMapEntry(entry, result);
return result;
@ -725,7 +771,9 @@ Expression convertToElement(
then: convertToElement(entry.then, helper, onConvertMapEntry),
otherwise: entry.otherwise == null
? null
: convertToElement(entry.otherwise!, helper, onConvertMapEntry))
:
// Coverage-ignore(suite): Not run.
convertToElement(entry.otherwise!, helper, onConvertMapEntry))
..matchedValueType = entry.matchedValueType
..fileOffset = entry.fileOffset;
onConvertMapEntry(entry, result);
@ -775,6 +823,7 @@ Expression convertToElement(
return key;
}
}
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): How can this be triggered? This will fail if
// encountered in top level inference.
return helper!.buildProblem(
@ -794,12 +843,14 @@ bool isConvertibleToMapEntry(Expression element) {
if (element is IfCaseElement) {
return isConvertibleToMapEntry(element.then) &&
(element.otherwise == null ||
// Coverage-ignore(suite): Not run.
isConvertibleToMapEntry(element.otherwise!));
}
if (element is ForElement) {
return isConvertibleToMapEntry(element.body);
}
if (element is PatternForElement) {
// Coverage-ignore-block(suite): Not run.
return isConvertibleToMapEntry(element.body);
}
if (element is ForInElement) {
@ -841,7 +892,9 @@ MapLiteralEntry convertToMapEntry(Expression element, InferenceHelper helper,
then: convertToMapEntry(element.then, helper, onConvertElement),
otherwise: element.otherwise == null
? null
: convertToMapEntry(element.otherwise!, helper, onConvertElement))
:
// Coverage-ignore(suite): Not run.
convertToMapEntry(element.otherwise!, helper, onConvertElement))
..matchedValueType = element.matchedValueType
..fileOffset = element.fileOffset;
onConvertElement(element, result);
@ -882,6 +935,7 @@ MapLiteralEntry convertToMapEntry(Expression element, InferenceHelper helper,
onConvertElement(element, result);
return result;
}
// Coverage-ignore(suite): Not run.
return new MapLiteralEntry(
helper.buildProblem(
templateExpectedAfterButGot.withArguments(':'),

View File

@ -202,7 +202,10 @@ abstract class CombinedMemberSignatureBase {
/// different type.
bool get neededLegacyErasure {
_ensureCombinedMemberSignatureType();
return _neededLegacyErasureIndices?.contains(canonicalMemberIndex) ?? false;
return _neededLegacyErasureIndices
// Coverage-ignore(suite): Not run.
?.contains(canonicalMemberIndex) ??
false;
}
/// Returns `true` if nnbd top merge and normalization was needed to compute
@ -261,6 +264,7 @@ abstract class CombinedMemberSignatureBase {
norm(_coreTypes, getMemberType(index)));
assert(
_combinedMemberSignatureType != null,
// Coverage-ignore(suite): Not run.
"No combined member signature found for "
"${_mutualSubtypes!.values.map((int i) => getMemberType(i))} "
"for members ${members}");
@ -364,7 +368,9 @@ abstract class CombinedMemberSignatureBase {
}
}
return instantiator.substitute(type.withoutTypeParameters);
} else if (typeParameterCount != 0) {
}
// Coverage-ignore(suite): Not run.
else if (typeParameterCount != 0) {
return null;
}
return type;
@ -412,6 +418,7 @@ abstract class CombinedMemberSignatureBase {
combinedMemberSignatureType as FunctionType,
copyLocation: copyLocation);
break;
// Coverage-ignore(suite): Not run.
case ProcedureKind.Factory:
throw new UnsupportedError(
'Unexpected canonical member kind ${member.kind} for $member');
@ -447,6 +454,7 @@ abstract class CombinedMemberSignatureBase {
int startFileOffset;
int fileOffset;
if (copyLocation) {
// Coverage-ignore-block(suite): Not run.
fileUri = member.fileUri;
startFileOffset =
member is Procedure ? member.fileStartOffset : member.fileOffset;
@ -486,6 +494,7 @@ abstract class CombinedMemberSignatureBase {
int startFileOffset;
int fileOffset;
if (copyLocation) {
// Coverage-ignore-block(suite): Not run.
fileUri = member.fileUri;
startFileOffset =
member is Procedure ? member.fileStartOffset : member.fileOffset;
@ -504,7 +513,9 @@ abstract class CombinedMemberSignatureBase {
type: type, isCovariantByDeclaration: isCovariantByDeclaration)
..isCovariantByClass = isCovariantByClass
..fileOffset = copyLocation
? parameter?.fileOffset ?? fileOffset
?
// Coverage-ignore(suite): Not run.
parameter?.fileOffset ?? fileOffset
: fileOffset
]),
isAbstract: true,
@ -531,6 +542,7 @@ abstract class CombinedMemberSignatureBase {
int startFileOffset;
int fileOffset;
if (copyLocation) {
// Coverage-ignore-block(suite): Not run.
fileUri = procedure.fileUri;
startFileOffset = procedure.fileStartOffset;
fileOffset = procedure.fileOffset;
@ -554,7 +566,11 @@ abstract class CombinedMemberSignatureBase {
initializer: cloner.cloneOptional(parameter.initializer))
..hasDeclaredInitializer = parameter.hasDeclaredInitializer
..isCovariantByClass = parameter.isCovariantByClass
..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
..fileOffset = copyLocation
?
// Coverage-ignore(suite): Not run.
parameter.fileOffset
: fileOffset);
}
List<VariableDeclaration> namedParameters = [];
int namedParameterCount = function.namedParameters.length;
@ -568,7 +584,11 @@ abstract class CombinedMemberSignatureBase {
initializer: cloner.cloneOptional(parameter.initializer))
..hasDeclaredInitializer = parameter.hasDeclaredInitializer
..isCovariantByClass = parameter.isCovariantByClass
..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
..fileOffset = copyLocation
?
// Coverage-ignore(suite): Not run.
parameter.fileOffset
: fileOffset);
} else if (namedParameterCount > 1) {
Map<String, NamedType> namedTypes = {};
for (NamedType namedType in functionType.namedParameters) {
@ -584,7 +604,11 @@ abstract class CombinedMemberSignatureBase {
initializer: cloner.cloneOptional(parameter.initializer))
..hasDeclaredInitializer = parameter.hasDeclaredInitializer
..isCovariantByClass = parameter.isCovariantByClass
..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
..fileOffset = copyLocation
?
// Coverage-ignore(suite): Not run.
parameter.fileOffset
: fileOffset);
}
}
return new Procedure(

View File

@ -30,7 +30,9 @@ class ConstConditionalSimplifier extends RemovingTransformer {
ClassHierarchy? classHierarchy,
bool removeAsserts = false,
}) : _removeAsserts = removeAsserts {
// Coverage-ignore(suite): Not run.
coreTypes ??= new CoreTypes(_component);
// Coverage-ignore(suite): Not run.
classHierarchy ??= new ClassHierarchy(_component, coreTypes);
_typeEnvironment = new TypeEnvironment(coreTypes, classHierarchy);
constantEvaluator = new _ConstantEvaluator(
@ -64,7 +66,11 @@ class ConstConditionalSimplifier extends RemovingTransformer {
super.visitConditionalExpression(node, removalSentinel);
Constant? condition = _evaluate(node.condition);
if (condition is! BoolConstant) return node;
return condition.value ? node.then : node.otherwise;
return condition.value
? node.then
:
// Coverage-ignore(suite): Not run.
node.otherwise;
}
@override
@ -72,6 +78,7 @@ class ConstConditionalSimplifier extends RemovingTransformer {
super.visitIfStatement(node, removalSentinel);
Constant? condition = _evaluate(node.condition);
if (condition is! BoolConstant) return node;
// Coverage-ignore(suite): Not run.
if (condition.value) {
return node.then;
} else {
@ -80,6 +87,7 @@ class ConstConditionalSimplifier extends RemovingTransformer {
}
@override
// Coverage-ignore(suite): Not run.
TreeNode visitAssertBlock(AssertBlock node, TreeNode? removalSentinel) {
if (_removeAsserts) {
return removalSentinel ?? new EmptyStatement();
@ -89,6 +97,7 @@ class ConstConditionalSimplifier extends RemovingTransformer {
}
@override
// Coverage-ignore(suite): Not run.
TreeNode visitAssertInitializer(
AssertInitializer node, TreeNode? removalSentinel) {
if (_removeAsserts) {
@ -101,6 +110,7 @@ class ConstConditionalSimplifier extends RemovingTransformer {
}
@override
// Coverage-ignore(suite): Not run.
TreeNode visitAssertStatement(
AssertStatement node, TreeNode? removalSentinel) {
if (_removeAsserts) {
@ -138,11 +148,15 @@ class _ConstantEvaluator extends TryConstantEvaluator {
Constant? _evaluateFunctionInvocation(FunctionNode node) {
if (node.typeParameters.isNotEmpty ||
// Coverage-ignore(suite): Not run.
node.requiredParameterCount != 0 ||
// Coverage-ignore(suite): Not run.
node.positionalParameters.isNotEmpty ||
// Coverage-ignore(suite): Not run.
node.namedParameters.isNotEmpty) {
return null;
}
// Coverage-ignore-block(suite): Not run.
Statement? body = node.body;
if (body is! ReturnStatement) return null;
Expression? expression = body.expression;
@ -171,6 +185,7 @@ class _ConstantEvaluator extends TryConstantEvaluator {
Constant? _evaluateStaticFieldGet(Field field) {
if (_shouldNotInline(field)) return null;
if (!field.isFinal) return null;
// Coverage-ignore-block(suite): Not run.
Expression? initializer = field.initializer;
if (initializer == null) return null;
return _evaluate(initializer);
@ -179,16 +194,19 @@ class _ConstantEvaluator extends TryConstantEvaluator {
Constant? _lookupStaticFieldGet(Field field) => _staticFieldCache.putIfAbsent(
field, () => _evaluateStaticFieldGet(field));
// Coverage-ignore(suite): Not run.
Constant? _evaluateStaticGetter(Procedure getter) {
if (_shouldNotInline(getter)) return null;
return _evaluateFunctionInvocation(getter.function);
}
// Coverage-ignore(suite): Not run.
Constant? _lookupStaticGetter(Procedure getter) => _functionCache.putIfAbsent(
getter.function, () => _evaluateStaticGetter(getter));
Constant? _lookupStaticGet(Member target) {
if (target is Field) return _lookupStaticFieldGet(target);
// Coverage-ignore(suite): Not run.
return _lookupStaticGetter(target as Procedure);
}
@ -196,16 +214,19 @@ class _ConstantEvaluator extends TryConstantEvaluator {
Constant visitStaticGet(StaticGet node) =>
_lookupStaticGet(node.target) ?? super.visitStaticGet(node);
// Coverage-ignore(suite): Not run.
Constant? _evaluateLocalFunctionInvocation(LocalFunctionInvocation node) {
if (_shouldNotInline(node.variable)) return null;
return _evaluateFunctionInvocation(node.localFunction.function);
}
// Coverage-ignore(suite): Not run.
Constant? _lookupLocalFunctionInvocation(LocalFunctionInvocation node) =>
_localFunctionCache.putIfAbsent(node.localFunction.function,
() => _evaluateLocalFunctionInvocation(node));
@override
// Coverage-ignore(suite): Not run.
Constant visitLocalFunctionInvocation(LocalFunctionInvocation node) =>
_lookupLocalFunctionInvocation(node) ??
super.visitLocalFunctionInvocation(node);

View File

@ -40,9 +40,11 @@ abstract class _ListOrSetConstantBuilder<L extends Expression> {
if (constant is AbortConstant) return constant;
Constant spread = evaluator.unlower(constant);
if (evaluator.shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
// Unevaluated spread
parts.add(spread);
} else if (spread == evaluator.nullConstant) {
// Coverage-ignore-block(suite): Not run.
// Null spread
return evaluator.createEvaluationErrorConstant(
spreadExpression, messageConstEvalNullValue);
@ -54,12 +56,14 @@ abstract class _ListOrSetConstantBuilder<L extends Expression> {
} else if (spread is SetConstant) {
entries = spread.entries;
} else if (evaluator.backend.isLoweredListConstant(spread)) {
// Coverage-ignore-block(suite): Not run.
entries = <Constant>[];
evaluator.backend.forEachLoweredListConstantElement(spread,
(Constant element) {
entries.add(element);
});
} else if (evaluator.backend.isLoweredSetConstant(constant)) {
// Coverage-ignore-block(suite): Not run.
entries = <Constant>[];
evaluator.backend.forEachLoweredSetConstantElement(spread,
(Constant element) {
@ -129,6 +133,7 @@ class ListConstantBuilder extends _ListOrSetConstantBuilder<ListLiteral> {
for (Object part in parts) {
if (part is List<Constant>) {
if (part.isEmpty) continue;
// Coverage-ignore-block(suite): Not run.
lists.add(new ConstantExpression(new ListConstant(elementType, part)));
} else if (part is Constant) {
lists.add(evaluator._wrap(part));
@ -150,6 +155,7 @@ class SetConstantBuilder extends _ListOrSetConstantBuilder<SetLiteral> {
: super(original, elementType, evaluator);
@override
// Coverage-ignore(suite): Not run.
SetLiteral makeLiteral(List<Expression> elements) =>
new SetLiteral(elements, isConst: true);
@ -163,6 +169,7 @@ class SetConstantBuilder extends _ListOrSetConstantBuilder<SetLiteral> {
templateConstEvalElementNotPrimitiveEquality
.withArguments(constant));
} else {
// Coverage-ignore-block(suite): Not run.
return evaluator.createEvaluationErrorConstant(context,
templateConstEvalElementImplementsEqual.withArguments(constant));
}
@ -193,6 +200,7 @@ class SetConstantBuilder extends _ListOrSetConstantBuilder<SetLiteral> {
SetConstant result = new SetConstant(elementType, entries);
return evaluator.lowerSetConstant(result);
}
// Coverage-ignore-block(suite): Not run.
List<Expression> sets = <Expression>[];
for (Object part in parts) {
if (part is List<Constant>) {
@ -235,6 +243,7 @@ class MapConstantBuilder {
Constant value = evaluator._evaluateSubexpression(element.value);
if (value is AbortConstant) return value;
if (evaluator.shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
parts.add(evaluator.unevaluated(
element.key,
new MapLiteral([
@ -253,9 +262,11 @@ class MapConstantBuilder {
if (constant is AbortConstant) return constant;
Constant spread = evaluator.unlower(constant);
if (evaluator.shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
// Unevaluated spread
parts.add(spread);
} else if (spread == evaluator.nullConstant) {
// Coverage-ignore-block(suite): Not run.
// Null spread
return evaluator.createEvaluationErrorConstant(
spreadExpression, messageConstEvalNullValue);
@ -268,6 +279,7 @@ class MapConstantBuilder {
if (error != null) return error;
}
} else if (evaluator.backend.isLoweredMapConstant(spread)) {
// Coverage-ignore-block(suite): Not run.
AbortConstant? error;
evaluator.backend.forEachLoweredMapConstantEntry(spread,
(Constant key, Constant value) {
@ -300,6 +312,7 @@ class MapConstantBuilder {
return evaluator.createEvaluationErrorConstant(keyContext,
templateConstEvalKeyNotPrimitiveEquality.withArguments(key));
} else {
// Coverage-ignore-block(suite): Not run.
return evaluator.createEvaluationErrorConstant(
keyContext, templateConstEvalKeyImplementsEqual.withArguments(key));
}
@ -325,6 +338,7 @@ class MapConstantBuilder {
return evaluator
.lowerMapConstant(new MapConstant(keyType, valueType, entries));
}
// Coverage-ignore-block(suite): Not run.
List<Expression> maps = <Expression>[];
for (Object part in parts) {
if (part is List<ConstantMapEntry>) {

View File

@ -346,12 +346,14 @@ class ConstantsTransformer extends RemovingTransformer {
if (StaticWeakReferences.isAnnotatedWithWeakReferencePragma(
parent, typeEnvironment.coreTypes)) {
// Coverage-ignore-block(suite): Not run.
StaticWeakReferences.validateWeakReferenceDeclaration(
parent, constantEvaluator.errorReporter);
}
final Iterable<InstanceConstant> resourceAnnotations =
ResourceIdentifiers.findResourceAnnotations(parent);
if (resourceAnnotations.isNotEmpty) {
// Coverage-ignore-block(suite): Not run.
ResourceIdentifiers.validateResourceIdentifierDeclaration(
parent, constantEvaluator.errorReporter, resourceAnnotations);
}
@ -453,7 +455,9 @@ class ConstantsTransformer extends RemovingTransformer {
evaluateAndTransformWithContext(node, initializer!)..parent = node;
// If this constant is inlined, remove it.
if (!keepFields && shouldInline(initializer)) {
if (!keepFields &&
// Coverage-ignore(suite): Not run.
shouldInline(initializer)) {
return removalSentinel!;
}
} else {
@ -511,6 +515,7 @@ class ConstantsTransformer extends RemovingTransformer {
}
} else if (target is Procedure) {
if (target.kind == ProcedureKind.Method) {
// Coverage-ignore-block(suite): Not run.
return evaluateAndTransformWithContext(node, node);
} else if (target.kind == ProcedureKind.Getter && enableConstFunctions) {
return evaluateAndTransformWithContext(node, node);
@ -550,6 +555,7 @@ class ConstantsTransformer extends RemovingTransformer {
// Handle [StaticGet] of constant fields also when these are not inlined.
expression = (expression.target as Field).initializer!;
} else if (expression is VariableGet && expression.variable.isConst) {
// Coverage-ignore-block(suite): Not run.
// Handle [VariableGet] of constant locals also when these are not
// inlined.
expression = expression.variable.initializer!;
@ -907,6 +913,7 @@ class ConstantsTransformer extends RemovingTransformer {
if (isAlwaysExhaustiveType &&
!hasDefault &&
constantEvaluator.evaluationMode != EvaluationMode.strong) {
// Coverage-ignore-block(suite): Not run.
if (!node.lastCaseTerminates) {
PatternSwitchCase lastCase = node.cases.last;
Statement body = lastCase.body;
@ -1179,6 +1186,7 @@ class ConstantsTransformer extends RemovingTransformer {
if (labelUser is ContinueSwitchStatement) {
labelUser.target = replacementCase;
} else {
// Coverage-ignore-block(suite): Not run.
// TODO(cstefantsova): Handle other label user types.
return throw new UnsupportedError(
"Unexpected label user: ${labelUser.runtimeType}");
@ -1201,6 +1209,7 @@ class ConstantsTransformer extends RemovingTransformer {
if (caseIndex == node.cases.length - 1 &&
needsThrowForNull &&
!node.lastCaseTerminates) {
// Coverage-ignore-block(suite): Not run.
LabeledStatement target;
if (node.parent is LabeledStatement) {
target = node.parent as LabeledStatement;
@ -1214,7 +1223,9 @@ class ConstantsTransformer extends RemovingTransformer {
cases.add(createBlock([
...caseVariables,
caseBlock,
if (breakStatement != null) breakStatement
if (breakStatement != null)
// Coverage-ignore(suite): Not run.
breakStatement
], fileOffset: switchCase.fileOffset));
}
@ -1226,7 +1237,9 @@ class ConstantsTransformer extends RemovingTransformer {
createStringLiteral(
forUnsoundness
? messageUnsoundSwitchStatementError.problemMessage
: messageNeverReachableSwitchStatementError
:
// Coverage-ignore(suite): Not run.
messageNeverReachableSwitchStatementError
.problemMessage,
fileOffset: node.fileOffset)
], fileOffset: node.fileOffset),
@ -1270,6 +1283,7 @@ class ConstantsTransformer extends RemovingTransformer {
}
if (replacementStatements.length == 1) {
// Coverage-ignore-block(suite): Not run.
replacement = replacementStatements.first;
} else {
replacement = new Block(replacementStatements)
@ -1277,6 +1291,7 @@ class ConstantsTransformer extends RemovingTransformer {
}
}
if (outerLabeledStatement != null) {
// Coverage-ignore-block(suite): Not run.
outerLabeledStatement.body = replacement..parent = outerLabeledStatement;
replacement = outerLabeledStatement;
}
@ -1324,14 +1339,17 @@ class ConstantsTransformer extends RemovingTransformer {
computeUnreachable: retainDataForTesting);
List<ExhaustivenessError>? reportedErrors;
if (_exhaustivenessDataForTesting != null) {
// Coverage-ignore-block(suite): Not run.
reportedErrors = [];
}
for (ExhaustivenessError error in errors) {
if (error is UnreachableCaseError) {
// Coverage-ignore-block(suite): Not run.
reportedErrors?.add(error);
} else if (error is NonExhaustiveError &&
!hasDefault &&
mustBeExhaustive) {
// Coverage-ignore(suite): Not run.
reportedErrors?.add(error);
constantEvaluator.errorReporter.report(
constantEvaluator.createLocatedMessageWithOffset(
@ -1347,6 +1365,7 @@ class ConstantsTransformer extends RemovingTransformer {
}
}
if (_exhaustivenessDataForTesting != null) {
// Coverage-ignore-block(suite): Not run.
_exhaustivenessDataForTesting.objectFieldLookup ??= _exhaustivenessCache;
_exhaustivenessDataForTesting.switchResults[replacement] =
new ExhaustivenessResult(type, cases,
@ -1432,7 +1451,9 @@ class ConstantsTransformer extends RemovingTransformer {
// the else-statement is not covered.
createBoolLiteral(true, fileOffset: node.fileOffset);
if (statements.isNotEmpty ||
// Coverage-ignore(suite): Not run.
expressionEffects.isNotEmpty ||
// Coverage-ignore(suite): Not run.
statementEffects.isNotEmpty) {
then = createBlock([
...statements,
@ -1607,7 +1628,9 @@ class ConstantsTransformer extends RemovingTransformer {
fileOffset: node.fileOffset),
forErrorHandling: true)),
fileOffset: node.fileOffset),
...effects.map((e) => createExpressionStatement(e)),
...effects.map(
// Coverage-ignore(suite): Not run.
(e) => createExpressionStatement(e)),
];
}
@ -1628,6 +1651,7 @@ class ConstantsTransformer extends RemovingTransformer {
// This avoids unnecessary [BlockExpression]s created by the lowering of
// [PatternAssignment]s for effect.
if (_exhaustivenessDataForTesting != null) {
// Coverage-ignore-block(suite): Not run.
ExhaustivenessResult? result =
_exhaustivenessDataForTesting.switchResults[expression];
if (result != null) {
@ -1762,6 +1786,7 @@ class ConstantsTransformer extends RemovingTransformer {
switchCases.add(switchCase);
}
if (constantEvaluator.evaluationMode != EvaluationMode.strong) {
// Coverage-ignore-block(suite): Not run.
switchCases.add(new SwitchCase(
[],
[],
@ -1854,7 +1879,9 @@ class ConstantsTransformer extends RemovingTransformer {
// case.
createBoolLiteral(true, fileOffset: node.fileOffset);
if (statements.isNotEmpty ||
// Coverage-ignore(suite): Not run.
expressionEffects.isNotEmpty ||
// Coverage-ignore(suite): Not run.
statementEffects.isNotEmpty) {
tailStatements = [
...statements,
@ -1904,7 +1931,9 @@ class ConstantsTransformer extends RemovingTransformer {
createStringLiteral(
forUnsoundness
? messageUnsoundSwitchExpressionError.problemMessage
: messageNeverReachableSwitchExpressionError
:
// Coverage-ignore(suite): Not run.
messageNeverReachableSwitchExpressionError
.problemMessage,
fileOffset: node.fileOffset)
], fileOffset: node.fileOffset),
@ -2008,6 +2037,7 @@ class ConstantsTransformer extends RemovingTransformer {
if (allConstant) {
if (hasUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return makeConstantExpression(new UnevaluatedConstant(node), node);
} else {
Constant constant = constantEvaluator.canonicalize(
@ -2118,6 +2148,7 @@ class ConstantsTransformer extends RemovingTransformer {
// arguments are already constant evaluated.
if (StaticWeakReferences.isAnnotatedWithWeakReferencePragma(
node.target, typeEnvironment.coreTypes)) {
// Coverage-ignore-block(suite): Not run.
StaticWeakReferences.validateWeakReferenceUse(
node, constantEvaluator.errorReporter);
}
@ -2129,6 +2160,7 @@ class ConstantsTransformer extends RemovingTransformer {
ConstantExpression node, TreeNode? removalSentinel) {
Constant constant = node.constant;
if (constant is UnevaluatedConstant && constantEvaluator.hasEnvironment) {
// Coverage-ignore-block(suite): Not run.
Expression expression = constant.expression;
return evaluateAndTransformWithContext(expression, expression);
} else {
@ -2297,6 +2329,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
bool hasEnvironmentKey(String key) {
if (DartLibrarySupport.isDartLibraryQualifier(key)) {
// Coverage-ignore-block(suite): Not run.
return (_supportedLibrariesCache ??= _computeSupportedLibraries())
.containsKey(key);
}
@ -2309,6 +2342,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
switch (evaluationMode) {
case EvaluationMode.strong:
return norm(coreTypes, type);
// Coverage-ignore(suite): Not run.
case EvaluationMode.weak:
type = norm(coreTypes, type);
return computeConstCanonicalType(type, coreTypes) ?? type;
@ -2319,6 +2353,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
switch (evaluationMode) {
case EvaluationMode.strong:
return types.map((DartType type) => norm(coreTypes, type)).toList();
// Coverage-ignore(suite): Not run.
case EvaluationMode.weak:
return types.map((DartType type) {
type = norm(coreTypes, type);
@ -2330,6 +2365,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
LocatedMessage createLocatedMessage(TreeNode? node, Message message) {
Uri? uri = getFileUri(node);
if (uri == null) {
// Coverage-ignore-block(suite): Not run.
// TODO(johnniwinther): Ensure that we always have a uri.
return message.withoutLocation();
}
@ -2341,6 +2377,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
TreeNode? node, int offset, Message message) {
Uri? uri = getFileUri(node);
if (uri == null) {
// Coverage-ignore-block(suite): Not run.
// TODO(johnniwinther): Ensure that we always have a uri.
return message.withoutLocation();
}
@ -2402,6 +2439,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
locatedMessageActualError
];
if (result.context != null) {
// Coverage-ignore-block(suite): Not run.
contextMessages.addAll(result.context!);
}
if (contextNode != null && contextNode != result.node) {
@ -2455,6 +2493,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
if (result is UnevaluatedConstant) {
if (errorOnUnevaluatedConstant) {
// Coverage-ignore-block(suite): Not run.
return createEvaluationErrorConstant(node, messageConstEvalUnevaluated);
}
return canonicalize(new UnevaluatedConstant(
@ -2486,6 +2525,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
// No return statement in function body with void return type.
return new NullConstant();
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
statement,
templateConstEvalError.withArguments(
@ -2496,7 +2536,9 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
/// Returns [null] on success and an error-"constant" on failure, as such the
/// return value should be checked.
AbortConstant? executeConstructorBody(Constructor constructor) {
if (!enableConstFunctions && !inExtensionTypeConstConstructor) {
if (!enableConstFunctions &&
// Coverage-ignore(suite): Not run.
!inExtensionTypeConstConstructor) {
throw new UnsupportedError("Statement evaluation is only supported when "
"in extension type const constructors or when the const functions "
"feature is enabled.");
@ -2515,6 +2557,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
templateConstEvalError
.withArguments("Constructors can't have a return value."));
} else if (status is! ProceedStatus) {
// Coverage-ignore-block(suite): Not run.
return createEvaluationErrorConstant(
constructor,
templateConstEvalError
@ -2572,6 +2615,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Constant lower(Constant original, Constant replacement) {
if (!identical(original, replacement)) {
// Coverage-ignore-block(suite): Not run.
original = canonicalize(original);
replacement = canonicalize(replacement);
lowered[replacement] = original;
@ -2835,6 +2879,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
assert(_gotError == null);
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(
node,
new RecordLiteral([
@ -2852,6 +2897,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Constant visitListConcatenation(ListConcatenation node) {
DartType? type = _evaluateDartType(node, node.typeArgument);
if (type == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -2904,6 +2950,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Constant visitSetConcatenation(SetConcatenation node) {
DartType? type = _evaluateDartType(node, node.typeArgument);
if (type == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -2964,6 +3011,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Constant visitMapConcatenation(MapConcatenation node) {
DartType? keyType = _evaluateDartType(node, node.keyType);
if (keyType == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -2971,6 +3019,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
assert(_gotError == null);
DartType? valueType = _evaluateDartType(node, node.valueType);
if (valueType == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3033,6 +3082,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
bool isSymbol = klass == coreTypes.internalSymbolClass;
if (isSymbol && shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(
node,
new ConstructorInvocation(constructor,
@ -3050,6 +3100,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (nameValue is StringConstant) {
return canonicalize(new SymbolConstant(nameValue.value, null));
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(node.arguments.positional.first,
templateConstEvalInvalidSymbolName.withArguments(nameValue));
}
@ -3065,7 +3116,10 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final List<DartType> typeArguments = convertTypes(types);
// Fill in any missing type arguments with "dynamic".
for (int i = typeArguments.length; i < klass.typeParameters.length; i++) {
for (int i = typeArguments.length;
i < klass.typeParameters.length;
// Coverage-ignore(suite): Not run.
i++) {
// Coverage-ignore: Probably unreachable.
typeArguments.add(const DynamicType());
}
@ -3086,6 +3140,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
constructor, typeArguments, positional, named, node);
if (error != null) return error;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(node, instanceBuilder!.buildUnevaluatedInstance());
}
return canonicalize(instanceBuilder!.buildInstance());
@ -3117,6 +3172,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return withNewInstanceBuilder(
node.classNode, convertTypes(node.typeArguments), () {
for (AssertStatement statement in node.asserts) {
// Coverage-ignore-block(suite): Not run.
AbortConstant? error = checkAssert(statement);
if (error != null) return error;
}
@ -3133,6 +3189,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
if (error != null) return error;
for (Expression value in node.unusedArguments) {
// Coverage-ignore-block(suite): Not run.
if (error != null) return error;
Constant constant = _evaluateSubexpression(value);
if (constant is AbortConstant) {
@ -3145,6 +3202,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
if (error != null) return error;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(node, instanceBuilder!.buildUnevaluatedInstance());
}
// We can get here when re-evaluating a previously unevaluated constant.
@ -3217,6 +3275,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
List<DartType>? types = _evaluateSuperTypeArguments(
init, constructor.enclosingClass.supertype!);
if (types == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3226,6 +3285,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
List<Constant>? positionalArguments =
_evaluatePositionalArguments(init.arguments.positional);
if (positionalArguments == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3234,6 +3294,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Map<String, Constant>? namedArguments =
_evaluateNamedArguments(init.arguments.named);
if (namedArguments == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3252,6 +3313,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
List<Constant>? positionalArguments =
_evaluatePositionalArguments(init.arguments.positional);
if (positionalArguments == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3261,6 +3323,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Map<String, Constant>? namedArguments =
_evaluateNamedArguments(init.arguments.named);
if (namedArguments == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3274,6 +3337,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
AbortConstant? error = checkAssert(init.statement);
if (error != null) return error;
} else {
// Coverage-ignore-block(suite): Not run.
// Coverage-ignore: Probably unreachable.
// InvalidInitializer or new Initializers.
// InvalidInitializer is (currently) only
@ -3291,6 +3355,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
for (UnevaluatedConstant constant in env.unevaluatedUnreadConstants) {
// Coverage-ignore-block(suite): Not run.
instanceBuilder!.unusedArguments.add(_wrap(constant));
}
@ -3311,6 +3376,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (condition is AbortConstant) return condition;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
Expression? message = null;
if (statement.message != null) {
enterLazy();
@ -3332,6 +3398,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant message = _evaluateSubexpression(statement.message!);
if (message is AbortConstant) return message;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
instanceBuilder!.asserts.add(new AssertStatement(_wrap(condition),
message: _wrap(message),
conditionStartOffset: statement.conditionStartOffset,
@ -3350,6 +3417,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
}
} else {
// Coverage-ignore-block(suite): Not run.
return createEvaluationErrorConstant(
statement.condition,
templateConstEvalInvalidType.withArguments(
@ -3387,6 +3455,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
_evaluatePositionalArguments(node.arguments.positional);
if (positionalArguments == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3394,6 +3463,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
assert(_gotError == null);
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(
node,
new DynamicInvocation(
@ -3438,6 +3508,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
assert(_gotError == null);
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(
node,
new InstanceInvocation(
@ -3490,6 +3561,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
_evaluatePositionalArguments(arguments.positional);
if (positional == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3499,6 +3571,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
// Evaluate type arguments of the function invoked.
List<DartType>? types = _evaluateTypeArguments(node, arguments);
if (types == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3509,6 +3582,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Map<String, Constant>? named =
_evaluateNamedArguments(arguments.named);
if (named == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3520,6 +3594,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
receiver.function, types, positional, named,
functionEnvironment: receiver.environment);
} else {
// Coverage-ignore-block(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalError
@ -3534,6 +3609,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant right = _evaluateSubexpression(node.right);
if (right is AbortConstant) return right;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(
node,
new EqualsCall(_wrap(left), _wrap(right),
@ -3551,6 +3627,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (expression is AbortConstant) return expression;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(node,
new EqualsNull(_wrap(expression))..fileOffset = node.fileOffset);
}
@ -3572,6 +3649,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
left, left.getType(staticTypeContext)));
}
} else {
// Coverage-ignore-block(suite): Not run.
if (left is NullConstant ||
left is BoolConstant ||
left is IntConstant ||
@ -3600,12 +3678,14 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (receiver is PrimitiveConstant &&
op == 'toString' &&
enableConstFunctions) {
// Coverage-ignore-block(suite): Not run.
return new StringConstant(receiver.value.toString());
}
// Handle == and != first (it's common between all types). Since `a != b` is
// parsed as `!(a == b)` it is handled implicitly through ==.
if (positionalArguments.length == 1 && op == '==') {
// Coverage-ignore-block(suite): Not run.
final Constant right = positionalArguments[0];
return _handleEquals(node, receiver, right);
}
@ -3637,6 +3717,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
return canonicalize(new StringConstant(receiver.value[index]));
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidBinaryOperandType.withArguments(
@ -3702,6 +3783,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return canonicalize(
evaluateBinaryNumericOperation(op, receiver.value, value, node));
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidBinaryOperandType.withArguments(
@ -3742,6 +3824,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
return receiver.entries[index];
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidBinaryOperandType.withArguments(
@ -3774,6 +3857,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
// Evaluate type arguments of the method invoked.
List<DartType>? typeArguments = _evaluateTypeArguments(node, arguments);
if (typeArguments == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
@ -3784,13 +3868,17 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Map<String, Constant>? namedArguments =
_evaluateNamedArguments(arguments.named);
if (namedArguments == null) {
// Coverage-ignore-block(suite): Not run.
AbortConstant error = _gotError!;
_gotError = null;
return error;
}
assert(_gotError == null);
if (receiver is FunctionValue && name == Name.callName) {
if (receiver is FunctionValue &&
// Coverage-ignore(suite): Not run.
name == Name.callName) {
// Coverage-ignore-block(suite): Not run.
return _handleFunctionInvocation(receiver.function, typeArguments,
positionalArguments, namedArguments,
functionEnvironment: receiver.environment);
@ -3841,6 +3929,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant left = _evaluateSubexpression(node.left);
if (left is AbortConstant) return left;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
enterLazy();
Constant right = _evaluateSubexpression(node.right);
if (right is AbortConstant) return right;
@ -3855,9 +3944,12 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant right = _evaluateSubexpression(node.right);
if (right is AbortConstant) return right;
if (right is BoolConstant || right is UnevaluatedConstant) {
if (right is BoolConstant ||
// Coverage-ignore(suite): Not run.
right is UnevaluatedConstant) {
return right;
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidBinaryOperandType.withArguments(
@ -3866,6 +3958,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
typeEnvironment.coreTypes.boolNonNullableRawType,
right.getType(staticTypeContext)));
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidMethodInvocation.withArguments(
@ -3876,9 +3969,12 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant right = _evaluateSubexpression(node.right);
if (right is AbortConstant) return right;
if (right is BoolConstant || right is UnevaluatedConstant) {
if (right is BoolConstant ||
// Coverage-ignore(suite): Not run.
right is UnevaluatedConstant) {
return right;
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidBinaryOperandType.withArguments(
@ -3887,6 +3983,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
typeEnvironment.coreTypes.boolNonNullableRawType,
right.getType(staticTypeContext)));
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidMethodInvocation.withArguments(
@ -3914,6 +4011,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
new ConditionalExpression(_wrap(condition), _wrap(then),
_wrap(otherwise), env.substituteType(node.staticType)));
} else {
// Coverage-ignore-block(suite): Not run.
return createEvaluationErrorConstant(
node.condition,
templateConstEvalInvalidType.withArguments(
@ -3957,6 +4055,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (receiver is StringConstant && node.name.text == 'length') {
return canonicalize(intFolder.makeIntConstant(receiver.value.length));
} else if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(
node,
new InstanceGet(node.kind, _wrap(receiver), node.name,
@ -4016,6 +4115,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant receiver = _evaluateSubexpression(node.receiver);
if (receiver is AbortConstant) return receiver;
if (receiver is RecordConstant && enableConstFunctions) {
// Coverage-ignore-block(suite): Not run.
if (node.index >= receiver.positional.length) {
return new _AbortDueToThrowConstant(node, new StateError('No element'));
}
@ -4032,6 +4132,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant receiver = _evaluateSubexpression(node.receiver);
if (receiver is AbortConstant) return receiver;
if (receiver is RecordConstant && enableConstFunctions) {
// Coverage-ignore-block(suite): Not run.
Constant? result = receiver.named[node.name];
if (result == null) {
return new _AbortDueToThrowConstant(node, new StateError('No element'));
@ -4051,12 +4152,15 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (receiver is AbortConstant) return receiver;
if (receiver is StringConstant && node.name.text == 'length') {
return canonicalize(intFolder.makeIntConstant(receiver.value.length));
} else if (shouldBeUnevaluated) {
}
// Coverage-ignore(suite): Not run.
else if (shouldBeUnevaluated) {
return unevaluated(
node, new DynamicGet(node.kind, _wrap(receiver), node.name));
} else if (receiver is NullConstant) {
return createEvaluationErrorConstant(node, messageConstEvalNullValue);
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidPropertyGet.withArguments(
@ -4077,6 +4181,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Constant visitFunctionTearOff(FunctionTearOff node) {
final Constant receiver = _evaluateSubexpression(node.receiver);
if (receiver is AbortConstant) return receiver;
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidPropertyGet.withArguments(
@ -4102,6 +4207,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final VariableDeclaration variable = node.variable;
if (enableConstFunctions || inExtensionTypeConstConstructor) {
return env.lookupVariable(variable) ??
// Coverage-ignore(suite): Not run.
createEvaluationErrorConstant(
node,
templateConstEvalGetterNotFound
@ -4136,6 +4242,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (result != null) {
return result;
}
// Coverage-ignore(suite): Not run.
return createEvaluationErrorConstant(
node,
templateConstEvalError
@ -4166,6 +4273,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
() => evaluateExpressionInContext(target, target.initializer!));
} else if (target is Procedure) {
if (target.kind == ProcedureKind.Method) {
// Coverage-ignore-block(suite): Not run.
// TODO(johnniwinther): Remove this. This should never occur.
return canonicalize(new StaticTearOffConstant(target));
} else if (target.kind == ProcedureKind.Getter && enableConstFunctions) {
@ -4200,9 +4308,11 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (last is StringBuffer) {
last.write(value);
} else {
// Coverage-ignore-block(suite): Not run.
concatenated.add(new StringBuffer(value));
}
} else if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
// The constant is either unevaluated or a non-primitive in an
// unevaluated context. In both cases we defer the evaluation and/or
// error reporting till later.
@ -4215,6 +4325,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
}
if (concatenated.length > 1) {
// Coverage-ignore-block(suite): Not run.
final List<Expression> expressions =
new List<Expression>.generate(concatenated.length, (int i) {
Object value = concatenated[i];
@ -4251,7 +4362,9 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
} else if (defaultValue != null) {
if (defaultValue is BoolConstant) {
boolConstant = makeBoolConstant(defaultValue.value);
} else if (defaultValue is NullConstant) {
}
// Coverage-ignore(suite): Not run.
else if (defaultValue is NullConstant) {
boolConstant = nullConstant;
} else {
// Coverage-ignore: Probably unreachable.
@ -4271,6 +4384,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (intFolder.isInt(defaultValue)) {
intConstant = defaultValue;
} else {
// Coverage-ignore-block(suite): Not run.
intConstant = nullConstant;
}
} else {
@ -4285,6 +4399,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (defaultValue is StringConstant) {
stringConstant = defaultValue;
} else {
// Coverage-ignore-block(suite): Not run.
stringConstant = nullConstant;
}
} else {
@ -4356,7 +4471,9 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
} else {
return _handleHasEnvironment(name);
}
} else if (name is NullConstant) {
}
// Coverage-ignore(suite): Not run.
else if (name is NullConstant) {
return createEvaluationErrorConstant(
node, messageConstEvalNullValue);
}
@ -4388,6 +4505,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return createExpressionErrorConstant(node,
templateNotConstantExpression.withArguments('New expression'));
} else {
// Coverage-ignore-block(suite): Not run.
return createEvaluationErrorConstant(
node,
templateNotConstantExpression
@ -4470,6 +4588,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant result = executeBody(function.body!);
if (result is NullConstant &&
function.returnType.nullability == Nullability.nonNullable) {
// Coverage-ignore-block(suite): Not run.
// Ensure that the evaluated constant returned is not null if the
// function has a non-nullable return type.
return createEvaluationErrorConstant(
@ -4491,6 +4610,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant constant = _evaluateSubexpression(node.operand);
if (constant is AbortConstant) return constant;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(node,
new AsExpression(_wrap(constant), env.substituteType(node.type)));
}
@ -4509,6 +4629,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant constant = _evaluateSubexpression(node.operand);
if (constant is AbortConstant) return constant;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(
node,
new IsExpression(_wrap(constant), env.substituteType(node.type))
@ -4527,6 +4648,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (strongMode) {
return isSubtype(constant, type, SubtypeCheckMode.withNullabilities);
} else {
// Coverage-ignore-block(suite): Not run.
// In weak checking mode: if e evaluates to a value v and v has runtime
// type S, an instance check e is T occurring in a legacy library or an
// opted-in library is evaluated as follows:
@ -4556,6 +4678,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
switch (evaluationMode) {
case EvaluationMode.strong:
return makeBoolConstant(performIs(constant, strongMode: true));
// Coverage-ignore(suite): Not run.
case EvaluationMode.weak:
return makeBoolConstant(performIs(constant, strongMode: false));
}
@ -4568,6 +4691,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (constant is BoolConstant) {
return makeBoolConstant(constant != trueConstant);
}
// Coverage-ignore-block(suite): Not run.
if (shouldBeUnevaluated) {
return unevaluated(node, new Not(_wrap(constant)));
}
@ -4587,6 +4711,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return createEvaluationErrorConstant(node, messageConstEvalNonNull);
}
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(node, new NullCheck(_wrap(constant)));
}
return constant;
@ -4614,6 +4739,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Constant constant = _evaluateSubexpression(node.expression);
if (constant is AbortConstant) return constant;
if (shouldBeUnevaluated) {
// Coverage-ignore-block(suite): Not run.
return unevaluated(
node,
new Instantiation(_wrap(constant),
@ -4807,6 +4933,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
DartType constantType =
constant.getType(staticTypeContext).extensionTypeErasure;
if (mode == SubtypeCheckMode.ignoringNullabilities) {
// Coverage-ignore-block(suite): Not run.
constantType = rawLegacyErasure(constantType) ?? constantType;
}
if (type is RecordType && constant is RecordConstant) {
@ -4859,6 +4986,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
case EvaluationMode.strong:
result = isSubtype(constant, type, SubtypeCheckMode.withNullabilities);
break;
// Coverage-ignore(suite): Not run.
case EvaluationMode.weak:
result =
isSubtype(constant, type, SubtypeCheckMode.ignoringNullabilities);
@ -4990,7 +5118,9 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
positional[i] = _wrap(positionalArgs[i]);
}
int i = 0;
namedArgs.forEach((String name, Constant value) {
namedArgs.forEach(
// Coverage-ignore(suite): Not run.
(String name, Constant value) {
named[i++] = new NamedExpression(name, _wrap(value));
});
return new Arguments(positional, named: named, types: types);
@ -5097,6 +5227,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Constant visitStaticSet(StaticSet node) => _notAConstantExpression(node);
@override
// Coverage-ignore(suite): Not run.
Constant visitAbstractSuperMethodInvocation(
AbstractSuperMethodInvocation node) =>
_notAConstantExpression(node);
@ -5106,10 +5237,12 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
_notAConstantExpression(node);
@override
// Coverage-ignore(suite): Not run.
Constant visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) =>
_notAConstantExpression(node);
@override
// Coverage-ignore(suite): Not run.
Constant visitAbstractSuperPropertySet(AbstractSuperPropertySet node) =>
_notAConstantExpression(node);
@ -5126,12 +5259,14 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
_notAConstantExpression(node);
@override
// Coverage-ignore(suite): Not run.
Constant visitSwitchExpression(SwitchExpression node) {
return createExpressionErrorConstant(
node, templateNotConstantExpression.withArguments('Switch expression'));
}
@override
// Coverage-ignore(suite): Not run.
Constant visitPatternAssignment(PatternAssignment node) {
return createExpressionErrorConstant(node,
templateNotConstantExpression.withArguments('Pattern assignment'));
@ -5153,6 +5288,7 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
Constant evaluate(Expression expr) => expr.accept(exprEvaluator);
@override
// Coverage-ignore(suite): Not run.
ExecutionStatus visitAssertBlock(AssertBlock node) {
if (!exprEvaluator.enableAsserts) return const ProceedStatus();
throw new UnsupportedError(
@ -5195,6 +5331,7 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
} while (condition is BoolConstant && condition.value);
if (condition is AbortConstant) {
// Coverage-ignore-block(suite): Not run.
return new AbortStatus(condition);
}
assert(condition is BoolConstant);
@ -5220,6 +5357,7 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
ExecutionStatus visitIfStatement(IfStatement node) {
Constant condition = evaluate(node.condition);
if (condition is AbortConstant) {
// Coverage-ignore-block(suite): Not run.
return new AbortStatus(condition);
}
assert(condition is BoolConstant);
@ -5259,6 +5397,7 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
}
if (condition is AbortConstant) {
// Coverage-ignore-block(suite): Not run.
return new AbortStatus(condition);
}
assert(condition is BoolConstant);
@ -5295,6 +5434,7 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
ExecutionStatus visitSwitchStatement(SwitchStatement node) {
final Constant value = evaluate(node.expression);
if (value is AbortConstant) {
// Coverage-ignore-block(suite): Not run.
return new AbortStatus(value);
}
@ -5388,6 +5528,7 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
condition = evaluate(node.condition);
}
if (condition is AbortConstant) {
// Coverage-ignore-block(suite): Not run.
return new AbortStatus(condition);
}
assert(condition is BoolConstant);
@ -5395,12 +5536,14 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
}
@override
// Coverage-ignore(suite): Not run.
ExecutionStatus visitForInStatement(ForInStatement node) {
return new AbortStatus(exprEvaluator.createEvaluationErrorConstant(
node, templateConstEvalError.withArguments('For-in statement.')));
}
@override
// Coverage-ignore(suite): Not run.
ExecutionStatus visitIfCaseStatement(IfCaseStatement node) {
return new AbortStatus(exprEvaluator.createEvaluationErrorConstant(
node, templateConstEvalError.withArguments('If-case statement.')));
@ -5413,6 +5556,7 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
}
@override
// Coverage-ignore(suite): Not run.
ExecutionStatus visitPatternVariableDeclaration(
PatternVariableDeclaration node) {
return new AbortStatus(exprEvaluator.createEvaluationErrorConstant(node,
@ -5420,6 +5564,7 @@ class StatementConstantEvaluator implements StatementVisitor<ExecutionStatus> {
}
@override
// Coverage-ignore(suite): Not run.
ExecutionStatus visitYieldStatement(YieldStatement node) {
return new AbortStatus(exprEvaluator.createEvaluationErrorConstant(
node, templateConstEvalError.withArguments('Yield statement.')));
@ -5558,6 +5703,7 @@ class EvaluationEnvironment {
/// The unevaluated constants of variables that were never read.
Iterable<UnevaluatedConstant> get unevaluatedUnreadConstants {
if (_unreadUnevaluatedVariables.isEmpty) return const [];
// Coverage-ignore(suite): Not run.
return _unreadUnevaluatedVariables.map<UnevaluatedConstant>(
(VariableDeclaration variable) =>
_variables[variable]!.value as UnevaluatedConstant);
@ -5580,6 +5726,7 @@ class RedundantFileUriExpressionRemover extends Transformer {
@override
TreeNode visitFileUriExpression(FileUriExpression node) {
if (node.fileUri == currentFileUri) {
// Coverage-ignore-block(suite): Not run.
return node.expression.accept(this);
} else {
Uri? oldFileUri = currentFileUri;
@ -5898,6 +6045,7 @@ abstract class ErrorReporter {
void report(LocatedMessage message, [List<LocatedMessage>? context]);
}
// Coverage-ignore(suite): Not run.
class SimpleErrorReporter implements ErrorReporter {
const SimpleErrorReporter();

View File

@ -174,6 +174,7 @@ class JsConstantIntFolder extends ConstantIntFolder {
}
@override
// Coverage-ignore(suite): Not run.
int? asInt(Constant constant) {
if (constant is DoubleConstant && _valueIsInteger(constant.value)) {
return constant.value.toInt();

View File

@ -91,6 +91,7 @@ DelayedDefaultValueCloner buildConstructorTearOffProcedure(
declarationConstructor.isFactory) ||
(declarationConstructor is Procedure &&
declarationConstructor.isStatic),
// Coverage-ignore(suite): Not run.
"Unexpected constructor tear off target $declarationConstructor "
"(${declarationConstructor.runtimeType}).");
assert(
@ -99,6 +100,7 @@ DelayedDefaultValueCloner buildConstructorTearOffProcedure(
declarationConstructor.isFactory) ||
(declarationConstructor is Procedure &&
declarationConstructor.isStatic),
// Coverage-ignore(suite): Not run.
"Unexpected constructor tear off target $declarationConstructor "
"(${declarationConstructor.runtimeType}).");
@ -153,6 +155,7 @@ DelayedDefaultValueCloner buildTypedefTearOffProcedure(
declarationConstructor.isFactory) ||
(declarationConstructor is Procedure &&
declarationConstructor.isStatic),
// Coverage-ignore(suite): Not run.
"Unexpected constructor tear off target $declarationConstructor "
"(${declarationConstructor.runtimeType}).");
assert(
@ -161,6 +164,7 @@ DelayedDefaultValueCloner buildTypedefTearOffProcedure(
implementationConstructor.isFactory) ||
(implementationConstructor is Procedure &&
implementationConstructor.isStatic),
// Coverage-ignore(suite): Not run.
"Unexpected constructor tear off target $implementationConstructor "
"(${declarationConstructor.runtimeType}).");
@ -225,6 +229,7 @@ FreshTypeParameters buildRedirectingFactoryTearOffProcedureParameters(
function,
substitution,
libraryBuilder);
// Coverage-ignore(suite): Not run.
delayedDefaultValueCloners?.add(delayedDefaultValueCloner);
tearOff.function.fileOffset = tearOff.fileOffset;
tearOff.function.fileEndOffset = tearOff.fileOffset;
@ -254,7 +259,9 @@ DelayedDefaultValueCloner buildRedirectingFactoryTearOffBody(
if (!freshTypeParameters.substitution.isEmpty) {
if (typeArguments.length != typeParameters.length) {
// Error case: Use default types as type arguments.
typeArguments = new List<DartType>.generate(typeParameters.length,
typeArguments = new List<DartType>.generate(
typeParameters.length,
// Coverage-ignore(suite): Not run.
(int index) => typeParameters[index].defaultType);
}
if (typeArguments.isNotEmpty) {
@ -423,6 +430,7 @@ class LoweredTypedefTearOff {
Expression targetTearOff;
if (target is Constructor ||
target is Procedure && target.isFactory) {
// Coverage-ignore-block(suite): Not run.
targetTearOff = new ConstructorTearOff(target!);
} else {
targetTearOff = new StaticTearOff(target as Procedure);

View File

@ -35,6 +35,7 @@ class ExhaustivenessDataForTesting {
Map<Node, ExhaustivenessResult> switchResults = {};
}
// Coverage-ignore(suite): Not run.
class ExhaustivenessResult {
final StaticType scrutineeType;
final List<Space> caseSpaces;
@ -73,7 +74,9 @@ class CfeTypeOperations implements TypeOperations<DartType> {
@override
bool isNullType(DartType type) {
return type is NullType ||
(type is NeverType && type.nullability == Nullability.nullable);
(type is NeverType &&
// Coverage-ignore(suite): Not run.
type.nullability == Nullability.nullable);
}
@override
@ -112,6 +115,7 @@ class CfeTypeOperations implements TypeOperations<DartType> {
_typeEnvironment.objectNonNullableRawType;
@override
// Coverage-ignore(suite): Not run.
DartType get nullableObjectType => _typeEnvironment.objectNullableRawType;
@override
@ -151,6 +155,7 @@ class CfeTypeOperations implements TypeOperations<DartType> {
}
return fieldTypes;
} else if (type is ExtensionType) {
// Coverage-ignore-block(suite): Not run.
ExtensionTypeDeclaration extensionTypeDeclaration =
type.extensionTypeDeclaration;
Map<Key, DartType> fieldTypes = {};
@ -291,11 +296,17 @@ class CfeTypeOperations implements TypeOperations<DartType> {
@override
bool hasSimpleName(DartType type) {
return type is InterfaceType ||
// Coverage-ignore(suite): Not run.
type is DynamicType ||
// Coverage-ignore(suite): Not run.
type is VoidType ||
// Coverage-ignore(suite): Not run.
type is NeverType ||
// Coverage-ignore(suite): Not run.
type is NullType ||
// Coverage-ignore(suite): Not run.
type is ExtensionType ||
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): What about intersection types?
type is TypeParameterType;
}
@ -435,6 +446,7 @@ class CfeSealedClassOperations
// class Class extends _Super&Mixin {}
//
if (superclass.mixedInClass == sealedClass) {
// Coverage-ignore-block(suite): Not run.
list.add(cls);
continue outer;
}
@ -470,6 +482,7 @@ class CfeSealedClassOperations
if (thisType.typeArguments.isEmpty) {
return thisType;
}
// Coverage-ignore-block(suite): Not run.
bool trivialSubstitution = true;
if (thisType.typeArguments.length == asSealedType.typeArguments.length) {
for (int i = 0; i < thisType.typeArguments.length; i++) {
@ -649,6 +662,7 @@ class PatternConverter with SpaceCreator<Pattern, DartType> {
hasExplicitTypeArguments:
pattern.keyType != null && pattern.valueType != null);
}
// Coverage-ignore-block(suite): Not run.
assert(false, "Unexpected pattern $pattern (${pattern.runtimeType}).");
return createUnknownSpace(path);
}
@ -666,12 +680,17 @@ class PatternConverter with SpaceCreator<Pattern, DartType> {
return new Space(path, cache.getBoolValueStaticType(constant.value));
} else if (constant is RecordConstant) {
Map<Key, Space> properties = {};
for (int index = 0; index < constant.positional.length; index++) {
for (int index = 0;
index < constant.positional.length;
// Coverage-ignore(suite): Not run.
index++) {
// Coverage-ignore-block(suite): Not run.
Key key = new RecordIndexKey(index);
properties[key] = convertConstantToSpace(constant.positional[index],
path: path.add(key));
}
for (MapEntry<String, Constant> entry in constant.named.entries) {
// Coverage-ignore-block(suite): Not run.
Key key = new RecordNameKey(entry.key);
properties[key] =
convertConstantToSpace(entry.value, path: path.add(key));
@ -689,6 +708,7 @@ class PatternConverter with SpaceCreator<Pattern, DartType> {
return new Space(path, cache.getUnknownStaticType());
}
} else {
// Coverage-ignore-block(suite): Not run.
// TODO(johnniwinther): Assert that constant value is available when the
// exhaustiveness checking is complete.
return new Space(path, cache.getUnknownStaticType());
@ -743,11 +763,13 @@ class ExhaustiveDartTypeVisitor implements DartTypeVisitor1<bool, CoreTypes> {
}
@override
// Coverage-ignore(suite): Not run.
bool visitFunctionType(FunctionType type, CoreTypes coreTypes) {
return false;
}
@override
// Coverage-ignore(suite): Not run.
bool visitFutureOrType(FutureOrType type, CoreTypes coreTypes) {
return type.typeArgument.accept1(this, coreTypes);
}
@ -786,11 +808,13 @@ class ExhaustiveDartTypeVisitor implements DartTypeVisitor1<bool, CoreTypes> {
}
@override
// Coverage-ignore(suite): Not run.
bool visitNullType(NullType type, CoreTypes coreTypes) {
return true;
}
@override
// Coverage-ignore(suite): Not run.
bool visitRecordType(RecordType type, CoreTypes coreTypes) {
for (DartType positional in type.positional) {
if (!positional.accept1(this, coreTypes)) {
@ -811,17 +835,20 @@ class ExhaustiveDartTypeVisitor implements DartTypeVisitor1<bool, CoreTypes> {
}
@override
// Coverage-ignore(suite): Not run.
bool visitStructuralParameterType(
StructuralParameterType type, CoreTypes coreTypes) {
return type.bound.accept1(this, coreTypes);
}
@override
// Coverage-ignore(suite): Not run.
bool visitTypedefType(TypedefType type, CoreTypes coreTypes) {
return type.unalias.accept1(this, coreTypes);
}
@override
// Coverage-ignore(suite): Not run.
bool visitVoidType(VoidType type, CoreTypes coreTypes) {
return false;
}
@ -831,6 +858,7 @@ class TypeParameterReplacer extends ReplacementVisitor {
const TypeParameterReplacer();
@override
// Coverage-ignore(suite): Not run.
DartType? visitTypeParameterType(TypeParameterType node, Variance variance) {
DartType replacement = super.visitTypeParameterType(node, variance) ?? node;
if (replacement is TypeParameterType) {

File diff suppressed because it is too large Load Diff

View File

@ -446,7 +446,12 @@ class Forest {
Expression? condition,
List<Expression> updaters,
Statement body) {
return new ForStatement(variables ?? [], condition, updaters, body)
return new ForStatement(
variables ?? // Coverage-ignore(suite): Not run.
[],
condition,
updaters,
body)
..fileOffset = fileOffset;
}
@ -582,14 +587,17 @@ class Forest {
bool isErroneousNode(Object? node) {
if (node is ExpressionStatement) {
// Coverage-ignore-block(suite): Not run.
ExpressionStatement statement = node;
node = statement.expression;
}
if (node is VariableDeclaration) {
// Coverage-ignore-block(suite): Not run.
VariableDeclaration variable = node;
node = variable.initializer;
}
if (node is Let) {
// Coverage-ignore-block(suite): Not run.
Let let = node;
node = let.variable.initializer;
}
@ -713,15 +721,21 @@ class Forest {
}
ConstructorTearOff createConstructorTearOff(int fileOffset, Member target) {
assert(target is Constructor || (target is Procedure && target.isFactory),
assert(
target is Constructor || (target is Procedure && target.isFactory),
// Coverage-ignore(suite): Not run.
"Unexpected constructor tear off target: $target");
return new ConstructorTearOff(target)..fileOffset = fileOffset;
}
StaticTearOff createStaticTearOff(int fileOffset, Procedure procedure) {
assert(procedure.kind == ProcedureKind.Method,
assert(
procedure.kind == ProcedureKind.Method,
// Coverage-ignore(suite): Not run.
"Unexpected static tear off target: $procedure");
assert(!procedure.isRedirectingFactory,
assert(
!procedure.isRedirectingFactory,
// Coverage-ignore(suite): Not run.
"Unexpected static tear off target: $procedure");
return new StaticTearOff(procedure)..fileOffset = fileOffset;
}
@ -902,26 +916,31 @@ class _VariablesDeclaration extends AuxiliaryStatement {
}
@override
// Coverage-ignore(suite): Not run.
R accept<R>(v) {
throw unsupported("accept", fileOffset, uri);
}
@override
// Coverage-ignore(suite): Not run.
R accept1<R, A>(v, arg) {
throw unsupported("accept1", fileOffset, uri);
}
@override
// Coverage-ignore(suite): Not run.
Never visitChildren(v) {
throw unsupported("visitChildren", fileOffset, uri);
}
@override
// Coverage-ignore(suite): Not run.
Never transformChildren(v) {
throw unsupported("transformChildren", fileOffset, uri);
}
@override
// Coverage-ignore(suite): Not run.
Never transformOrRemoveChildren(v) {
throw unsupported("transformOrRemoveChildren", fileOffset, uri);
}
@ -932,6 +951,7 @@ class _VariablesDeclaration extends AuxiliaryStatement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
for (int index = 0; index < declarations.length; index++) {
if (index > 0) {

View File

@ -97,6 +97,7 @@ class ForwardingNode {
if (_combinedMemberSignature.members.length == 1 &&
!needMixinStub &&
!hasNoSuchMethodTarget) {
// Coverage-ignore-block(suite): Not run.
// Optimization: Avoid complex computation for simple scenarios.
// Covariance can only come from [interfaceMember] so we never need a
@ -214,6 +215,7 @@ class ForwardingNode {
case ProcedureStubKind.ConcreteMixinStub:
finalTarget = interfaceMember.stubTarget!;
break;
// Coverage-ignore(suite): Not run.
case ProcedureStubKind.RepresentationField:
assert(
false,
@ -248,11 +250,14 @@ class ForwardingNode {
return stub;
} else {
if (_combinedMemberSignature.needsCovarianceMerging) {
// Coverage-ignore-block(suite): Not run.
_combinedMemberSignature.combinedMemberSignatureCovariance!
.applyCovariance(interfaceMember);
}
if (needsNoSuchMethodForwarder) {
assert(interfaceMember is Procedure,
assert(
interfaceMember is Procedure,
// Coverage-ignore(suite): Not run.
"Unexpected abstract member: ${interfaceMember}");
(interfaceMember as Procedure).stubKind =
ProcedureStubKind.NoSuchMethodForwarder;
@ -297,6 +302,7 @@ class ForwardingNode {
Expression superCall;
assert(
!superTarget.isAbstract,
// Coverage-ignore(suite): Not run.
"Abstract super target $superTarget found for '${name}' in "
"${typeDeclaration}.");
switch (kind) {
@ -398,6 +404,7 @@ class ForwardingNode {
}
superCall = new SuperPropertySet(name, expression, superTarget);
break;
// Coverage-ignore(suite): Not run.
default:
unhandled('$kind', '_createForwardingImplIfNeeded', -1, null);
}

View File

@ -64,6 +64,7 @@ class TypeDeclarationInstanceMemberResult implements MemberResult {
{required this.isDeclaredAsField})
: assert(
member.enclosingTypeDeclaration != null,
// Coverage-ignore(suite): Not run.
"Type declaration member without enclosing type "
"declaration $member.");
@ -89,7 +90,8 @@ class TypeDeclarationInstanceMemberResult implements MemberResult {
DartType getMemberType(
ClassMembersBuilder membersBuilder, TypeDeclarationType thisType) {
DartType type = switch (kind) {
ClassMemberKind.Method => member.getterType,
ClassMemberKind.Method => // Coverage-ignore(suite): Not run.
member.getterType,
ClassMemberKind.Getter => member.getterType,
ClassMemberKind.Setter => member.setterType,
};
@ -132,7 +134,8 @@ class StaticMemberResult implements MemberResult {
DartType getMemberType(
ClassMembersBuilder membersBuilder, TypeDeclarationType thisType) {
return switch (kind) {
ClassMemberKind.Method => member.getterType,
ClassMemberKind.Method => // Coverage-ignore(suite): Not run.
member.getterType,
ClassMemberKind.Getter => member.getterType,
ClassMemberKind.Setter => member.setterType,
};
@ -172,6 +175,7 @@ class ExtensionTypeMemberResult implements MemberResult {
ClassMembersBuilder membersBuilder, TypeDeclarationType thisType) {
FunctionType type = member.getterType as FunctionType;
if (type.typeParameters.isNotEmpty) {
// Coverage-ignore-block(suite): Not run.
type = FunctionTypeInstantiator.instantiate(
type,
membersBuilder.hierarchyBuilder.types.getTypeArgumentsAsInstanceOf(
@ -179,6 +183,7 @@ class ExtensionTypeMemberResult implements MemberResult {
}
switch (kind) {
case ClassMemberKind.Method:
// Coverage-ignore(suite): Not run.
// For methods [member] is the tear-off so the member type is the return
// type.
return type.returnType;
@ -349,18 +354,22 @@ abstract class SynthesizedMember extends ClassMember {
bool get isProperty => memberKind != ClassMemberKind.Method;
@override
// Coverage-ignore(suite): Not run.
List<ClassMember> get declarations => throw new UnimplementedError();
@override
// Coverage-ignore(suite): Not run.
void inferType(ClassMembersBuilder membersBuilder) {}
@override
bool get isDuplicate => false;
@override
// Coverage-ignore(suite): Not run.
bool get isField => throw new UnimplementedError();
@override
// Coverage-ignore(suite): Not run.
bool get isGetter => throw new UnimplementedError();
@override
@ -376,9 +385,11 @@ abstract class SynthesizedMember extends ClassMember {
bool get isStatic => false;
@override
// Coverage-ignore(suite): Not run.
bool get isSynthesized => true;
@override
// Coverage-ignore(suite): Not run.
void registerOverrideDependency(Set<ClassMember> overriddenMembers) {}
@override
@ -389,9 +400,11 @@ abstract class SynthesizedMember extends ClassMember {
}
@override
// Coverage-ignore(suite): Not run.
bool get isExtensionTypeMember => false;
@override
// Coverage-ignore(suite): Not run.
Member? getTearOff(ClassMembersBuilder membersBuilder) {
// Ensure member is computed.
getMember(membersBuilder);
@ -623,6 +636,7 @@ class SynthesizedInterfaceMember extends SynthesizedMember {
assert(
_covariance ==
new Covariance.fromMember(_member!, forSetter: forSetter),
// Coverage-ignore(suite): Not run.
"Unexpected covariance for combined members signature "
"$_member. Found $_covariance, expected "
"${new Covariance.fromMember(_member!, forSetter: forSetter)}.");
@ -651,6 +665,7 @@ class SynthesizedInterfaceMember extends SynthesizedMember {
ClassMember get interfaceMember => this;
@override
// Coverage-ignore(suite): Not run.
bool isObjectMember(ClassBuilder objectClass) {
return false;
}
@ -679,6 +694,7 @@ class SynthesizedInterfaceMember extends SynthesizedMember {
declarations.map((ClassMember m) => m.fullName).join("%");
@override
// Coverage-ignore(suite): Not run.
String get fullName {
String suffix = isSetter ? "=" : "";
return "${fullNameForErrors}$suffix";
@ -803,11 +819,13 @@ class InheritedClassMemberImplementsInterface extends SynthesizedMember {
ClassMember get interfaceMember => implementedInterfaceMember;
@override
// Coverage-ignore(suite): Not run.
bool isObjectMember(ClassBuilder objectClass) {
return inheritedClassMember.isObjectMember(objectClass);
}
@override
// Coverage-ignore(suite): Not run.
bool isSameDeclaration(ClassMember other) {
// TODO(johnniwinther): Optimize this.
return false;
@ -846,6 +864,7 @@ class InheritedClassMemberImplementsInterface extends SynthesizedMember {
assert(
!(implementedInterfaceMember.isNoSuchMethodForwarder &&
!inheritedClassMember.isNoSuchMethodForwarder),
// Coverage-ignore(suite): Not run.
"The inherited $inheritedClassMember has "
"isNoSuchMethodForwarder="
"${inheritedClassMember.isNoSuchMethodForwarder} but "
@ -871,6 +890,7 @@ class InheritedClassMemberImplementsInterface extends SynthesizedMember {
String get fullNameForErrors => inheritedClassMember.fullNameForErrors;
@override
// Coverage-ignore(suite): Not run.
String get fullName => inheritedClassMember.fullName;
@override
@ -908,6 +928,7 @@ class SynthesizedNonExtensionTypeMember extends SynthesizedMember {
DeclarationBuilder get declarationBuilder => extensionTypeDeclarationBuilder;
@override
// Coverage-ignore(suite): Not run.
bool get hasDeclarations => true;
void _ensureMemberAndCovariance(ClassMembersBuilder membersBuilder) {
@ -983,6 +1004,7 @@ class SynthesizedNonExtensionTypeMember extends SynthesizedMember {
assert(
_covariance ==
new Covariance.fromMember(_member!, forSetter: forSetter),
// Coverage-ignore(suite): Not run.
"Unexpected covariance for combined members signature "
"$_member. Found $_covariance, expected "
"${new Covariance.fromMember(_member!, forSetter: forSetter)}.");
@ -1008,36 +1030,45 @@ class SynthesizedNonExtensionTypeMember extends SynthesizedMember {
}
@override
// Coverage-ignore(suite): Not run.
ClassMember get interfaceMember => this;
@override
// Coverage-ignore(suite): Not run.
bool isObjectMember(ClassBuilder objectClass) {
return false;
}
@override
// Coverage-ignore(suite): Not run.
bool isSameDeclaration(ClassMember other) {
// TODO(johnniwinther): Optimize this.
return false;
}
@override
// Coverage-ignore(suite): Not run.
bool get isNoSuchMethodForwarder => false;
@override
// Coverage-ignore(suite): Not run.
int get charOffset => declarations.first.charOffset;
@override
// Coverage-ignore(suite): Not run.
Uri get fileUri => declarations.first.fileUri;
@override
// Coverage-ignore(suite): Not run.
bool get isAbstract => true;
@override
// Coverage-ignore(suite): Not run.
String get fullNameForErrors =>
declarations.map((ClassMember m) => m.fullName).join("%");
@override
// Coverage-ignore(suite): Not run.
String get fullName {
String suffix = isSetter ? "=" : "";
return "${fullNameForErrors}$suffix";

View File

@ -45,6 +45,7 @@ class ExtensionTypeMembersNodeBuilder extends MembersNodeBuilder {
memberMap[name] =
new _Tuple.declareExtensionTypeGetable(classMember);
} else {
// Coverage-ignore-block(suite): Not run.
tuple.declaredExtensionTypeGetable = classMember;
}
} else {
@ -52,6 +53,7 @@ class ExtensionTypeMembersNodeBuilder extends MembersNodeBuilder {
memberMap[name] =
new _Tuple.declareNonExtensionTypeGetable(classMember);
} else {
// Coverage-ignore-block(suite): Not run.
tuple.declaredNonExtensionTypeGetable = classMember;
}
}
@ -67,6 +69,7 @@ class ExtensionTypeMembersNodeBuilder extends MembersNodeBuilder {
tuple.declaredExtensionTypeSetable = classMember;
}
} else {
// Coverage-ignore-block(suite): Not run.
if (tuple == null) {
memberMap[name] =
new _Tuple.declareNonExtensionTypeSetable(classMember);
@ -314,6 +317,7 @@ class _Tuple {
this._declaredExtensionTypeSetable = declaredSetable,
this.name = declaredSetable.name;
// Coverage-ignore(suite): Not run.
_Tuple.declareNonExtensionTypeSetable(ClassMember declaredSetable)
: assert(declaredSetable.forSetter),
this._declaredNonExtensionTypeSetable = declaredSetable,
@ -334,6 +338,7 @@ class _Tuple {
ClassMember? get declaredExtensionTypeGetable =>
_declaredExtensionTypeGetable;
// Coverage-ignore(suite): Not run.
void set declaredExtensionTypeGetable(ClassMember? value) {
assert(!value!.forSetter);
assert(
@ -355,10 +360,12 @@ class _Tuple {
assert(value!.forSetter);
assert(
_declaredExtensionTypeSetable == null,
// Coverage-ignore(suite): Not run.
"Declared extension type setable already set to "
"$_declaredExtensionTypeSetable, trying to set it to $value.");
assert(
_declaredNonExtensionTypeSetable == null,
// Coverage-ignore(suite): Not run.
"Declared non-extension type setable already set to "
"$_declaredNonExtensionTypeSetable, trying to set the declared "
"extension type setable to $value.");
@ -368,6 +375,7 @@ class _Tuple {
ClassMember? get declaredNonExtensionTypeGetable =>
_declaredNonExtensionTypeGetable;
// Coverage-ignore(suite): Not run.
void set declaredNonExtensionTypeGetable(ClassMember? value) {
assert(!value!.forSetter);
assert(
@ -385,6 +393,7 @@ class _Tuple {
ClassMember? get declaredNonExtensionTypeSetable =>
_declaredNonExtensionTypeSetable;
// Coverage-ignore(suite): Not run.
void set declaredNonExtensionTypeSetable(ClassMember? value) {
assert(value!.forSetter);
assert(
@ -596,6 +605,7 @@ class _Tuple {
/// implements Interface {}
definingGetable = implementedGetable;
} else if (definingGetable.isStatic) {
// Coverage-ignore-block(suite): Not run.
/// class Interface {
/// method() {}
/// }
@ -613,7 +623,9 @@ class _Tuple {
// On the first skipped member we add all previous.
implementedNonExtensionTypeGetables ??=
tupleImplementedNonExtensionTypeGetables.take(i).toList();
} else if (implementedNonExtensionTypeGetables != null) {
}
// Coverage-ignore(suite): Not run.
else if (implementedNonExtensionTypeGetables != null) {
// If already skipping members we add [implementedGetable]
// explicitly.
implementedNonExtensionTypeGetables.add(implementedGetable);
@ -666,6 +678,7 @@ class _Tuple {
/// class Class implements Interface {}
definingSetable = implementedSetable;
} else if (definingSetable.isStatic) {
// Coverage-ignore-block(suite): Not run.
/// class Interface {
/// set setter(value) {}
/// }
@ -679,6 +692,7 @@ class _Tuple {
implementedSetable = null;
}
}
// Coverage-ignore(suite): Not run.
if (implementedSetable == null) {
// On the first skipped setter we add all previous.
implementedNonExtensionTypeSetables ??=
@ -693,7 +707,9 @@ class _Tuple {
// No setters were skipped so we use the full list.
implementedNonExtensionTypeSetables =
tupleImplementedNonExtensionTypeSetables;
} else if (implementedNonExtensionTypeSetables.isEmpty) {
}
// Coverage-ignore(suite): Not run.
else if (implementedNonExtensionTypeSetables.isEmpty) {
// No setters were included.
implementedNonExtensionTypeSetables = null;
}
@ -751,7 +767,9 @@ class _Tuple {
// On the first skipped member we add all previous.
implementedExtensionTypeGetables ??=
tupleImplementedExtensionTypeGetables.take(i).toList();
} else if (implementedExtensionTypeGetables != null) {
}
// Coverage-ignore(suite): Not run.
else if (implementedExtensionTypeGetables != null) {
// If already skipping members we add [implementedGetable]
// explicitly.
implementedExtensionTypeGetables.add(implementedGetable);
@ -802,6 +820,7 @@ class _Tuple {
/// class Class implements Interface {}
definingSetable = implementedSetable;
} else if (definingSetable.isStatic) {
// Coverage-ignore-block(suite): Not run.
/// class Interface {
/// set setter(value) {}
/// }
@ -818,7 +837,9 @@ class _Tuple {
// On the first skipped setter we add all previous.
implementedExtensionTypeSetables ??=
tupleImplementedExtensionTypeSetables.take(i).toList();
} else if (implementedExtensionTypeSetables != null) {
}
// Coverage-ignore(suite): Not run.
else if (implementedExtensionTypeSetables != null) {
// If already skipping setters we add [implementedSetable]
// explicitly.
implementedExtensionTypeSetables.add(implementedSetable);

View File

@ -79,6 +79,7 @@ class ClassHierarchyBuilder
Supertype? asSupertypeOf(InterfaceType subtype, Class supertype) {
if (subtype.classNode == supertype) {
// Coverage-ignore-block(suite): Not run.
return new Supertype(supertype, subtype.typeArguments);
}
Supertype? cls = getClassAsInstanceOf(subtype.classNode, supertype);
@ -128,10 +129,12 @@ class ClassHierarchyBuilder
}
@override
// Coverage-ignore(suite): Not run.
bool isSubInterfaceOf(Class subtype, Class superclass) {
return getClassAsInstanceOf(subtype, superclass) != null;
}
// Coverage-ignore(suite): Not run.
InterfaceType _getLegacyLeastUpperBoundInternal(
TypeDeclarationType type1,
TypeDeclarationType type2,
@ -192,6 +195,7 @@ class ClassHierarchyBuilder
}
@override
// Coverage-ignore(suite): Not run.
InterfaceType getLegacyLeastUpperBound(
InterfaceType type1, InterfaceType type2) {
if (type1 == type2) return type1;
@ -201,6 +205,7 @@ class ClassHierarchyBuilder
}
@override
// Coverage-ignore(suite): Not run.
InterfaceType getLegacyLeastUpperBoundFromSupertypeLists(
TypeDeclarationType type1,
TypeDeclarationType type2,

View File

@ -90,6 +90,7 @@ abstract class HierarchyNodeBuilder {
if (interfaces.length == 1) {
return null;
} else {
// Coverage-ignore-block(suite): Not run.
interfaces = interfaces.toList();
interfaces.removeAt(i);
return _ignoreFunction(interfaces);
@ -319,6 +320,7 @@ class ClassHierarchyNode {
/// If `true`, [mixedInNode] is non-null.
bool get isMixinApplication => mixedInNode != null;
// Coverage-ignore(suite): Not run.
/// Returns a list of all supertypes of [classBuilder], including this node.
List<ClassHierarchyNode> computeAllSuperNodes(
ClassHierarchyBuilder hierarchy) {
@ -369,6 +371,7 @@ class ClassHierarchyNode {
return "$sb";
}
// Coverage-ignore(suite): Not run.
static int compareMaxInheritancePath(
ClassHierarchyNode a, ClassHierarchyNode b) {
return b.maxInheritancePath.compareTo(a.maxInheritancePath);

View File

@ -181,7 +181,9 @@ class ClassMembersBuilder implements ClassHierarchyMembers {
ClassMembersBuilder membersBuilder =
new ClassMembersBuilder(hierarchyBuilder);
for (ClassBuilder classBuilder in classes) {
assert(!classBuilder.isAugmenting,
assert(
!classBuilder.isAugmenting,
// Coverage-ignore(suite): Not run.
"Unexpected augmentation class $classBuilder");
membersBuilder.classNodes[classBuilder.cls] = new ClassMembersNodeBuilder(
membersBuilder,
@ -192,6 +194,7 @@ class ClassMembersBuilder implements ClassHierarchyMembers {
in extensionTypeDeclarations) {
assert(
!extensionTypeDeclarationBuilder.isAugmenting,
// Coverage-ignore(suite): Not run.
"Unexpected augment extension type declaration "
"$extensionTypeDeclarationBuilder");
membersBuilder.extensionTypeDeclarationNodes[

View File

@ -146,6 +146,7 @@ abstract class MembersNodeBuilder {
ClassMember existing;
ClassMember duplicate;
assert(a.fileUri == b.fileUri ||
// Coverage-ignore(suite): Not run.
a.name.text == "toString" &&
(a.fileUri.isScheme("org-dartlang-sdk") &&
a.fileUri.pathSegments.isNotEmpty &&
@ -155,6 +156,7 @@ abstract class MembersNodeBuilder {
b.fileUri.pathSegments.last == "enum.dart"));
if (a.fileUri != b.fileUri) {
// Coverage-ignore-block(suite): Not run.
if (a.fileUri.isScheme("org-dartlang-sdk")) {
existing = a;
duplicate = b;
@ -281,6 +283,7 @@ class ClassMembersNodeBuilder extends MembersNodeBuilder {
DartType? inferredParameterType;
if (combinedMemberSignatureType == null) {
inferredParameterType = const InvalidType();
// Coverage-ignore(suite): Not run.
cantInferParameterTypes ??= [];
cantInferParameterTypes.add(declaredParameter);
} else {
@ -670,6 +673,7 @@ class ClassMembersNodeBuilder extends MembersNodeBuilder {
if (tuple == null) {
memberMap[name] = new _Tuple.declareMember(classMember);
} else {
// Coverage-ignore-block(suite): Not run.
tuple.declaredMember = classMember;
}
if (name == noSuchMethodName &&
@ -873,6 +877,7 @@ class ClassMembersNodeBuilder extends MembersNodeBuilder {
ClassHierarchyNodeDataForTesting? dataForTesting;
if (retainDataForTesting) {
// Coverage-ignore-block(suite): Not run.
dataForTesting = new ClassHierarchyNodeDataForTesting(
abstractMembers,
declaredOverridesMap,
@ -967,6 +972,7 @@ class ClassMembersNodeBuilder extends MembersNodeBuilder {
computeClassInterfaceMember(noSuchMethodName, noSuchMethod);
}
noSuchMethodMember = interfaceMemberMap[noSuchMethodName] ??
// Coverage-ignore(suite): Not run.
classMemberMap[noSuchMethodName];
memberMap.forEach(computeClassInterfaceMember);
@ -1028,20 +1034,24 @@ class ClassMembersNodeBuilder extends MembersNodeBuilder {
/// the interface members separately.
assert(
classMemberMap.length == interfaceMemberMap.length,
// Coverage-ignore(suite): Not run.
"Class/interface member mismatch. Class members: "
"$classMemberMap, interface members: $interfaceMemberMap.");
assert(
classSetterMap.length == interfaceSetterMap.length,
// Coverage-ignore(suite): Not run.
"Class/interface setter mismatch. Class setters: "
"$classSetterMap, interface setters: $interfaceSetterMap.");
assert(
classMemberMap.keys.every((Name name) =>
identical(classMemberMap[name], interfaceMemberMap?[name])),
// Coverage-ignore(suite): Not run.
"Class/interface member mismatch. Class members: "
"$classMemberMap, interface members: $interfaceMemberMap.");
assert(
classSetterMap.keys.every((Name name) =>
identical(classSetterMap[name], interfaceSetterMap?[name])),
// Coverage-ignore(suite): Not run.
"Class/interface setter mismatch. Class setters: "
"$classSetterMap, interface setters: $interfaceSetterMap.");
interfaceMemberMap = null;
@ -1155,6 +1165,7 @@ class ClassMembersNode {
return "$sb";
}
// Coverage-ignore(suite): Not run.
void printMembers(
List<ClassMember> members, StringBuffer sb, String heading) {
sb.write(" ");
@ -1170,6 +1181,7 @@ class ClassMembersNode {
}
}
// Coverage-ignore(suite): Not run.
void printMemberMap(
Map<Name, ClassMember> memberMap, StringBuffer sb, String heading) {
List<ClassMember> members = memberMap.values.toList();
@ -1194,8 +1206,11 @@ class ClassMembersNode {
}
ClassMember? getDispatchTarget(Name name, bool isSetter) {
ClassMember? result =
isSetter ? classSetterMap[name] : classMemberMap[name];
ClassMember? result = isSetter
?
// Coverage-ignore(suite): Not run.
classSetterMap[name]
: classMemberMap[name];
if (result == null) {
return null;
}
@ -1208,6 +1223,7 @@ class ClassMembersNode {
}
}
// Coverage-ignore(suite): Not run.
class ClassHierarchyNodeDataForTesting {
final List<ClassMember> abstractMembers;
final Map<ClassMember, Set<ClassMember>> declaredOverrides;
@ -1272,6 +1288,7 @@ class _Tuple {
ClassMember? get declaredMember => _declaredGetable;
// Coverage-ignore(suite): Not run.
void set declaredMember(ClassMember? value) {
assert(!value!.forSetter);
assert(
@ -1287,6 +1304,7 @@ class _Tuple {
assert(value!.forSetter);
assert(
_declaredSetable == null,
// Coverage-ignore(suite): Not run.
"Declared setter already set to $_declaredSetable, "
"trying to set it to $value.");
_declaredSetable = value;
@ -1298,6 +1316,7 @@ class _Tuple {
assert(!value!.forSetter);
assert(
_extendedGetable == null,
// Coverage-ignore(suite): Not run.
"Extended member already set to $_extendedGetable, "
"trying to set it to $value.");
_extendedGetable = value;
@ -1309,6 +1328,7 @@ class _Tuple {
assert(value!.forSetter);
assert(
_extendedSetable == null,
// Coverage-ignore(suite): Not run.
"Extended setter already set to $_extendedSetable, "
"trying to set it to $value.");
_extendedSetable = value;
@ -1320,6 +1340,7 @@ class _Tuple {
assert(!value!.forSetter);
assert(
_mixedInGetable == null,
// Coverage-ignore(suite): Not run.
"Mixed in member already set to $_mixedInGetable, "
"trying to set it to $value.");
_mixedInGetable = value;
@ -1331,6 +1352,7 @@ class _Tuple {
assert(value!.forSetter);
assert(
_mixedInSetable == null,
// Coverage-ignore(suite): Not run.
"Mixed in setter already set to $_mixedInSetable, "
"trying to set it to $value.");
_mixedInSetable = value;
@ -1502,6 +1524,7 @@ class _Tuple {
// The case is handled for consistency.
if (definingGetable.isStatic ||
definingGetable.isProperty != tupleMixedInMember.isProperty) {
// Coverage-ignore-block(suite): Not run.
builder.reportInheritanceConflict(
definingGetable, tupleMixedInMember);
} else {
@ -1515,6 +1538,7 @@ class _Tuple {
!tupleMixedInSetter.isStatic &&
!tupleMixedInSetter.isDuplicate &&
!tupleMixedInSetter.isSynthesized) {
// Coverage-ignore-block(suite): Not run.
/// We treat
///
/// class Mixin {
@ -1712,7 +1736,9 @@ class _Tuple {
if (implementedGetable == null) {
// On the first skipped member we add all previous.
implementedGetables ??= tupleImplementedMembers.take(i).toList();
} else if (implementedGetables != null) {
}
// Coverage-ignore(suite): Not run.
else if (implementedGetables != null) {
// If already skipping members we add [implementedGetable]
// explicitly.
implementedGetables.add(implementedGetable);
@ -1773,7 +1799,9 @@ class _Tuple {
if (implementedSetable == null) {
// On the first skipped setter we add all previous.
implementedSetables ??= tupleImplementedSetters.take(i).toList();
} else if (implementedSetables != null) {
}
// Coverage-ignore(suite): Not run.
else if (implementedSetables != null) {
// If already skipping setters we add [implementedSetable]
// explicitly.
implementedSetables.add(implementedSetable);
@ -2275,7 +2303,9 @@ class _SanitizedMember {
/// method() {}
/// }
/// class Class extends Super {}
assert(!_extendedMember.isAbstract,
assert(
!_extendedMember.isAbstract,
// Coverage-ignore(suite): Not run.
"Abstract extended member: ${_extendedMember}");
classMember = _extendedMember;
@ -2616,6 +2646,7 @@ class _Overrides {
assert(
declaredMember.isSourceDeclaration &&
declaredMember.declarationBuilder.origin == _classBuilder,
// Coverage-ignore(suite): Not run.
"Only declared members can override: ${declaredMember}");
hasDeclaredMembers = true;
if (declaredMember.isProperty) {
@ -2624,11 +2655,13 @@ class _Overrides {
} else {
assert(
declaredMethod == null,
// Coverage-ignore(suite): Not run.
"Multiple methods unexpectedly declared: "
"${declaredMethod} and ${declaredMember}.");
declaredMethod = declaredMember;
}
if (_dataForTesting != null && aliasForTesting != null) {
// Coverage-ignore-block(suite): Not run.
_dataForTesting.aliasMap[aliasForTesting] = declaredMember;
}
}
@ -2659,7 +2692,9 @@ class _Overrides {
/// instead default to `dynamic`.
void registerMixedInOverride(ClassMember mixedInMember,
{ClassMember? aliasForTesting}) {
assert(mixedInMember.declarationBuilder != _classBuilder,
assert(
mixedInMember.declarationBuilder != _classBuilder,
// Coverage-ignore(suite): Not run.
"Only mixin members can override by application: ${mixedInMember}");
if (_classBuilder is SourceClassBuilder) {
hasDeclaredMembers = true;
@ -2669,11 +2704,13 @@ class _Overrides {
} else {
assert(
mixedInMethod == null,
// Coverage-ignore(suite): Not run.
"Multiple methods unexpectedly declared in mixin: "
"${mixedInMethod} and ${mixedInMember}.");
mixedInMethod = mixedInMember;
}
if (_dataForTesting != null && aliasForTesting != null) {
// Coverage-ignore-block(suite): Not run.
_dataForTesting.aliasMap[aliasForTesting] = mixedInMember;
}
}
@ -2701,10 +2738,12 @@ class _Overrides {
if (_classBuilder is SourceClassBuilder) {
assert(
inheritedMember.declarationBuilder != _classBuilder,
// Coverage-ignore(suite): Not run.
"Only inherited members can implement by inheritance: "
"${inheritedMember}");
_inheritedImplementsMap[inheritedMember] = overrides;
if (_dataForTesting != null) {
// Coverage-ignore-block(suite): Not run.
_dataForTesting.aliasMap[aliasForTesting] = inheritedMember;
}
}
@ -2811,6 +2850,7 @@ void _toSet(DeclarationBuilder declarationBuilder,
for (ClassMember member in members) {
if (member.hasDeclarations &&
declarationBuilder == member.declarationBuilder) {
// Coverage-ignore-block(suite): Not run.
_toSet(declarationBuilder, member.declarations, result);
} else {
result.add(member);

View File

@ -85,7 +85,9 @@ class BuilderMixinInferrer {
if (mixinSuperclass.implementedTypes.length == 2) {
s0 = mixinSuperclass.implementedTypes[0];
s1 = mixinSuperclass.implementedTypes[1];
} else if (mixinSuperclass.implementedTypes.length == 1) {
}
// Coverage-ignore(suite): Not run.
else if (mixinSuperclass.implementedTypes.length == 1) {
s0 = mixinSuperclass.supertype!;
s1 = mixinSuperclass.implementedTypes.first;
} else {
@ -102,6 +104,7 @@ class BuilderMixinInferrer {
Supertype? supertype =
asInstantiationOf(baseType, mixinSupertype.classNode);
if (supertype == null) {
// Coverage-ignore-block(suite): Not run.
reportProblem(
templateMixinInferenceNoMatchingClass.withArguments(mixinClass.name,
baseType.classNode.name, mixinSupertype.asInterfaceType),
@ -133,6 +136,7 @@ class BuilderMixinInferrer {
// Generate constraints based on the mixin's supertype.
generateConstraints(mixinClass, baseType, mixinSupertype);
if (_mixinInferenceSolution.isUnsolvable) {
// Coverage-ignore-block(suite): Not run.
reportProblem(
templateMixinInferenceNoMatchingClass.withArguments(mixinClass.name,
baseType.classNode.name, mixinSupertype.asInterfaceType),
@ -141,6 +145,7 @@ class BuilderMixinInferrer {
// Generate new type parameters with the solution as bounds.
List<TypeParameter> parameters;
if (_mixinInferenceSolution.isUnsolvable) {
// Coverage-ignore-block(suite): Not run.
parameters = [...mixinClass.typeParameters];
} else {
parameters = [
@ -177,11 +182,13 @@ class BuilderMixinInferrer {
return new Supertype(superclass, arguments);
}
// Coverage-ignore(suite): Not run.
void reportProblem(Message message, Class kernelClass) {
int length = cls.isMixinApplication ? 1 : cls.fullNameForErrors.length;
cls.addProblem(message, cls.charOffset, length);
}
// Coverage-ignore(suite): Not run.
Never reportUnsupportedProblem(String operation) {
return unsupported(operation, cls.charOffset, cls.fileUri);
}
@ -226,21 +233,26 @@ class _MixinInferenceSolution {
return <TypeParameter, DartType>{type1.parameter: type2};
}
if (type2 is TypeParameterType &&
// Coverage-ignore(suite): Not run.
typeParametersToSolveFor.contains(type2.parameter)) {
// Coverage-ignore-block(suite): Not run.
return <TypeParameter, DartType>{type2.parameter: type1};
}
switch (type1) {
case AuxiliaryType():
// Coverage-ignore(suite): Not run.
return unsupportedErrorReporter.reportUnsupportedProblem(
"_MixinInferenceSolution._solveForEquality"
"(${type1.runtimeType}, ${type2.runtimeType})");
case InvalidType():
// Coverage-ignore(suite): Not run.
if (type2 is! InvalidType) {
return null;
} else {
return <TypeParameter, DartType>{};
}
case DynamicType():
// Coverage-ignore(suite): Not run.
if (type2 is! DynamicType) {
return null;
} else {
@ -253,12 +265,14 @@ class _MixinInferenceSolution {
return <TypeParameter, DartType>{};
}
case NeverType():
// Coverage-ignore(suite): Not run.
if (type2 is! NeverType) {
return null;
} else {
return <TypeParameter, DartType>{};
}
case NullType():
// Coverage-ignore(suite): Not run.
if (type2 is! NullType) {
return null;
} else {
@ -310,9 +324,11 @@ class _MixinInferenceSolution {
}
Map<String, NamedType> namedParameterByName1 = <String, NamedType>{
for (NamedType namedType in type1.namedParameters)
namedType.name: namedType
namedType // Coverage-ignore(suite): Not run.
.name: namedType
};
for (NamedType namedType in type2.namedParameters) {
// Coverage-ignore-block(suite): Not run.
if (!namedParameterByName1.containsKey(namedType.name)) {
return null;
} else {
@ -333,10 +349,12 @@ class _MixinInferenceSolution {
return result;
}
case TypedefType():
// Coverage-ignore(suite): Not run.
return unsupportedErrorReporter.reportUnsupportedProblem(
"_MixinInferenceSolution._solveForEquality"
"(${type1.runtimeType}, ${type2.runtimeType})");
case FutureOrType():
// Coverage-ignore(suite): Not run.
if (type2 is! FutureOrType) {
return null;
} else {
@ -344,11 +362,13 @@ class _MixinInferenceSolution {
unsupportedErrorReporter: unsupportedErrorReporter);
}
case IntersectionType():
// Coverage-ignore(suite): Not run.
// Intersection types can't appear in supertypes.
return unsupportedErrorReporter.reportUnsupportedProblem(
"_MixinInferenceSolution._solveForEquality"
"(${type1.runtimeType}, ${type2.runtimeType})");
case TypeParameterType():
// Coverage-ignore(suite): Not run.
if (type2 is! TypeParameterType ||
type1.parameter != type2.parameter ||
type1.nullability != type2.nullability) {
@ -366,6 +386,7 @@ class _MixinInferenceSolution {
return <TypeParameter, DartType>{};
}
case RecordType():
// Coverage-ignore(suite): Not run.
if (type2 is! RecordType) {
return null;
} else {
@ -429,6 +450,7 @@ class _MixinInferenceSolution {
}
return result;
}
// Coverage-ignore(suite): Not run.
case ExtensionType():
if (type2 is! ExtensionType) {
return null;
@ -463,6 +485,7 @@ class _MixinInferenceSolution {
} else {
for (TypeParameter typeParameter in result1.keys) {
if (result2.containsKey(typeParameter)) {
// Coverage-ignore-block(suite): Not run.
if (result1[typeParameter] != result2[typeParameter]) {
return null;
}

View File

@ -35,45 +35,54 @@ abstract class InferredType extends AuxiliaryType {
_InferredTypeUse;
@override
// Coverage-ignore(suite): Not run.
Nullability get declaredNullability =>
unsupported("declaredNullability", charOffset ?? -1, fileUri);
@override
// Coverage-ignore(suite): Not run.
Nullability get nullability {
unsupported("nullability", charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
DartType get nonTypeVariableBound {
throw unsupported("nonTypeVariableBound", charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
bool get hasNonObjectMemberAccess {
throw unsupported("hasNonObjectMemberAccess", charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
R accept<R>(DartTypeVisitor<R> v) {
throw unsupported("accept", charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
R accept1<R, A>(DartTypeVisitor1<R, A> v, arg) {
throw unsupported("accept1", charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
Never visitChildren(Visitor<dynamic> v) {
unsupported("visitChildren", charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
InferredType withDeclaredNullability(Nullability nullability) {
return unsupported("withNullability", charOffset ?? -1, fileUri);
}
@override
// Coverage-ignore(suite): Not run.
InferredType toNonNull() {
return unsupported("toNonNullable", charOffset ?? -1, fileUri);
}
@ -92,9 +101,11 @@ class _ImplicitFieldTypeRoot extends InferredType {
_ImplicitFieldTypeRoot(this.fieldBuilder, this.initializerToken) : super._();
@override
// Coverage-ignore(suite): Not run.
Uri get fileUri => fieldBuilder.fileUri;
@override
// Coverage-ignore(suite): Not run.
int get charOffset => fieldBuilder.charOffset;
@override
@ -134,7 +145,10 @@ class _ImplicitFieldTypeRoot extends InferredType {
fieldBuilder.fileUri,
enclosingClassThisType,
fieldBuilder.libraryBuilder,
fieldBuilder.dataForTesting?.inferenceData);
fieldBuilder
.dataForTesting
// Coverage-ignore(suite): Not run.
?.inferenceData);
BodyBuilderContext bodyBuilderContext =
fieldBuilder.createBodyBuilderContext(
inOutlineBuildingPhase: false,
@ -166,11 +180,13 @@ class _ImplicitFieldTypeRoot extends InferredType {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('<implicit-field-type:$fieldBuilder>');
}
@override
// Coverage-ignore(suite): Not run.
bool equals(Object other, Assumptions? assumptions) {
if (identical(this, other)) return true;
return other is _ImplicitFieldTypeRoot &&
@ -190,27 +206,33 @@ class _InferredTypeUse extends InferredType {
_InferredTypeUse(this.inferableTypeUse) : super._();
@override
// Coverage-ignore(suite): Not run.
int? get charOffset => inferableTypeUse.typeBuilder.charOffset;
@override
// Coverage-ignore(suite): Not run.
Uri? get fileUri => inferableTypeUse.typeBuilder.fileUri;
@override
// Coverage-ignore(suite): Not run.
DartType computeType(ClassHierarchyBase hierarchy) {
return inferType(hierarchy);
}
@override
// Coverage-ignore(suite): Not run.
DartType inferType(ClassHierarchyBase hierarchy) {
return inferableTypeUse.inferType(hierarchy);
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('<inferred-type:${inferableTypeUse.typeBuilder}>');
}
@override
// Coverage-ignore(suite): Not run.
bool equals(Object other, Assumptions? assumptions) {
if (identical(this, other)) return true;
return other is _InferredTypeUse &&

View File

@ -26,51 +26,62 @@ class ImplicitTypeArgument extends AuxiliaryType {
const ImplicitTypeArgument();
@override
// Coverage-ignore(suite): Not run.
Nullability get declaredNullability =>
unsupported("declaredNullability", -1, null);
@override
// Coverage-ignore(suite): Not run.
Nullability get nullability => unsupported("nullability", -1, null);
@override
// Coverage-ignore(suite): Not run.
DartType get nonTypeVariableBound {
throw unsupported("nonTypeVariableBound", -1, null);
}
@override
// Coverage-ignore(suite): Not run.
bool get hasNonObjectMemberAccess {
throw unsupported("hasNonObjectMemberAccess", -1, null);
}
@override
// Coverage-ignore(suite): Not run.
R accept<R>(DartTypeVisitor<R> v) {
throw unhandled("$runtimeType", "${v.runtimeType}", -1, null);
}
@override
// Coverage-ignore(suite): Not run.
R accept1<R, A>(DartTypeVisitor1<R, A> v, A arg) {
return unhandled("$runtimeType", "${v.runtimeType}", -1, null);
}
@override
// Coverage-ignore(suite): Not run.
Never visitChildren(Visitor v) {
unhandled("$runtimeType", "${v.runtimeType}", -1, null);
}
@override
// Coverage-ignore(suite): Not run.
ImplicitTypeArgument withDeclaredNullability(Nullability nullability) {
return unsupported("withDeclaredNullability", -1, null);
}
@override
// Coverage-ignore(suite): Not run.
ImplicitTypeArgument toNonNull() {
return unsupported("toNonNullable", -1, null);
}
@override
// Coverage-ignore(suite): Not run.
bool equals(Object other, Assumptions? assumptions) => this == other;
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('<implicit-type-argument>');
}

View File

@ -124,6 +124,7 @@ TypeArgumentsInfo getTypeArgumentsInfo(Arguments arguments) {
return new ExtensionMethodTypeArgumentsInfo(arguments);
}
} else {
// Coverage-ignore-block(suite): Not run.
// This code path should only be taken in situations where there are no
// type arguments at all, e.g. calling a user-definable operator.
assert(arguments.types.isEmpty);
@ -143,6 +144,7 @@ List<DartType>? getExplicitTypeArguments(Arguments arguments) {
.toList();
}
} else {
// Coverage-ignore-block(suite): Not run.
// This code path should only be taken in situations where there are no
// type arguments at all, e.g. calling a user-definable operator.
assert(arguments.types.isEmpty);
@ -156,28 +158,33 @@ bool hasExplicitTypeArguments(Arguments arguments) {
mixin InternalTreeNode implements TreeNode {
@override
// Coverage-ignore(suite): Not run.
void replaceChild(TreeNode child, TreeNode replacement) {
// Do nothing. The node should not be part of the resulting AST, anyway.
}
@override
// Coverage-ignore(suite): Not run.
void transformChildren(Transformer v) {
unsupported(
"${runtimeType}.transformChildren on ${v.runtimeType}", -1, null);
}
@override
// Coverage-ignore(suite): Not run.
void transformOrRemoveChildren(RemovingTransformer v) {
unsupported("${runtimeType}.transformOrRemoveChildren on ${v.runtimeType}",
-1, null);
}
@override
// Coverage-ignore(suite): Not run.
void visitChildren(Visitor v) {
unsupported("${runtimeType}.visitChildren on ${v.runtimeType}", -1, null);
}
}
// Coverage-ignore(suite): Not run.
/// Common base class for internal statements.
abstract class InternalStatement extends AuxiliaryStatement {
@override
@ -231,6 +238,7 @@ class ForInStatementWithSynthesizedVariable extends InternalStatement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter state) {
// TODO(johnniwinther): Implement this.
}
@ -258,6 +266,7 @@ class TryStatement extends InternalStatement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('try ');
printer.writeStatement(tryBlock);
@ -299,6 +308,7 @@ class BreakStatementImpl extends BreakStatement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
if (isContinue) {
printer.write('continue ');
@ -310,6 +320,7 @@ class BreakStatementImpl extends BreakStatement {
}
}
// Coverage-ignore(suite): Not run.
/// Common base class for internal expressions.
abstract class InternalExpression extends AuxiliaryExpression {
@override
@ -346,6 +357,7 @@ abstract class InternalExpression extends AuxiliaryExpression {
}
}
// Coverage-ignore(suite): Not run.
/// Common base class for internal initializers.
abstract class InternalInitializer extends AuxiliaryInitializer {
@override
@ -526,6 +538,7 @@ class Cascade extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('let ');
printer.writeVariableDeclaration(variable);
@ -569,6 +582,7 @@ class DeferredCheck extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('let ');
printer.writeVariableDeclaration(variable);
@ -608,6 +622,7 @@ class FactoryConstructorInvocation extends StaticInvocation
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
if (isConst) {
printer.write('const ');
@ -648,6 +663,7 @@ class TypeAliasedConstructorInvocation extends ConstructorInvocation
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
if (isConst) {
printer.write('const ');
@ -688,6 +704,7 @@ class TypeAliasedFactoryInvocation extends StaticInvocation
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
if (isConst) {
printer.write('const ');
@ -749,6 +766,7 @@ class IfNullExpression extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(left, minimumPrecedence: Precedence.CONDITIONAL);
printer.write(' ?? ');
@ -773,6 +791,7 @@ class IntJudgment extends IntLiteral implements ExpressionJudgment {
double? asDouble({bool negated = false}) {
if (value == 0 && negated) {
// Coverage-ignore-block(suite): Not run.
return -0.0;
}
BigInt intValue = new BigInt.from(negated ? -value : value);
@ -794,6 +813,7 @@ class IntJudgment extends IntLiteral implements ExpressionJudgment {
@override
void toTextInternal(AstPrinter printer) {
if (literal == null) {
// Coverage-ignore-block(suite): Not run.
printer.write('$value');
} else {
printer.write(literal!);
@ -809,6 +829,7 @@ class ShadowLargeIntLiteral extends IntLiteral implements ExpressionJudgment {
ShadowLargeIntLiteral(this.literal, this.fileOffset) : super(0);
// Coverage-ignore(suite): Not run.
double? asDouble({bool negated = false}) {
BigInt? intValue = BigInt.tryParse(negated ? '-${literal}' : literal);
if (intValue == null) {
@ -838,6 +859,7 @@ class ShadowLargeIntLiteral extends IntLiteral implements ExpressionJudgment {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write(literal);
}
@ -902,6 +924,7 @@ class ExpressionInvocation extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(expression);
printer.writeArguments(arguments);
@ -938,6 +961,7 @@ class NullAwareMethodInvocation extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
Expression methodInvocation = invocation;
if (methodInvocation is InstanceInvocation) {
@ -999,6 +1023,7 @@ class NullAwarePropertyGet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
Expression propertyGet = read;
if (propertyGet is PropertyGet) {
@ -1048,6 +1073,7 @@ class NullAwarePropertySet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
Expression propertySet = write;
if (propertySet is InstanceSet) {
@ -1094,6 +1120,7 @@ class ReturnStatementImpl extends ReturnStatement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
if (isArrow) {
printer.write('=>');
@ -1219,6 +1246,7 @@ class VariableDeclarationImpl extends VariableDeclaration {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeVariableDeclaration(this,
isLate: isLate || lateGetter != null, type: lateType ?? type);
@ -1259,6 +1287,7 @@ class LoadLibraryImpl extends LoadLibrary {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write(import.name!);
printer.write('.loadLibrary');
@ -1289,6 +1318,7 @@ class LoadLibraryTearOff extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write(import.name!);
printer.write('.loadLibrary');
@ -1345,6 +1375,7 @@ class IfNullPropertySet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver);
printer.write('.');
@ -1392,6 +1423,7 @@ class IfNullSet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(read);
printer.write(' ?? ');
@ -1547,6 +1579,7 @@ class CompoundPropertySet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver);
printer.write('.');
@ -1690,6 +1723,7 @@ class IndexGet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver);
printer.write('[');
@ -1741,6 +1775,7 @@ class IndexSet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver);
printer.write('[');
@ -1849,6 +1884,7 @@ class ExtensionIndexSet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write(extension.name);
if (explicitTypeArguments != null) {
@ -2137,6 +2173,7 @@ class CompoundIndexSet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver);
printer.write('[');
@ -2245,6 +2282,7 @@ class NullAwareCompoundSet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver);
printer.write('?.');
@ -2332,6 +2370,7 @@ class NullAwareIfNullSet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver);
printer.write('?.');
@ -2646,6 +2685,7 @@ class EqualsExpression extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(left, minimumPrecedence: Precedence.EQUALITY);
if (isNot) {
@ -2680,9 +2720,11 @@ class BinaryExpression extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
int get precedence => Precedence.binaryPrecedence[binaryName.text]!;
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(left, minimumPrecedence: precedence);
printer.write(' ${binaryName.text} ');
@ -2706,6 +2748,7 @@ class UnaryExpression extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
int get precedence => Precedence.PREFIX;
@override
@ -2714,6 +2757,7 @@ class UnaryExpression extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
if (unaryName == unaryMinusName) {
printer.write('-');
@ -2739,6 +2783,7 @@ class ParenthesizedExpression extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
int get precedence => Precedence.CALLEE;
@override
@ -2747,6 +2792,7 @@ class ParenthesizedExpression extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('(');
printer.writeExpression(expression);
@ -2776,11 +2822,13 @@ Expression clonePureExpression(Expression node) {
} else if (node is VariableGet) {
assert(
node.variable.isFinal && !node.variable.isLate,
// Coverage-ignore(suite): Not run.
"Trying to clone VariableGet of non-final variable"
" ${node.variable}.");
return new VariableGet(node.variable, node.promotedType)
..fileOffset = node.fileOffset;
}
// Coverage-ignore-block(suite): Not run.
throw new UnsupportedError("Clone not supported for ${node.runtimeType}.");
}
@ -2813,9 +2861,11 @@ class MethodInvocation extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
int get precedence => Precedence.PRIMARY;
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver, minimumPrecedence: Precedence.PRIMARY);
printer.write('.');
@ -2850,9 +2900,11 @@ class PropertyGet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
int get precedence => Precedence.PRIMARY;
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver, minimumPrecedence: Precedence.PRIMARY);
printer.write('.');
@ -2895,6 +2947,7 @@ class PropertySet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeExpression(receiver, minimumPrecedence: Precedence.PRIMARY);
printer.write('.');
@ -2931,9 +2984,11 @@ class AugmentSuperInvocation extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
int get precedence => Precedence.PRIMARY;
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('augment super');
printer.writeArguments(arguments);
@ -2964,9 +3019,11 @@ class AugmentSuperGet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
int get precedence => Precedence.PRIMARY;
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('augment super');
}
@ -3002,6 +3059,7 @@ class AugmentSuperSet extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('augment super = ');
printer.writeExpression(value);
@ -3033,6 +3091,7 @@ class InternalRecordLiteral extends InternalExpression {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
if (isConst) {
printer.write('const ');
@ -3086,6 +3145,7 @@ class IfCaseElement extends InternalExpression with ControlFlowElement {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('if (');
printer.writeExpression(expression);
@ -3112,6 +3172,7 @@ class IfCaseElement extends InternalExpression with ControlFlowElement {
MapLiteralEntry? otherwiseEntry;
Expression? otherwise = this.otherwise;
if (otherwise != null) {
// Coverage-ignore-block(suite): Not run.
if (otherwise is ControlFlowElement) {
ControlFlowElement otherwiseElement = otherwise;
otherwiseEntry = otherwiseElement.toMapLiteralEntry(onConvertElement);
@ -3162,6 +3223,7 @@ class IfCaseMapEntry extends TreeNode
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('if (');
expression.toTextInternal(printer);
@ -3214,6 +3276,7 @@ class PatternForElement extends InternalExpression
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
patternVariableDeclaration.toTextInternal(printer);
printer.write('for (');
@ -3273,6 +3336,7 @@ class PatternForMapEntry extends TreeNode
required this.body});
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
patternVariableDeclaration.toTextInternal(printer);
printer.write('for (');
@ -3332,6 +3396,7 @@ class ExtensionTypeRedirectingInitializer extends InternalInitializer {
Procedure get target => targetReference.asProcedure;
// Coverage-ignore(suite): Not run.
void set target(Procedure target) {
// Getter vs setter doesn't matter for procedures.
targetReference = getNonNullableMemberReferenceGetter(target);
@ -3343,6 +3408,7 @@ class ExtensionTypeRedirectingInitializer extends InternalInitializer {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.write('this');
if (target.name.text.isNotEmpty) {
@ -3383,6 +3449,7 @@ class ExtensionTypeRepresentationFieldInitializer extends InternalInitializer {
}
@override
// Coverage-ignore(suite): Not run.
void toTextInternal(AstPrinter printer) {
printer.writeMemberName(fieldReference);
printer.write(" = ");

View File

@ -21,6 +21,7 @@ class _InvalidTypeFinder implements DartTypeVisitor1<bool, Set<TypedefType>> {
const _InvalidTypeFinder();
@override
// Coverage-ignore(suite): Not run.
bool visitAuxiliaryType(
AuxiliaryType node, Set<TypedefType> visitedTypedefs) {
if (node is UnknownType) {
@ -89,6 +90,7 @@ class _InvalidTypeFinder implements DartTypeVisitor1<bool, Set<TypedefType>> {
}
@override
// Coverage-ignore(suite): Not run.
bool visitTypedefType(TypedefType node, Set<TypedefType> visitedTypedefs) {
// The unaliased type should be checked, but it's faster to check the type
// arguments and the RHS separately than do the unaliasing because it avoids
@ -119,6 +121,7 @@ class _InvalidTypeFinder implements DartTypeVisitor1<bool, Set<TypedefType>> {
}
@override
// Coverage-ignore(suite): Not run.
bool visitIntersectionType(
IntersectionType node, Set<TypedefType> visitedTypedefs) {
return node.right.accept1(this, visitedTypedefs);

View File

@ -19,8 +19,10 @@ class KernelConstantErrorReporter extends ErrorReporter {
// Try to find library.
Uri uri = message.uri!;
CompilationUnit? compilationUnit = loader.lookupCompilationUnit(uri);
// Coverage-ignore(suite): Not run.
compilationUnit ??= loader.lookupCompilationUnitByFileUri(uri);
if (compilationUnit == null) {
// Coverage-ignore-block(suite): Not run.
// TODO(jensj): Probably a part or something.
loader.addProblem(message.messageObject, message.charOffset,
message.length, message.uri,

View File

@ -309,6 +309,7 @@ void adjustAnnotationFileUri(Annotatable annotatable, Uri annotatableFileUri) {
Expression annotation = annotations[i];
if (annotation is FileUriExpression &&
annotation.fileUri == annotatableFileUri) {
// Coverage-ignore-block(suite): Not run.
annotations[i] = annotation.expression..parent = annotatable;
}
}

View File

@ -198,6 +198,7 @@ class KernelTarget {
accessor: loader.coreLibraryCompilationUnit);
}
if (context.compilingPlatform) {
// Coverage-ignore-block(suite): Not run.
for (String uri in backendTarget.extraRequiredLibrariesPlatform) {
loader.read(Uri.parse(uri), 0,
accessor: loader.coreLibraryCompilationUnit);
@ -217,7 +218,9 @@ class KernelTarget {
return processedOptions.format(
fileUri != null
? message.withLocation(fileUri, charOffset, length)
: message.withoutLocation(),
:
// Coverage-ignore(suite): Not run.
message.withoutLocation(),
severity,
messageContext,
involvedFiles: involvedFiles);
@ -262,6 +265,7 @@ class KernelTarget {
Source source = new Source(lineStarts, sourceCode, importUri, fileUri);
uriToSource[fileUri] = source;
if (_hasAddedSources) {
// Coverage-ignore-block(suite): Not run.
// The sources have already been added to the component in [link] so we
// have to add source directly here to create a consistent component.
component?.uriToSource[fileUri] = excludeSource
@ -271,6 +275,7 @@ class KernelTarget {
}
}
// Coverage-ignore(suite): Not run.
void removeSourceInformation(Uri fileUri) {
uriToSource.remove(fileUri);
if (_hasAddedSources) {
@ -308,10 +313,12 @@ class KernelTarget {
String packageName = package.name;
Uri packageUri = package.packageUriRoot;
if (packageUri.hasFragment == true) {
// Coverage-ignore-block(suite): Not run.
packageUri = packageUri.removeFragment();
}
String prefix = "${packageUri}";
if (asString.startsWith(prefix)) {
// Coverage-ignore-block(suite): Not run.
Uri reversed = Uri.parse(
"package:$packageName/${asString.substring(prefix.length)}");
if (entryPoint == uriTranslator.translate(reversed)) {
@ -332,27 +339,37 @@ class KernelTarget {
_hasComputedNeededPrecompilations = true;
if (loader.roots.isEmpty) return null;
return await withCrashReporting<NeededPrecompilations?>(() async {
benchmarker?.enterPhase(BenchmarkPhases.outline_kernelBuildOutlines);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_kernelBuildOutlines);
await loader.buildOutlines();
benchmarker?.enterPhase(BenchmarkPhases.outline_resolveParts);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_resolveParts);
loader.resolveParts();
benchmarker?.enterPhase(BenchmarkPhases.outline_becomeCoreLibrary);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_becomeCoreLibrary);
loader.coreLibrary.becomeCoreLibrary();
benchmarker?.enterPhase(BenchmarkPhases.outline_computeMacroDeclarations);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeMacroDeclarations);
NeededPrecompilations? result =
context.options.globalFeatures.macros.isEnabled
? loader.computeMacroDeclarations()
: null;
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.unknownComputeNeededPrecompilations);
return result;
}, () => loader.currentUriForCrashReporting);
}
// Coverage-ignore(suite): Not run.
/// Builds [augmentationLibraries] to the state expected after applying phase
/// 1 macros.
Future<void> _buildForPhase1(MacroApplications macroApplications,
@ -374,6 +391,7 @@ class KernelTarget {
}
}
// Coverage-ignore(suite): Not run.
/// Builds [augmentationLibraries] to the state expected after applying phase
/// 2 macros.
void _buildForPhase2(List<SourceLibraryBuilder> augmentationLibraries) {
@ -385,6 +403,7 @@ class KernelTarget {
loader.resolveConstructors(augmentationLibraries);
}
// Coverage-ignore(suite): Not run.
Future<void> _applyMacroPhase2(
MacroApplications macroApplications,
List<SourceClassBuilder> sortedSourceClassBuilders,
@ -415,6 +434,7 @@ class KernelTarget {
await applyDeclarationMacros();
}
// Coverage-ignore(suite): Not run.
/// Builds [augmentationLibraries] to the state expected after applying phase
/// 3 macros.
void _buildForPhase3(List<SourceLibraryBuilder> augmentationLibraries) {
@ -423,10 +443,12 @@ class KernelTarget {
Future<BuildResult> buildOutlines({CanonicalName? nameRoot}) async {
if (loader.roots.isEmpty) {
// Coverage-ignore-block(suite): Not run.
return new BuildResult();
}
return await withCrashReporting<BuildResult>(() async {
if (!_hasComputedNeededPrecompilations) {
// Coverage-ignore-block(suite): Not run.
NeededPrecompilations? neededPrecompilations =
await computeNeededPrecompilations();
// To support macros, the needed macro libraries must be compiled be
@ -441,27 +463,40 @@ class KernelTarget {
}
}
benchmarker?.enterPhase(BenchmarkPhases.outline_computeLibraryScopes);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeLibraryScopes);
loader.computeLibraryScopes(loader.loadedLibraryBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_computeMacroApplications);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeMacroApplications);
MacroApplications? macroApplications =
await loader.computeMacroApplications();
benchmarker?.enterPhase(BenchmarkPhases.outline_setupTopAndBottomTypes);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_setupTopAndBottomTypes);
setupTopAndBottomTypes();
benchmarker?.enterPhase(BenchmarkPhases.outline_resolveTypes);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_resolveTypes);
loader.resolveTypes(loader.sourceLibraryBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_computeVariances);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeVariances);
loader.computeVariances(loader.sourceLibraryBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_computeDefaultTypes);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeDefaultTypes);
loader.computeDefaultTypes(
dynamicType, nullType, bottomType, objectClassBuilder);
if (macroApplications != null) {
// Coverage-ignore-block(suite): Not run.
benchmarker?.enterPhase(BenchmarkPhases.outline_applyTypeMacros);
macroApplications.enterTypeMacroPhase();
List<SourceLibraryBuilder> augmentationLibraries =
@ -471,39 +506,56 @@ class KernelTarget {
await _buildForPhase1(macroApplications, augmentationLibraries);
}
benchmarker?.enterPhase(BenchmarkPhases.outline_checkSemantics);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_checkSemantics);
List<SourceClassBuilder>? sortedSourceClassBuilders;
List<SourceExtensionTypeDeclarationBuilder>?
sortedSourceExtensionTypeBuilders;
(sortedSourceClassBuilders, sortedSourceExtensionTypeBuilders) =
loader.checkClassCycles(objectClassBuilder);
benchmarker?.enterPhase(BenchmarkPhases.outline_finishTypeVariables);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_finishTypeVariables);
loader.finishTypeVariables(
loader.sourceLibraryBuilders, objectClassBuilder, dynamicType);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_createTypeInferenceEngine);
loader.createTypeInferenceEngine();
benchmarker?.enterPhase(BenchmarkPhases.outline_buildComponent);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_buildComponent);
loader.buildOutlineNodes();
benchmarker?.enterPhase(BenchmarkPhases.outline_installDefaultSupertypes);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_installDefaultSupertypes);
installDefaultSupertypes();
benchmarker?.enterPhase(BenchmarkPhases.outline_link);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_link);
component =
link(new List<Library>.of(loader.libraries), nameRoot: nameRoot);
benchmarker?.enterPhase(BenchmarkPhases.outline_computeCoreTypes);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeCoreTypes);
computeCoreTypes();
benchmarker?.enterPhase(BenchmarkPhases.outline_buildClassHierarchy);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_buildClassHierarchy);
loader.buildClassHierarchy(sortedSourceClassBuilders,
sortedSourceExtensionTypeBuilders, objectClassBuilder);
benchmarker?.enterPhase(BenchmarkPhases.outline_checkSupertypes);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_checkSupertypes);
loader.checkSupertypes(
sortedSourceClassBuilders,
sortedSourceExtensionTypeBuilders,
@ -512,29 +564,40 @@ class KernelTarget {
underscoreEnumClass);
if (macroApplications != null) {
// Coverage-ignore-block(suite): Not run.
await _applyMacroPhase2(macroApplications, sortedSourceClassBuilders,
sortedSourceExtensionTypeBuilders);
}
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_installSyntheticConstructors);
installSyntheticConstructors(sortedSourceClassBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_resolveConstructors);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_resolveConstructors);
loader.resolveConstructors(loader.sourceLibraryBuilders);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_buildClassHierarchyMembers);
loader.buildClassHierarchyMembers(
sortedSourceClassBuilders, sortedSourceExtensionTypeBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_computeHierarchy);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeHierarchy);
loader.computeHierarchy();
benchmarker?.enterPhase(BenchmarkPhases.outline_computeShowHideElements);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeShowHideElements);
loader.computeShowHideElements();
benchmarker?.enterPhase(BenchmarkPhases.outline_installTypedefTearOffs);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_installTypedefTearOffs);
List<DelayedDefaultValueCloner>?
typedefTearOffsDelayedDefaultValueCloners =
loader.installTypedefTearOffs();
@ -542,49 +605,69 @@ class KernelTarget {
?.forEach(registerDelayedDefaultValueCloner);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_computeFieldPromotability);
loader.computeFieldPromotability();
benchmarker?.enterPhase(BenchmarkPhases.outline_performTopLevelInference);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_performTopLevelInference);
loader.performTopLevelInference(sortedSourceClassBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_checkOverrides);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_checkOverrides);
loader.checkOverrides(sortedSourceClassBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_checkAbstractMembers);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_checkAbstractMembers);
loader.checkAbstractMembers(sortedSourceClassBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_checkMixins);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_checkMixins);
loader.checkMixins(sortedSourceClassBuilders);
benchmarker?.enterPhase(BenchmarkPhases.outline_buildOutlineExpressions);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_buildOutlineExpressions);
// TODO(johnniwinther): Add an interface for registering delayed actions.
List<DelayedDefaultValueCloner> delayedDefaultValueCloners = [];
loader.buildOutlineExpressions(
loader.hierarchy, delayedDefaultValueCloners);
delayedDefaultValueCloners.forEach(registerDelayedDefaultValueCloner);
benchmarker?.enterPhase(BenchmarkPhases.outline_checkTypes);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_checkTypes);
loader.checkTypes();
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_checkRedirectingFactories);
loader.checkRedirectingFactories(
sortedSourceClassBuilders, sortedSourceExtensionTypeBuilders);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_finishSynthesizedParameters);
finishSynthesizedParameters(forOutline: true);
benchmarker?.enterPhase(BenchmarkPhases.outline_checkMainMethods);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_checkMainMethods);
loader.checkMainMethods();
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.outline_installAllComponentProblems);
installAllComponentProblems(loader.allComponentProblems);
loader.allComponentProblems.clear();
benchmarker?.enterPhase(BenchmarkPhases.unknownBuildOutlines);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.unknownBuildOutlines);
// For whatever reason sourceClassBuilders is kept alive for some amount
// of time, meaning that all source library builders will be kept alive
@ -610,12 +693,14 @@ class KernelTarget {
bool verify = false,
bool allowVerificationErrorForTesting = false}) async {
if (loader.roots.isEmpty) {
// Coverage-ignore-block(suite): Not run.
return new BuildResult(macroApplications: macroApplications);
}
return await withCrashReporting<BuildResult>(() async {
ticker.logMs("Building component");
if (macroApplications != null) {
// Coverage-ignore-block(suite): Not run.
benchmarker?.enterPhase(BenchmarkPhases.body_applyDefinitionMacros);
macroApplications.enterDefinitionMacroPhase();
List<SourceLibraryBuilder> augmentationLibraries =
@ -631,58 +716,85 @@ class KernelTarget {
_buildForPhase3(augmentationLibraries);
}
benchmarker?.enterPhase(BenchmarkPhases.body_buildBodies);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_buildBodies);
await loader.buildBodies(loader.sourceLibraryBuilders);
benchmarker?.enterPhase(BenchmarkPhases.body_checkMixinSuperAccesses);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_checkMixinSuperAccesses);
loader.checkMixinSuperAccesses();
benchmarker?.enterPhase(BenchmarkPhases.body_finishSynthesizedParameters);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_finishSynthesizedParameters);
finishSynthesizedParameters();
benchmarker?.enterPhase(BenchmarkPhases.body_finishDeferredLoadTearoffs);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_finishDeferredLoadTearoffs);
loader.finishDeferredLoadTearoffs();
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_finishNoSuchMethodForwarders);
loader.finishNoSuchMethodForwarders();
benchmarker?.enterPhase(BenchmarkPhases.body_collectSourceClasses);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_collectSourceClasses);
List<SourceClassBuilder>? sourceClasses = [];
List<SourceExtensionTypeDeclarationBuilder>? extensionTypeDeclarations =
[];
loader.collectSourceClasses(sourceClasses, extensionTypeDeclarations);
benchmarker?.enterPhase(BenchmarkPhases.body_finishNativeMethods);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_finishNativeMethods);
loader.finishNativeMethods();
benchmarker?.enterPhase(BenchmarkPhases.body_finishAugmentationMethods);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_finishAugmentationMethods);
loader.buildBodyNodes();
benchmarker?.enterPhase(BenchmarkPhases.body_finishAllConstructors);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_finishAllConstructors);
finishAllConstructors(sourceClasses, extensionTypeDeclarations);
benchmarker?.enterPhase(BenchmarkPhases.body_runBuildTransformations);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_runBuildTransformations);
runBuildTransformations();
if (loader.macroClass != null) {
// Coverage-ignore-block(suite): Not run.
checkMacroApplications(loader.hierarchy, loader.macroClass!,
loader.sourceLibraryBuilders, macroApplications);
}
if (macroApplications != null) {
// Coverage-ignore-block(suite): Not run.
macroApplications.buildMergedAugmentationLibraries(component!);
}
if (verify) {
benchmarker?.enterPhase(BenchmarkPhases.body_verify);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_verify);
_verify(
allowVerificationErrorForTesting: allowVerificationErrorForTesting);
}
benchmarker?.enterPhase(BenchmarkPhases.body_installAllComponentProblems);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.body_installAllComponentProblems);
installAllComponentProblems(loader.allComponentProblems);
benchmarker?.enterPhase(BenchmarkPhases.unknownBuildComponent);
benchmarker
// Coverage-ignore(suite): Not run.
?.enterPhase(BenchmarkPhases.unknownBuildComponent);
// For whatever reason sourceClasses is kept alive for some amount
// of time, meaning that all source library builders will be kept alive
@ -691,7 +803,9 @@ class KernelTarget {
sourceClasses = null;
extensionTypeDeclarations = null;
context.options.hooksForTesting?.onBuildComponentComplete(component!);
context.options.hooksForTesting
// Coverage-ignore(suite): Not run.
?.onBuildComponentComplete(component!);
return new BuildResult(
component: component, macroApplications: macroApplications);
@ -720,7 +834,9 @@ class KernelTarget {
Map<Uri, Source> uriToSource = new Map<Uri, Source>();
void copySource(Uri uri, Source source) {
uriToSource[uri] = excludeSource
? new Source(source.lineStarts, const <int>[], source.importUri,
?
// Coverage-ignore(suite): Not run.
new Source(source.lineStarts, const <int>[], source.importUri,
source.fileUri)
: source;
}
@ -756,6 +872,7 @@ class KernelTarget {
Builder? declaration =
firstRoot.exportScope.lookup("main", -1, firstRoot.fileUri);
if (declaration is AmbiguousBuilder) {
// Coverage-ignore-block(suite): Not run.
AmbiguousBuilder problem = declaration;
declaration = problem.getFirstDeclaration();
}
@ -765,7 +882,9 @@ class KernelTarget {
}
component.setMainMethodAndMode(mainReference, true, compiledMode);
assert(_getLibraryNnbdModeError(component) == null,
assert(
_getLibraryNnbdModeError(component) == null,
// Coverage-ignore(suite): Not run.
"Got error: ${_getLibraryNnbdModeError(component)}");
ticker.logMs("Linked component");
@ -818,10 +937,13 @@ class KernelTarget {
if (component.mode == NonNullableByDefaultCompiledMode.Strong) {
if (library.nonNullableByDefaultCompiledMode !=
NonNullableByDefaultCompiledMode.Strong) {
// Coverage-ignore-block(suite): Not run.
return "Expected library ${library.importUri} to be strong, "
"but was ${library.nonNullableByDefaultCompiledMode}";
}
} else if (component.mode == NonNullableByDefaultCompiledMode.Weak) {
}
// Coverage-ignore(suite): Not run.
else if (component.mode == NonNullableByDefaultCompiledMode.Weak) {
if (library.nonNullableByDefaultCompiledMode !=
NonNullableByDefaultCompiledMode.Weak) {
return "Expected library ${library.importUri} to be weak, "
@ -1004,6 +1126,7 @@ class KernelTarget {
}
if (!isConstructorAdded) {
// Coverage-ignore-block(suite): Not run.
builder.addSyntheticConstructor(_makeDefaultConstructor(
builder, constructorReference, tearOffReference));
}
@ -1014,6 +1137,7 @@ class KernelTarget {
case ExtensionTypeDeclarationBuilder():
case InvalidTypeDeclarationBuilder():
case BuiltinTypeDeclarationBuilder():
// Coverage-ignore(suite): Not run.
// TODO(johnniwinther): How should we handle this case?
case OmittedTypeDeclarationBuilder():
case null:
@ -1276,6 +1400,7 @@ class KernelTarget {
}
}
if (!found && uri.path != "mirrors") {
// Coverage-ignore-block(suite): Not run.
// dart:mirrors is optional.
throw "Can't find $uri";
}
@ -1342,7 +1467,10 @@ class KernelTarget {
Initializer initializer;
if (superTarget == null) {
int offset = constructor.fileOffset;
if (offset == -1 && constructor.isSynthetic) {
if (offset == -1 &&
// Coverage-ignore(suite): Not run.
constructor.isSynthetic) {
// Coverage-ignore-block(suite): Not run.
offset = cls.fileOffset;
}
classBuilder.addProblem(
@ -1360,6 +1488,7 @@ class KernelTarget {
initializer.parent = constructor;
}
if (constructor.function.body == null) {
// Coverage-ignore-block(suite): Not run.
/// >If a generative constructor c is not a redirecting constructor
/// >and no body is provided, then c implicitly has an empty body {}.
/// We use an empty statement instead.
@ -1470,7 +1599,9 @@ class KernelTarget {
if (uri == 'dart:html' ||
uri == 'dart:svg' ||
uri == 'dart:_native_typed_data' ||
uri == 'dart:_interceptors' && file == 'js_string.dart') {
uri == 'dart:_interceptors' &&
// Coverage-ignore(suite): Not run.
file == 'js_string.dart') {
// TODO(johnniwinther): Use external getters instead of final
// fields. See https://github.com/dart-lang/sdk/issues/33762
} else {
@ -1548,7 +1679,9 @@ class KernelTarget {
loader.coreTypes,
loader.libraries,
new KernelDiagnosticReporter(loader),
logger: (String msg) => ticker.logMs(msg),
logger:
// Coverage-ignore(suite): Not run.
(String msg) => ticker.logMs(msg),
changedStructureNotifier: changedStructureNotifier);
TypeEnvironment environment =
@ -1570,8 +1703,10 @@ class KernelTarget {
enableConstructorTearOff:
globalFeatures.constructorTearoffs.isEnabled,
errorOnUnevaluatedConstant: errorOnUnevaluatedConstant,
exhaustivenessDataForTesting:
loader.dataForTesting?.exhaustivenessData);
exhaustivenessDataForTesting: loader
.dataForTesting
// Coverage-ignore(suite): Not run.
?.exhaustivenessData);
ticker.logMs("Evaluated constants");
markLibrariesUsed(constantEvaluationData.visitedLibraries);
@ -1600,6 +1735,7 @@ class KernelTarget {
ChangedStructureNotifier? get changedStructureNotifier => null;
// Coverage-ignore(suite): Not run.
void runProcedureTransformations(Procedure procedure) {
TypeEnvironment environment =
new TypeEnvironment(loader.coreTypes, loader.hierarchy);
@ -1635,7 +1771,9 @@ class KernelTarget {
// for legacy mode.
assert(
globalFeatures.nonNullable.isEnabled ||
// Coverage-ignore(suite): Not run.
loader.nnbdMode == NnbdMode.Weak,
// Coverage-ignore(suite): Not run.
"Non-weak nnbd mode found without experiment enabled: "
"${loader.nnbdMode}.");
return constants.EvaluationMode.fromNnbdMode(loader.nnbdMode);
@ -1646,7 +1784,9 @@ class KernelTarget {
List<LocatedMessage> errors = verifyComponent(context.options.target,
VerificationStage.afterModularTransformations, component!,
skipPlatform: context.options.skipPlatformVerification);
assert(allowVerificationErrorForTesting || errors.isEmpty,
assert(
allowVerificationErrorForTesting || errors.isEmpty,
// Coverage-ignore(suite): Not run.
"Verification errors found: $errors");
ClassHierarchy hierarchy =
new ClassHierarchy(component!, new CoreTypes(component!),
@ -1659,6 +1799,7 @@ class KernelTarget {
ticker.logMs("Verified component");
}
// Coverage-ignore(suite): Not run.
/// Return `true` if the given [library] was built by this [KernelTarget]
/// from sources, and not loaded from a [DillTarget].
/// Note that this is meant for debugging etc and that it is slow, each

View File

@ -19,6 +19,7 @@ class VariableBuilderImpl extends BuilderImpl implements VariableBuilder {
VariableBuilderImpl(this.variable, this.fileUri);
@override
// Coverage-ignore(suite): Not run.
Builder? get parent => null;
@override
@ -31,12 +32,14 @@ class VariableBuilderImpl extends BuilderImpl implements VariableBuilder {
bool get isConst => variable.isConst;
@override
// Coverage-ignore(suite): Not run.
bool get isFinal => variable.isFinal;
@override
bool get isAssignable => variable.isAssignable;
@override
// Coverage-ignore(suite): Not run.
String get fullNameForErrors => variable.name ?? "<unnamed>";
@override

View File

@ -55,6 +55,7 @@ class LoadLibraryBuilder extends BuilderImpl {
this._importCharOffset, this._combinators);
@override
// Coverage-ignore(suite): Not run.
Uri get fileUri => parent.fileUri;
LoadLibrary createLoadLibrary(
@ -64,6 +65,7 @@ class LoadLibraryBuilder extends BuilderImpl {
Procedure createTearoffMethod(Forest forest) {
if (tearoff != null) {
// Coverage-ignore-block(suite): Not run.
return tearoff!;
}
LoadLibrary expression = createLoadLibrary(charOffset, forest, null);
@ -84,5 +86,6 @@ class LoadLibraryBuilder extends BuilderImpl {
}
@override
// Coverage-ignore(suite): Not run.
String get fullNameForErrors => 'loadLibrary';
}

View File

@ -21,6 +21,7 @@ import '../../source/diet_parser.dart';
import '../../source/source_library_builder.dart';
import 'macro.dart';
// Coverage-ignore(suite): Not run.
List<MacroApplication>? prebuildAnnotations(
{required SourceLibraryBuilder enclosingLibrary,
required List<MetadataBuilder>? metadataBuilders,
@ -67,6 +68,7 @@ class _UnrecognizedNode implements _Node {
const _UnrecognizedNode();
}
// Coverage-ignore(suite): Not run.
class _MacroClassNode implements _Node {
final Token token;
final ClassBuilder classBuilder;
@ -74,6 +76,7 @@ class _MacroClassNode implements _Node {
_MacroClassNode(this.token, this.classBuilder);
}
// Coverage-ignore(suite): Not run.
class _MacroConstructorNode implements _Node {
final ClassBuilder classBuilder;
final String constructorName;
@ -81,12 +84,14 @@ class _MacroConstructorNode implements _Node {
_MacroConstructorNode(this.classBuilder, this.constructorName);
}
// Coverage-ignore(suite): Not run.
class _PrefixNode implements _Node {
final PrefixBuilder prefixBuilder;
_PrefixNode(this.prefixBuilder);
}
// Coverage-ignore(suite): Not run.
class _MacroApplicationNode implements _Node {
final MacroApplication application;
@ -97,6 +102,7 @@ class _NoArgumentsNode implements _Node {
const _NoArgumentsNode();
}
// Coverage-ignore(suite): Not run.
class _ArgumentsNode implements _Node {
final List<macro.Argument> positionalArguments;
final Map<String, macro.Argument> namedArguments;
@ -104,6 +110,7 @@ class _ArgumentsNode implements _Node {
_ArgumentsNode(this.positionalArguments, this.namedArguments);
}
// Coverage-ignore(suite): Not run.
class _MacroArgumentNode implements _Node {
Object? get value => argument.value;
@ -112,18 +119,21 @@ class _MacroArgumentNode implements _Node {
_MacroArgumentNode(this.argument);
}
// Coverage-ignore(suite): Not run.
class _TokenNode implements _Node {
final Token token;
_TokenNode(this.token);
}
// Coverage-ignore(suite): Not run.
class _NamedArgumentIdentifierNode implements _Node {
final String name;
_NamedArgumentIdentifierNode(this.name);
}
// Coverage-ignore(suite): Not run.
class _NamedArgumentNode implements _Node {
final String name;
final macro.Argument argument;
@ -133,6 +143,7 @@ class _NamedArgumentNode implements _Node {
_NamedArgumentNode(this.name, this.argument);
}
// Coverage-ignore(suite): Not run.
class _MacroListener implements Listener {
ClassBuilder? _macroClassBuilder;

View File

@ -17,6 +17,7 @@ import '../../builder/nullability_builder.dart';
import '../../builder/type_builder.dart';
import 'introspectors.dart';
// Coverage-ignore(suite): Not run.
abstract class IdentifierImpl extends macro.IdentifierImpl {
IdentifierImpl({
required int id,
@ -97,6 +98,7 @@ abstract class IdentifierImpl extends macro.IdentifierImpl {
}
}
// Coverage-ignore(suite): Not run.
class TypeBuilderIdentifier extends IdentifierImpl {
final TypeBuilder typeBuilder;
final LibraryBuilder libraryBuilder;
@ -147,6 +149,7 @@ class TypeBuilderIdentifier extends IdentifierImpl {
}
}
// Coverage-ignore(suite): Not run.
class TypeDeclarationBuilderIdentifier extends IdentifierImpl {
final TypeDeclarationBuilder typeDeclarationBuilder;
final LibraryBuilder libraryBuilder;
@ -191,6 +194,7 @@ class TypeDeclarationBuilderIdentifier extends IdentifierImpl {
}
}
// Coverage-ignore(suite): Not run.
class MemberBuilderIdentifier extends IdentifierImpl {
final MemberBuilder memberBuilder;
@ -232,6 +236,7 @@ class MemberBuilderIdentifier extends IdentifierImpl {
}
}
// Coverage-ignore(suite): Not run.
class FormalParameterBuilderIdentifier extends IdentifierImpl {
final LibraryBuilder libraryBuilder;
final FormalParameterBuilder parameterBuilder;
@ -266,6 +271,7 @@ class FormalParameterBuilderIdentifier extends IdentifierImpl {
}
}
// Coverage-ignore(suite): Not run.
class OmittedTypeIdentifier extends IdentifierImpl {
OmittedTypeIdentifier({required int id}) : super(id: id, name: 'dynamic');

View File

@ -25,6 +25,7 @@ import '../hierarchy/hierarchy_builder.dart';
import 'identifiers.dart';
import 'types.dart';
// Coverage-ignore(suite): Not run.
class MacroIntrospection {
final SourceLoader _sourceLoader;
late final MacroTypes types = new MacroTypes(this, _sourceLoader);
@ -666,6 +667,7 @@ class MacroIntrospection {
}
}
// Coverage-ignore(suite): Not run.
class _TypePhaseIntrospector implements macro.TypePhaseIntrospector {
final SourceLoader sourceLoader;
@ -713,6 +715,7 @@ class _TypePhaseIntrospector implements macro.TypePhaseIntrospector {
}
}
// Coverage-ignore(suite): Not run.
class _DeclarationPhaseIntrospector extends _TypePhaseIntrospector
implements macro.DeclarationPhaseIntrospector {
final ClassHierarchyBuilder classHierarchy;
@ -847,6 +850,7 @@ class _DeclarationPhaseIntrospector extends _TypePhaseIntrospector
}
}
// Coverage-ignore(suite): Not run.
class _DefinitionPhaseIntrospector extends _DeclarationPhaseIntrospector
implements macro.DefinitionPhaseIntrospector {
_DefinitionPhaseIntrospector(

Some files were not shown because too many files have changed in this diff Show More