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:
parent
c2fb6fc707
commit
db50ebf837
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.');
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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].
|
||||
///
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ abstract class BuiltinTypeDeclarationBuilder extends TypeDeclarationBuilderImpl
|
|||
}
|
||||
|
||||
@override
|
||||
// Coverage-ignore(suite): Not run.
|
||||
DartType buildAliasedTypeWithBuiltArguments(
|
||||
LibraryBuilder library,
|
||||
Nullability nullability,
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -38,6 +38,7 @@ class NeverTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
|
|||
}
|
||||
|
||||
@override
|
||||
// Coverage-ignore(suite): Not run.
|
||||
DartType buildAliasedTypeWithBuiltArguments(
|
||||
LibraryBuilder library,
|
||||
Nullability nullability,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
part of 'declaration_builders.dart';
|
||||
|
||||
// Coverage-ignore(suite): Not run.
|
||||
abstract class ITypeDeclarationBuilder implements Builder {
|
||||
String get name;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(':'),
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>) {
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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[
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 &&
|
||||
|
|
|
@ -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>');
|
||||
}
|
||||
|
|
|
@ -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(" = ");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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';
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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');
|
||||
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue
Block a user