Version 2.12.0-272.0.dev
Merge commit 'e2b62088712bbb64987e8922ea68cfc9b09fc6ac' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index de71663d..9dcc279 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -253,10 +253,7 @@
@override
bool get isSynthesized {
Member member = memberBuilder.member;
- return member is Procedure &&
- // TODO(johnniwinther): Should this just be `member.isSynthesized`?
- (member.isMemberSignature ||
- (member.isForwardingStub && !member.isForwardingSemiStub));
+ return member is Procedure && member.isSynthetic;
}
@override
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index cbc684d..369ec37 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -1722,13 +1722,20 @@
ClassMember mixedInGetable;
if (tuple.mixedInMember != null &&
!tuple.mixedInMember.isStatic &&
- !tuple.mixedInMember.isDuplicate) {
+ !tuple.mixedInMember.isDuplicate &&
+ !tuple.mixedInMember.isSynthesized) {
/// We treat
///
- /// class Mixin {
+ /// opt-in:
+ /// class Interface {
+ /// method3() {}
+ /// }
+ /// opt-out:
+ /// class Mixin implements Interface {
/// static method1() {}
/// method2() {}
/// method2() {}
+ /// /*member-signature*/ method3() {}
/// }
/// class Class with Mixin {}
///
@@ -1737,6 +1744,27 @@
/// class Mixin {}
/// class Class with Mixin {}
///
+ /// Note that skipped synthetic getable 'method3' is still included
+ /// in the implemented getables, but its type will not define the type
+ /// when mixed in. For instance
+ ///
+ /// opt-in:
+ /// abstract class Interface {
+ /// num get getter;
+ /// }
+ /// opt-out:
+ /// abstract class Super {
+ /// int get getter;
+ /// }
+ /// abstract class Mixin implements Interface {
+ /// /*member-signature*/ num get getter;
+ /// }
+ /// abstract class Class extends Super with Mixin {}
+ ///
+ /// Here the type of `Class.getter` should not be defined from the
+ /// synthetic member signature `Mixin.getter` but as a combined member
+ /// signature of `Super.getter` and `Mixin.getter`, resulting in type
+ /// `int` instead of `num`.
if (definingGetable == null) {
/// class Mixin {
/// method() {}
@@ -1760,13 +1788,15 @@
ClassMember mixedInSetable;
if (tuple.mixedInSetter != null &&
!tuple.mixedInSetter.isStatic &&
- !tuple.mixedInSetter.isDuplicate) {
+ !tuple.mixedInSetter.isDuplicate &&
+ !tuple.mixedInSetter.isSynthesized) {
/// We treat
///
/// class Mixin {
/// static set setter1(value) {}
/// set setter2(value) {}
/// set setter2(value) {}
+ /// /*member-signature*/ setter3() {}
/// }
/// class Class with Mixin {}
///
@@ -1775,6 +1805,27 @@
/// class Mixin {}
/// class Class with Mixin {}
///
+ /// Note that skipped synthetic setable 'setter3' is still included
+ /// in the implemented setables, but its type will not define the type
+ /// when mixed in. For instance
+ ///
+ /// opt-in:
+ /// abstract class Interface {
+ /// void set setter(int value);
+ /// }
+ /// opt-out:
+ /// abstract class Super {
+ /// void set setter(num value);
+ /// }
+ /// abstract class Mixin implements Interface {
+ /// /*member-signature*/ num get getter;
+ /// }
+ /// abstract class Class extends Super with Mixin {}
+ ///
+ /// Here the type of `Class.setter` should not be defined from the
+ /// synthetic member signature `Mixin.setter` but as a combined member
+ /// signature of `Super.setter` and `Mixin.setter`, resulting in type
+ /// `num` instead of `int`.
if (definingSetable == null) {
/// class Mixin {
/// set setter(value) {}
@@ -2192,6 +2243,11 @@
interfaceMember = new SynthesizedInterfaceMember(
classBuilder, name, interfaceMembers.toList(),
superClassMember: extendedMember,
+ // [definingMember] and [mixedInMember] are always the same
+ // here. Use the latter here and the former below to show the
+ // the member is canonical _because_ its the mixed in member and
+ // it defines the isProperty/forSetter properties _because_ it
+ // is the defining member.
canonicalMember: mixedInMember,
mixedInMember: mixedInMember,
isProperty: definingMember.isProperty,
@@ -2244,6 +2300,7 @@
registerAbstractMember(interfaceMember);
}
+ assert(!mixedInMember.isSynthesized);
if (!mixedInMember.isSynthesized) {
/// Members declared in the mixin must override extended and
/// implemented members.
@@ -2311,6 +2368,11 @@
interfaceMember = new SynthesizedInterfaceMember(
classBuilder, name, interfaceMembers.toList(),
superClassMember: mixedInMember,
+ // [definingMember] and [mixedInMember] are always the same
+ // here. Use the latter here and the former below to show the
+ // the member is canonical _because_ its the mixed in member and
+ // it defines the isProperty/forSetter properties _because_ it
+ // is the defining member.
canonicalMember: mixedInMember,
mixedInMember: mixedInMember,
isProperty: definingMember.isProperty,
@@ -2350,6 +2412,7 @@
registerInheritedImplements(mixedInMember, {interfaceMember},
aliasForTesting: classMember);
}
+ assert(!mixedInMember.isSynthesized);
if (!mixedInMember.isSynthesized) {
/// Members declared in the mixin must override extended and
/// implemented members.
@@ -2414,6 +2477,11 @@
interfaceMember = new SynthesizedInterfaceMember(
classBuilder, name, interfaceMembers.toList(),
superClassMember: extendedMember,
+ // [definingMember] and [declaredMember] are always the same
+ // here. Use the latter here and the former below to show the
+ // the member is canonical _because_ its the declared member
+ // and it defines the isProperty/forSetter properties
+ // _because_ it is the defining member.
canonicalMember: declaredMember,
isProperty: definingMember.isProperty,
forSetter: definingMember.forSetter,
diff --git a/pkg/front_end/test/testing_utils.dart b/pkg/front_end/test/testing_utils.dart
index ba228a0..6781673 100644
--- a/pkg/front_end/test/testing_utils.dart
+++ b/pkg/front_end/test/testing_utils.dart
@@ -26,6 +26,11 @@
ProcessResult result = await Process.run("git", ["ls-files", "."],
workingDirectory: new Directory.fromUri(uri).absolute.path,
runInShell: true);
+ if (result.exitCode != 0) {
+ throw "Git returned non-zero error code (${result.exitCode}):\n\n"
+ "stdout: ${result.stdout}\n\n"
+ "stderr: ${result.stderr}";
+ }
String stdout = result.stdout;
return stdout
.split(new RegExp('^', multiLine: true))
diff --git a/pkg/front_end/test/unit_test_suites_impl.dart b/pkg/front_end/test/unit_test_suites_impl.dart
index fde99ac..54af94b 100644
--- a/pkg/front_end/test/unit_test_suites_impl.dart
+++ b/pkg/front_end/test/unit_test_suites_impl.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE.md file.
-// @dart = 2.9
+// ignore_for_file: import_of_legacy_library_into_null_safe
import 'dart:async' show Timer;
import 'dart:convert' show jsonEncode;
@@ -40,16 +40,40 @@
const suiteNamePrefix = "pkg/front_end/test";
+int getDefaultThreads() {
+ int numberOfWorkers = 1;
+ if (Platform.numberOfProcessors > 2) {
+ numberOfWorkers = Platform.numberOfProcessors - 1;
+ }
+ return numberOfWorkers;
+}
+
class Options {
final String configurationName;
final bool verbose;
final bool printFailureLog;
final Uri outputDirectory;
- final String testFilter;
+ final String? testFilter;
final List<String> environmentOptions;
+ final int shardCount;
+ final int shard;
+ final bool skipTestsThatRequireGit;
+ final bool onlyTestsThatRequireGit;
+ final int numberOfWorkers;
- Options(this.configurationName, this.verbose, this.printFailureLog,
- this.outputDirectory, this.testFilter, this.environmentOptions);
+ Options(
+ this.configurationName,
+ this.verbose,
+ this.printFailureLog,
+ this.outputDirectory,
+ this.testFilter,
+ this.environmentOptions, {
+ required this.shardCount,
+ required this.shard,
+ required this.skipTestsThatRequireGit,
+ required this.onlyTestsThatRequireGit,
+ required this.numberOfWorkers,
+ });
static Options parse(List<String> args) {
var parser = new ArgParser()
@@ -63,24 +87,83 @@
..addFlag("print",
abbr: "p", help: "print failure logs", defaultsTo: false)
..addMultiOption('environment',
- abbr: 'D', help: "environment options for the test suite");
+ abbr: 'D', help: "environment options for the test suite")
+ ..addOption("tasks",
+ abbr: "j",
+ help: "The number of parallel tasks to run.",
+ defaultsTo: "${getDefaultThreads()}")
+ ..addOption("shards", help: "Number of shards", defaultsTo: "1")
+ ..addOption("shard", help: "Which shard to run", defaultsTo: "1")
+ ..addFlag("skipTestsThatRequireGit",
+ help: "Whether to skip tests that require git to run",
+ defaultsTo: false)
+ ..addFlag("onlyTestsThatRequireGit",
+ help: "Whether to only run tests that require git",
+ defaultsTo: false);
var parsedArguments = parser.parse(args);
String outputPath = parsedArguments["output-directory"] ?? ".";
Uri outputDirectory = Uri.base.resolveUri(Uri.directory(outputPath));
- String filter;
+
+ bool verbose = parsedArguments["verbose"];
+
+ String? filter;
if (parsedArguments.rest.length == 1) {
filter = parsedArguments.rest.single;
if (filter.startsWith("$suiteNamePrefix/")) {
filter = filter.substring(suiteNamePrefix.length + 1);
}
}
+ String tasksString = parsedArguments["tasks"];
+ int? tasks = int.tryParse(tasksString);
+ if (tasks == null || tasks < 1) {
+ throw "--tasks (-j) has to be an integer >= 1";
+ }
+
+ String shardsString = parsedArguments["shards"];
+ int? shardCount = int.tryParse(shardsString);
+ if (shardCount == null || shardCount < 1) {
+ throw "--shards has to be an integer >= 1";
+ }
+ String shardString = parsedArguments["shard"];
+ int? shard = int.tryParse(shardString);
+ if (shard == null || shard < 1 || shard > shardCount) {
+ throw "--shard has to be an integer >= 1 (and <= --shards)";
+ }
+ bool skipTestsThatRequireGit = parsedArguments["skipTestsThatRequireGit"];
+ bool onlyTestsThatRequireGit = parsedArguments["onlyTestsThatRequireGit"];
+ if (skipTestsThatRequireGit && onlyTestsThatRequireGit) {
+ throw "Only one of --skipTestsThatRequireGit and "
+ "--onlyTestsThatRequireGit can be provided.";
+ }
+
+ if (verbose) {
+ print("NOTE: Created with options\n "
+ "${parsedArguments["named-configuration"]},\n "
+ "${verbose},\n "
+ "${parsedArguments["print"]},\n "
+ "${outputDirectory},\n "
+ "${filter},\n "
+ "${parsedArguments['environment']},\n "
+ "shardCount: ${shardCount},\n "
+ "shard: ${shard - 1 /* make it 0-indexed */},\n "
+ "onlyTestsThatRequireGit: ${onlyTestsThatRequireGit},\n "
+ "skipTestsThatRequireGit: ${skipTestsThatRequireGit},\n "
+ "numberOfWorkers: ${tasks}");
+ }
+
return Options(
- parsedArguments["named-configuration"],
- parsedArguments["verbose"],
- parsedArguments["print"],
- outputDirectory,
- filter,
- parsedArguments['environment']);
+ parsedArguments["named-configuration"],
+ verbose,
+ parsedArguments["print"],
+ outputDirectory,
+ filter,
+ parsedArguments['environment'],
+ shardCount: shardCount,
+ shard: shard - 1 /* make it 0-indexed */,
+ onlyTestsThatRequireGit: onlyTestsThatRequireGit,
+ skipTestsThatRequireGit: skipTestsThatRequireGit,
+ numberOfWorkers: tasks,
+ );
}
}
@@ -93,6 +176,7 @@
final Map<String, Stopwatch> stopwatches = {};
final String configurationName;
final Set<String> seenTests = {};
+ bool gotFrameworkError = false;
ResultLogger(this.prefix, this.resultsPort, this.logsPort, this.verbose,
this.printFailureLog, this.configurationName);
@@ -134,7 +218,7 @@
"configuration": configurationName,
"suite": suite,
"test_name": shortTestName,
- "time_ms": stopwatches[testName].elapsedMilliseconds,
+ "time_ms": stopwatches[testName]!.elapsedMilliseconds,
"expected": "Pass",
"result": matchedExpectations ? "Pass" : "Fail",
"matches": matchedExpectations,
@@ -211,116 +295,169 @@
seenTests.add(testName);
handleTestResult(description, result, prefix, false);
}
+
+ @override
+ void noticeFrameworkCatchError(error, StackTrace stackTrace) {
+ gotFrameworkError = true;
+ }
}
class Suite {
- final String name;
final CreateContext createContext;
final String testingRootPath;
- final String path;
+ final String? path;
final int shardCount;
- final int shard;
final String prefix;
+ final bool requiresGit;
- const Suite(this.name, this.createContext, this.testingRootPath,
- {this.path, this.shardCount: 1, this.shard: 0, String prefix})
- : prefix = prefix ?? name;
+ const Suite(
+ this.prefix,
+ this.createContext,
+ this.testingRootPath, {
+ required this.shardCount,
+ this.path,
+ this.requiresGit: false,
+ });
}
const List<Suite> suites = [
const Suite(
- "fasta/expression", expression.createContext, "../../testing.json"),
- const Suite("fasta/outline", outline.createContext, "../../testing.json"),
+ "fasta/expression",
+ expression.createContext,
+ "../../testing.json",
+ shardCount: 1,
+ ),
const Suite(
- "fasta/fast_strong", fast_strong.createContext, "../../testing.json"),
+ "fasta/outline",
+ outline.createContext,
+ "../../testing.json",
+ shardCount: 2,
+ ),
+ // TODO(CFE TEAM): Should the 'fast strong' be run at all?
const Suite(
- "fasta/incremental", incremental.createContext, "../../testing.json"),
- const Suite("fasta/messages", messages.createContext, "../../testing.json"),
- const Suite("fasta/text_serialization1", text_serialization.createContext,
- "../../testing.json",
- path: "fasta/text_serialization_tester.dart",
- shardCount: 4,
- shard: 0,
- prefix: "fasta/text_serialization"),
- const Suite("fasta/text_serialization2", text_serialization.createContext,
- "../../testing.json",
- path: "fasta/text_serialization_tester.dart",
- shardCount: 4,
- shard: 1,
- prefix: "fasta/text_serialization"),
- const Suite("fasta/text_serialization3", text_serialization.createContext,
- "../../testing.json",
- path: "fasta/text_serialization_tester.dart",
- shardCount: 4,
- shard: 2,
- prefix: "fasta/text_serialization"),
- const Suite("fasta/text_serialization4", text_serialization.createContext,
- "../../testing.json",
- path: "fasta/text_serialization_tester.dart",
- shardCount: 4,
- shard: 3,
- prefix: "fasta/text_serialization"),
- const Suite("fasta/strong1", strong.createContext, "../../testing.json",
- path: "fasta/strong_tester.dart",
- shardCount: 4,
- shard: 0,
- prefix: "fasta/strong"),
- const Suite("fasta/strong2", strong.createContext, "../../testing.json",
- path: "fasta/strong_tester.dart",
- shardCount: 4,
- shard: 1,
- prefix: "fasta/strong"),
- const Suite("fasta/strong3", strong.createContext, "../../testing.json",
- path: "fasta/strong_tester.dart",
- shardCount: 4,
- shard: 2,
- prefix: "fasta/strong"),
- const Suite("fasta/strong4", strong.createContext, "../../testing.json",
- path: "fasta/strong_tester.dart",
- shardCount: 4,
- shard: 3,
- prefix: "fasta/strong"),
- const Suite("incremental_bulk_compiler_smoke",
- incremental_bulk_compiler.createContext, "../testing.json"),
- const Suite("incremental_load_from_dill", incremental_load.createContext,
- "../testing.json"),
- const Suite("lint", lint.createContext, "../testing.json"),
- const Suite("parser", parser.createContext, "../testing.json"),
- const Suite("parser_all", parserAll.createContext, "../testing.json"),
- const Suite("spelling_test_not_src", spelling_not_src.createContext,
- "../testing.json"),
+ "fasta/fast_strong",
+ fast_strong.createContext,
+ "../../testing.json",
+ shardCount: 4,
+ ),
const Suite(
- "spelling_test_src", spelling_src.createContext, "../testing.json"),
- const Suite("fasta/weak", weak.createContext, "../../testing.json"),
- const Suite("fasta/textual_outline", textual_outline.createContext,
- "../../testing.json"),
+ "fasta/incremental",
+ incremental.createContext,
+ "../../testing.json",
+ shardCount: 1,
+ ),
+ const Suite(
+ "fasta/messages",
+ messages.createContext,
+ "../../testing.json",
+ shardCount: 1,
+ requiresGit: true,
+ ),
+ const Suite(
+ "fasta/text_serialization",
+ text_serialization.createContext,
+ "../../testing.json",
+ path: "fasta/text_serialization_tester.dart",
+ shardCount: 10,
+ ),
+ const Suite(
+ "fasta/strong",
+ strong.createContext,
+ "../../testing.json",
+ path: "fasta/strong_tester.dart",
+ shardCount: 10,
+ ),
+ const Suite(
+ "incremental_bulk_compiler_smoke",
+ incremental_bulk_compiler.createContext,
+ "../testing.json",
+ shardCount: 1,
+ ),
+ const Suite(
+ "incremental_load_from_dill",
+ incremental_load.createContext,
+ "../testing.json",
+ shardCount: 2,
+ ),
+ const Suite(
+ "lint",
+ lint.createContext,
+ "../testing.json",
+ shardCount: 1,
+ requiresGit: true,
+ ),
+ const Suite(
+ "parser",
+ parser.createContext,
+ "../testing.json",
+ shardCount: 1,
+ ),
+ const Suite(
+ "parser_all",
+ parserAll.createContext,
+ "../testing.json",
+ shardCount: 4,
+ requiresGit:
+ true /* technically not true, but tests *many* more files
+ than in test_matrix.json file set */
+ ,
+ ),
+ const Suite(
+ "spelling_test_not_src",
+ spelling_not_src.createContext,
+ "../testing.json",
+ shardCount: 1,
+ requiresGit: true,
+ ),
+ const Suite(
+ "spelling_test_src",
+ spelling_src.createContext,
+ "../testing.json",
+ shardCount: 1,
+ requiresGit: true,
+ ),
+ const Suite(
+ "fasta/weak",
+ weak.createContext,
+ "../../testing.json",
+ shardCount: 2,
+ ),
+ const Suite(
+ "fasta/textual_outline",
+ textual_outline.createContext,
+ "../../testing.json",
+ shardCount: 1,
+ ),
];
const Duration timeoutDuration = Duration(minutes: 30);
class SuiteConfiguration {
- final String name;
+ final Suite suite;
final SendPort resultsPort;
final SendPort logsPort;
final bool verbose;
final bool printFailureLog;
final String configurationName;
- final String testFilter;
+ final String? testFilter;
final List<String> environmentOptions;
+ final int shard;
const SuiteConfiguration(
- this.name,
- this.resultsPort,
- this.logsPort,
- this.verbose,
- this.printFailureLog,
- this.configurationName,
- this.testFilter,
- this.environmentOptions);
+ this.suite,
+ this.resultsPort,
+ this.logsPort,
+ this.verbose,
+ this.printFailureLog,
+ this.configurationName,
+ this.testFilter,
+ this.environmentOptions,
+ this.shard,
+ );
}
-void runSuite(SuiteConfiguration configuration) {
- Suite suite = suites.where((s) => s.name == configuration.name).single;
+void runSuite(SuiteConfiguration configuration) async {
+ Suite suite = configuration.suite;
String name = suite.prefix;
String fullSuiteName = "$suiteNamePrefix/$name";
Uri suiteUri = Platform.script.resolve(suite.path ?? "${name}_suite.dart");
@@ -334,23 +471,30 @@
configuration.verbose,
configuration.printFailureLog,
configuration.configurationName);
- runMe(<String>[
- if (configuration.testFilter != null) configuration.testFilter,
- if (configuration.environmentOptions != null)
+ await runMe(
+ <String>[
+ if (configuration.testFilter != null) configuration.testFilter!,
for (String option in configuration.environmentOptions) '-D${option}',
- ], suite.createContext,
- me: suiteUri,
- configurationPath: suite.testingRootPath,
- logger: logger,
- shards: suite.shardCount,
- shard: suite.shard);
+ ],
+ suite.createContext,
+ me: suiteUri,
+ configurationPath: suite.testingRootPath,
+ logger: logger,
+ shards: suite.shardCount,
+ shard: configuration.shard,
+ );
+ if (logger.gotFrameworkError) {
+ throw "Got framework error!";
+ }
}
-void writeLinesToFile(Uri uri, List<String> lines) async {
+Future<void> writeLinesToFile(Uri uri, List<String> lines) async {
await File.fromUri(uri).writeAsString(lines.map((line) => "$line\n").join());
}
main([List<String> arguments = const <String>[]]) async {
+ Stopwatch totalRuntime = new Stopwatch()..start();
+
List<String> results = [];
List<String> logs = [];
Options options = Options.parse(arguments);
@@ -359,13 +503,23 @@
ReceivePort logsPort = new ReceivePort()
..listen((logEntry) => logs.add(logEntry));
List<Future<bool>> futures = [];
+
+ if (options.verbose) {
+ print("NOTE: Willing to run with ${options.numberOfWorkers} 'workers'");
+ print("");
+ }
+
+ int numberOfFreeWorkers = options.numberOfWorkers;
// Run test suites and record the results and possible failure logs.
+ int chunkNum = 0;
for (Suite suite in suites) {
- String name = suite.name;
- String filter = options.testFilter;
+ if (options.onlyTestsThatRequireGit && !suite.requiresGit) continue;
+ if (options.skipTestsThatRequireGit && suite.requiresGit) continue;
+ String prefix = suite.prefix;
+ String? filter = options.testFilter;
if (filter != null) {
// Skip suites that are not hit by the test filter, is there is one.
- if (!filter.startsWith(suite.prefix)) {
+ if (!filter.startsWith(prefix)) {
continue;
}
// Remove the 'fasta/' from filters, if there, because it is not used
@@ -374,39 +528,63 @@
filter = filter.substring("fasta/".length);
}
}
- // Start the test suite in a new isolate.
- ReceivePort exitPort = new ReceivePort();
- SuiteConfiguration configuration = SuiteConfiguration(
- name,
- resultsPort.sendPort,
- logsPort.sendPort,
- options.verbose,
- options.printFailureLog,
- options.configurationName,
- filter,
- options.environmentOptions);
- Future future = Future<bool>(() async {
- Stopwatch stopwatch = Stopwatch()..start();
- print("Running suite $name");
- Isolate isolate = await Isolate.spawn<SuiteConfiguration>(
- runSuite, configuration,
- onExit: exitPort.sendPort);
- bool timedOut = false;
- Timer timer = Timer(timeoutDuration, () {
- timedOut = true;
- print("Suite $name timed out after "
- "${timeoutDuration.inMilliseconds}ms");
- isolate.kill(priority: Isolate.immediate);
- });
- await exitPort.first;
- timer.cancel();
- if (!timedOut) {
- int seconds = stopwatch.elapsedMilliseconds ~/ 1000;
- print("Suite $name finished (took ${seconds} seconds)");
+ for (int shard = 0; shard < suite.shardCount; shard++) {
+ if (chunkNum++ % options.shardCount != options.shard) continue;
+
+ while (numberOfFreeWorkers <= 0) {
+ // This might not be great design, but it'll work fine.
+ await Future.delayed(const Duration(milliseconds: 50));
}
- return timedOut;
- });
- futures.add(future);
+ numberOfFreeWorkers--;
+ // Start the test suite in a new isolate.
+ ReceivePort exitPort = new ReceivePort();
+ ReceivePort errorPort = new ReceivePort();
+ SuiteConfiguration configuration = new SuiteConfiguration(
+ suite,
+ resultsPort.sendPort,
+ logsPort.sendPort,
+ options.verbose,
+ options.printFailureLog,
+ options.configurationName,
+ filter,
+ options.environmentOptions,
+ shard);
+ Future<bool> future = new Future<bool>(() async {
+ try {
+ Stopwatch stopwatch = new Stopwatch()..start();
+ String naming = "$prefix";
+ if (suite.shardCount > 1) {
+ naming += " (${shard + 1} of ${suite.shardCount})";
+ }
+ print("Running suite $naming");
+ Isolate isolate = await Isolate.spawn<SuiteConfiguration>(
+ runSuite, configuration,
+ onExit: exitPort.sendPort, onError: errorPort.sendPort);
+ bool timedOutOrCrash = false;
+ Timer timer = new Timer(timeoutDuration, () {
+ timedOutOrCrash = true;
+ print("Suite $naming timed out after "
+ "${timeoutDuration.inMilliseconds}ms");
+ isolate.kill(priority: Isolate.immediate);
+ });
+ await exitPort.first;
+ errorPort.close();
+ bool gotError = !await errorPort.isEmpty;
+ if (gotError) {
+ timedOutOrCrash = true;
+ }
+ timer.cancel();
+ if (!timedOutOrCrash) {
+ int seconds = stopwatch.elapsedMilliseconds ~/ 1000;
+ print("Suite $naming finished (took ${seconds} seconds)");
+ }
+ return timedOutOrCrash;
+ } finally {
+ numberOfFreeWorkers++;
+ }
+ });
+ futures.add(future);
+ }
}
// Wait for isolates to terminate and clean up.
Iterable<bool> timeouts = await Future.wait(futures);
@@ -419,6 +597,7 @@
await writeLinesToFile(logsJsonUri, logs);
print("Log files written to ${resultJsonUri.toFilePath()} and"
" ${logsJsonUri.toFilePath()}");
+ print("Entire run took ${totalRuntime.elapsed}.");
// Return with exit code 1 if at least one suite timed out.
bool timeout = timeouts.any((timeout) => timeout);
if (timeout) {
diff --git a/pkg/front_end/test/utils/io_utils.dart b/pkg/front_end/test/utils/io_utils.dart
index 6cd9daa..05be497 100644
--- a/pkg/front_end/test/utils/io_utils.dart
+++ b/pkg/front_end/test/utils/io_utils.dart
@@ -11,7 +11,16 @@
'git', ['rev-parse', '--show-toplevel'],
runInShell: true,
workingDirectory: new File.fromUri(Platform.script).parent.path);
- return (result.stdout as String).trim();
+ if (result.exitCode != 0) {
+ throw "Git returned non-zero error code (${result.exitCode}):\n\n"
+ "stdout: ${result.stdout}\n\n"
+ "stderr: ${result.stderr}";
+ }
+ String dirPath = (result.stdout as String).trim();
+ if (!new Directory(dirPath).existsSync()) {
+ throw "The path returned by git ($dirPath) does not actually exist.";
+ }
+ return dirPath;
}
Uri computeRepoDirUri() {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
index 525ba41..3aede9c 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
@@ -24,32 +24,22 @@
;
mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
return super.{iss::A::method}(i, s: s);
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::A::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::B::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::B::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::B::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::B::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::B::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::B::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::B::runtimeType
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
@@ -59,16 +49,16 @@
const synthetic constructor •() → self::_E&Object&A*
: super core::Object::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::A::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
return super.{iss::A::method}(i, s: s);
}
@@ -76,18 +66,8 @@
const synthetic constructor •() → self::_E&Object&A&D*
: super self::_E&Object&A::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::D::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::D::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::D::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::D::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::D::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::D::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::D::runtimeType
- forwarding-stub method method(covariant core::num* i) → core::String*
- return super.{self::_E&Object&A::method}(i);
+ forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+ return super.{self::_E&Object&A::method}(i, s: s);
}
class E extends self::_E&Object&A&D {
synthetic constructor •() → self::E*
@@ -97,16 +77,16 @@
const synthetic constructor •() → self::_G&Object&A*
: super core::Object::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::A::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
return super.{iss::A::method}(i, s: s);
}
@@ -114,16 +94,6 @@
const synthetic constructor •() → self::_G&Object&A&F*
: super self::_G&Object&A::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::F::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::F::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::F::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::F::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::F::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::F::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::F::runtimeType
}
class G extends self::_G&Object&A&F {
synthetic constructor •() → self::G*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
index eb41372..7273976 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
@@ -24,32 +24,22 @@
;
mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
return super.{iss::A::method}(i, s: s);
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::A::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::B::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::B::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::B::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::B::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::B::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::B::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::B::runtimeType
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
@@ -60,16 +50,16 @@
const synthetic constructor •() → self::_E&Object&A*
: super core::Object::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::A::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
return super.{iss::A::method}(i, s: s);
}
@@ -77,18 +67,8 @@
const synthetic constructor •() → self::_E&Object&A&D*
: super self::_E&Object&A::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::D::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::D::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::D::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::D::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::D::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::D::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::D::runtimeType
- forwarding-stub method method(covariant core::num* i) → core::String*
- return super.{self::_E&Object&A::method}(i);
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E&Object&A::method}(i, s: s);
}
class E extends self::_E&Object&A&D {
synthetic constructor •() → self::E*
@@ -99,16 +79,16 @@
const synthetic constructor •() → self::_G&Object&A*
: super core::Object::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::A::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
return super.{iss::A::method}(i, s: s);
}
@@ -116,16 +96,6 @@
const synthetic constructor •() → self::_G&Object&A&F*
: super self::_G&Object&A::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::F::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::F::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::F::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::F::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::F::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::F::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::F::runtimeType
}
class G extends self::_G&Object&A&F {
synthetic constructor •() → self::G*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart
new file mode 100644
index 0000000..08bd4e4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2020, 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.
+
+import 'issue41210_lib.dart';
+
+class C with A, B {} // error
+
+class E with A, D {} // ok
+
+class G with A, F {} // ok
+
+main() {
+ print(C().method(0));
+}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.outline.expect
new file mode 100644
index 0000000..cb4f387
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.outline.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// class C with A, B {} // error
+// ^
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// String method(num i);
+// ^
+// pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+// ^
+//
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib.dart";
+
+abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+ return super.{iss::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A&B*
+ : super self::_C&Object&A::•()
+ ;
+ abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+}
+class C extends self::_C&Object&A&B {
+ synthetic constructor •() → self::C*
+ ;
+}
+abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+ return super.{iss::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E&Object&A&D*
+ : super self::_E&Object&A::•()
+ ;
+ forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+ return super.{self::_E&Object&A::method}(i, s: s);
+}
+class E extends self::_E&Object&A&D {
+ synthetic constructor •() → self::E*
+ ;
+}
+abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+ return super.{iss::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A&F*
+ : super self::_G&Object&A::•()
+ ;
+}
+class G extends self::_G&Object&A&F {
+ synthetic constructor •() → self::G*
+ ;
+}
+static method main() → dynamic
+ ;
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+ synthetic constructor •() → iss::Interface*
+ ;
+ abstract method method(core::num* i) → core::String*;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Interface2 extends core::Object {
+ synthetic constructor •() → iss::Interface2*
+ ;
+ abstract method method(covariant core::int* i) → core::String*;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/ {
+ method method(core::num* i, {core::String* s = "hello"}) → core::String*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements iss::Interface {
+ synthetic constructor •() → iss::B*
+ ;
+ abstract method method(core::num* i) → core::String*;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
+ synthetic constructor •() → iss::D*
+ ;
+ abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class F extends core::Object implements iss::Interface {
+ synthetic constructor •() → iss::F*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.strong.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.strong.expect
new file mode 100644
index 0000000..efd7b7f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.strong.expect
@@ -0,0 +1,209 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// class C with A, B {} // error
+// ^
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// String method(num i);
+// ^
+// pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+// ^
+//
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib.dart";
+
+abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{iss::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A&B*
+ : super self::_C&Object&A::•()
+ ;
+ abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+}
+class C extends self::_C&Object&A&B {
+ synthetic constructor •() → self::C*
+ : super self::_C&Object&A&B::•()
+ ;
+}
+abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{iss::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E&Object&A&D*
+ : super self::_E&Object&A::•()
+ ;
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E&Object&A::method}(i, s: s);
+}
+class E extends self::_E&Object&A&D {
+ synthetic constructor •() → self::E*
+ : super self::_E&Object&A&D::•()
+ ;
+}
+abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{iss::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A&F*
+ : super self::_G&Object&A::•()
+ ;
+}
+class G extends self::_G&Object&A&F {
+ synthetic constructor •() → self::G*
+ : super self::_G&Object&A&F::•()
+ ;
+}
+static method main() → dynamic {
+ core::print(new self::C::•().{self::_C&Object&A&B::method}(0));
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+ synthetic constructor •() → iss::Interface*
+ : super core::Object::•()
+ ;
+ abstract method method(core::num* i) → core::String*;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Interface2 extends core::Object {
+ synthetic constructor •() → iss::Interface2*
+ : super core::Object::•()
+ ;
+ abstract method method(covariant core::int* i) → core::String*;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/ {
+ method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements iss::Interface {
+ synthetic constructor •() → iss::B*
+ : super core::Object::•()
+ ;
+ abstract method method(core::num* i) → core::String*;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
+ synthetic constructor •() → iss::D*
+ : super core::Object::•()
+ ;
+ abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class F extends core::Object implements iss::Interface {
+ synthetic constructor •() → iss::F*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants {
+ #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline.expect
new file mode 100644
index 0000000..8c473d0
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+import 'issue41210_lib.dart';
+
+class C with A, B {}
+
+class E with A, D {}
+
+class G with A, F {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8c473d0
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+import 'issue41210_lib.dart';
+
+class C with A, B {}
+
+class E with A, D {}
+
+class G with A, F {}
+
+main() {}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_13.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_13.yaml.world.1.expect
index cd92eb8..136a4b6 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_13.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_13.yaml.world.1.expect
@@ -7,16 +7,6 @@
synthetic constructor •() → main::ABC*
: super a::AB::•()
;
- abstract mixin-stub get _identityHashCode() → dart.core::int*; -> a::C::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> a::C::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> a::C::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> a::C::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> a::C::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → dart.core::bool*; -> a::C::==
- abstract mixin-stub get hashCode() → dart.core::int*; -> a::C::hashCode
- abstract mixin-stub method toString() → dart.core::String*; -> a::C::toString
- abstract mixin-stub method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> a::C::noSuchMethod
- abstract mixin-stub get runtimeType() → dart.core::Type*; -> a::C::runtimeType
}
}
library from "package:module/a.dart" as a {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/error_on_recompile_with_no_change.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/error_on_recompile_with_no_change.yaml
index 1f4e0da3..d97a711 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/error_on_recompile_with_no_change.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/error_on_recompile_with_no_change.yaml
@@ -49,7 +49,6 @@
- entry: main.dart
worldType: updated
- errors: true
expectInitializeFromDill: false
invalidate:
- main.dart
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/error_on_recompile_with_no_change.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/error_on_recompile_with_no_change.yaml.world.2.expect
index e251ab0..03611f5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/error_on_recompile_with_no_change.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/error_on_recompile_with_no_change.yaml.world.2.expect
@@ -50,15 +50,6 @@
}
}
library from "org-dartlang-test:///main.dart" as main {
-//
-// Problems in library:
-//
-// org-dartlang-test:///main.dart:9:36: Error: The getter 'axis' isn't defined for the class 'Constraints'.
-// - 'Constraints' is from 'package:flutter/object.dart' ('org-dartlang-test:///flutter/object.dart').
-// Try correcting the name to the name of an existing getter, or defining a getter or field named 'axis'.
-// print(renderObject.constraints.axis);
-// ^^^^
-//
import "package:flutter/object.dart";
import "org-dartlang-test:///lib.dart";
@@ -92,7 +83,7 @@
get renderObject() → main::Adaptor*
return super.{obj::RenderObject::renderObject} as{TypeError} main::Adaptor*;
method foo() → void {
- dart.core::print(invalid-expression "org-dartlang-test:///main.dart:9:36: Error: The getter 'axis' isn't defined for the class 'Constraints'.\n - 'Constraints' is from 'package:flutter/object.dart' ('org-dartlang-test:///flutter/object.dart').\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'axis'.\n print(renderObject.constraints.axis);\n ^^^^");
+ dart.core::print(this.{main::AdaptorElement::renderObject}.{main::_Adaptor&RenderFoo&LibMixin::constraints}.{obj::FooConstraints::axis});
}
abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
index 7e07afc..7d7406e 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
@@ -67,13 +67,13 @@
synthetic constructor •() → main::__HotReloadIssueState&State&AfterLayoutMixin*
: super fra::State::•()
;
- abstract mixin-stub get _widget() → main::HotReloadIssue*; -> aft::AfterLayoutMixin::_widget
- abstract mixin-stub set _widget(generic-covariant-impl main::HotReloadIssue* value) → void; -> aft::AfterLayoutMixin::_widget
- abstract mixin-stub method toString() → dart.core::String*; -> aft::AfterLayoutMixin::toString
- abstract mixin-stub operator ==(dynamic other) → dart.core::bool*; -> aft::AfterLayoutMixin::==
- abstract mixin-stub get hashCode() → dart.core::int*; -> aft::AfterLayoutMixin::hashCode
- abstract mixin-stub method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> aft::AfterLayoutMixin::noSuchMethod
- abstract mixin-stub get runtimeType() → dart.core::Type*; -> aft::AfterLayoutMixin::runtimeType
+ abstract member-signature get _widget() → main::HotReloadIssue*; -> fra::State::_widget
+ abstract member-signature set _widget(generic-covariant-impl main::HotReloadIssue* value) → void; -> fra::State::_widget
+ abstract member-signature method toString() → dart.core::String*; -> fra::Diagnosticable::toString
+ abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
+ abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
+ abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
}
class _HotReloadIssueState extends main::__HotReloadIssueState&State&AfterLayoutMixin {
synthetic constructor •() → main::_HotReloadIssueState*
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart
new file mode 100644
index 0000000..4f4e957
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.9
+
+import 'opt_in_lib1.dart';
+import 'opt_in_lib2.dart';
+import 'opt_out_lib.dart';
+
+class Super {
+ B get getter => new B();
+ void set setter(A a) {}
+}
+
+class Class1 extends Super with Mixin1 {}
+
+class Class2 extends Base with Mixin2 {}
+
+main() {
+ var c = new Class1();
+ c.getter.property;
+ c.setter = new B();
+ testInterface2(new Mixin2());
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.textual_outline.expect
new file mode 100644
index 0000000..f98e8df
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+// @dart = 2.9
+import 'opt_in_lib1.dart';
+import 'opt_in_lib2.dart';
+import 'opt_out_lib.dart';
+
+class Super {
+ B get getter => new B();
+ void set setter(A a) {}
+}
+
+class Class1 extends Super with Mixin1 {}
+
+class Class2 extends Base with Mixin2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cf495e2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+// @dart = 2.9
+import 'opt_in_lib1.dart';
+import 'opt_in_lib2.dart';
+import 'opt_out_lib.dart';
+
+class Class1 extends Super with Mixin1 {}
+
+class Class2 extends Base with Mixin2 {}
+
+class Super {
+ B get getter => new B();
+ void set setter(A a) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect
new file mode 100644
index 0000000..a5e1b1f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect
@@ -0,0 +1,202 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "opt_in_lib1.dart" as opt;
+import "opt_out_lib.dart" as opt2;
+import "opt_in_lib2.dart" as opt3;
+
+import "org-dartlang-testcase:///opt_in_lib1.dart";
+import "org-dartlang-testcase:///opt_in_lib2.dart";
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+class Super extends core::Object {
+ synthetic constructor •() → self::Super*
+ : super core::Object::•()
+ ;
+ get getter() → opt::B*
+ return new opt::B::•();
+ set setter(opt::A* a) → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class1&Super&Mixin1 = self::Super with opt2::Mixin1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_Class1&Super&Mixin1*
+ : super self::Super::•()
+ ;
+}
+class Class1 extends self::_Class1&Super&Mixin1 {
+ synthetic constructor •() → self::Class1*
+ : super self::_Class1&Super&Mixin1::•()
+ ;
+}
+abstract class _Class2&Base&Mixin2 = opt::Base with opt3::Mixin2 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_Class2&Base&Mixin2*
+ : super opt::Base::•()
+ ;
+ abstract member-signature get _privateGetter() → opt::B*; -> opt::Base::_privateGetter
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature set _privateSetter(opt::A* a) → void; -> opt::Base::_privateSetter
+}
+class Class2 extends self::_Class2&Base&Mixin2 {
+ synthetic constructor •() → self::Class2*
+ : super self::_Class2&Base&Mixin2::•()
+ ;
+}
+static method main() → dynamic {
+ self::Class1* c = new self::Class1::•();
+ c.{self::Super::getter}.{opt::B::property};
+ c.{self::Super::setter} = new opt::B::•();
+ opt::testInterface2(new opt3::Mixin2::•());
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart:32:8: Error: A catch clause must have a body, even if it is empty.
+// Try adding an empty body.
+// } on NoSuchMethodError (e) {
+// ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart:34:3: Error: Expected ';' after this.
+// }
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart:38:8: Error: A catch clause must have a body, even if it is empty.
+// Try adding an empty body.
+// } on NoSuchMethodError (e) {
+// ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart:40:3: Error: Expected ';' after this.
+// }
+// ^
+//
+import self as opt;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → opt::A
+ : super core::Object::•()
+ ;
+}
+class B extends opt::A {
+ synthetic constructor •() → opt::B
+ : super opt::A::•()
+ ;
+ get property() → core::int
+ return 0;
+}
+class C extends opt::A {
+ synthetic constructor •() → opt::C
+ : super opt::A::•()
+ ;
+}
+class Base extends core::Object {
+ synthetic constructor •() → opt::Base
+ : super core::Object::•()
+ ;
+ get _privateGetter() → opt::B
+ return new opt::B::•();
+ set _privateSetter(opt::A a) → void {}
+}
+abstract class Interface1 extends core::Object {
+ synthetic constructor •() → opt::Interface1
+ : super core::Object::•()
+ ;
+ abstract get getter() → opt::A;
+ abstract set setter(opt::C c) → void;
+}
+abstract class Interface2 extends core::Object {
+ synthetic constructor •() → opt::Interface2
+ : super core::Object::•()
+ ;
+ abstract get _privateGetter() → opt::A;
+ abstract set _privateSetter(opt::C c) → void;
+}
+static method testInterface2(opt::Interface2 c) → dynamic {
+ try {
+ c.{opt::Interface2::_privateGetter};
+ throw "Expected NoSuchMethodError";
+ }
+ on core::NoSuchMethodError catch(no-exception-var) {
+ }
+ (dynamic e) → Null {
+ core::print(e);
+ };
+ try {
+ c.{opt::Interface2::_privateSetter} = new opt::C::•();
+ throw "Expected NoSuchMethodError";
+ }
+ on core::NoSuchMethodError catch(no-exception-var) {
+ }
+ (dynamic e) → Null {
+ core::print(e);
+ };
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt3;
+import "dart:core" as core;
+import "opt_in_lib1.dart" as opt;
+
+import "org-dartlang-testcase:///opt_in_lib1.dart";
+
+class Mixin2 extends core::Object implements opt::Interface2 {
+ synthetic constructor •() → opt3::Mixin2
+ : super core::Object::•()
+ ;
+ no-such-method-forwarder get /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateGetter() → opt::A
+ return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} opt::A;
+ no-such-method-forwarder set /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateSetter(opt::C c) → void
+ return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+}
+
+library;
+import self as opt2;
+import "dart:core" as core;
+import "opt_in_lib1.dart" as opt;
+
+import "org-dartlang-testcase:///opt_in_lib1.dart";
+
+abstract class Mixin1 extends core::Object implements opt::Interface1 {
+ synthetic constructor •() → opt2::Mixin1*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature get getter() → opt::A*; -> opt::Interface1::getter
+ abstract member-signature set setter(opt::C* c) → void; -> opt::Interface1::setter
+}
+
+constants {
+ #C1 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateGetter
+ #C2 = <core::Type*>[]
+ #C3 = <dynamic>[]
+ #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+ #C5 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateSetter=
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..83877b7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect
@@ -0,0 +1,214 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "opt_in_lib1.dart" as opt;
+import "opt_out_lib.dart" as opt2;
+import "opt_in_lib2.dart" as opt3;
+
+import "org-dartlang-testcase:///opt_in_lib1.dart";
+import "org-dartlang-testcase:///opt_in_lib2.dart";
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+class Super extends core::Object {
+ synthetic constructor •() → self::Super*
+ : super core::Object::•()
+ ;
+ get getter() → opt::B*
+ return new opt::B::•();
+ set setter(opt::A* a) → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class1&Super&Mixin1 extends self::Super implements opt2::Mixin1 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_Class1&Super&Mixin1*
+ : super self::Super::•()
+ ;
+ abstract member-signature get /* from org-dartlang-testcase:///opt_out_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method /* from org-dartlang-testcase:///opt_out_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///opt_out_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///opt_out_lib.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method /* from org-dartlang-testcase:///opt_out_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator /* from org-dartlang-testcase:///opt_out_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get /* from org-dartlang-testcase:///opt_out_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method /* from org-dartlang-testcase:///opt_out_lib.dart */ toString() → core::String*; -> core::Object::toString
+ abstract member-signature method /* from org-dartlang-testcase:///opt_out_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get /* from org-dartlang-testcase:///opt_out_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature get /* from org-dartlang-testcase:///opt_out_lib.dart */ getter() → opt::A*; -> opt::Interface1::getter
+ abstract member-signature set /* from org-dartlang-testcase:///opt_out_lib.dart */ setter(opt::C* c) → void; -> opt::Interface1::setter
+}
+class Class1 extends self::_Class1&Super&Mixin1 {
+ synthetic constructor •() → self::Class1*
+ : super self::_Class1&Super&Mixin1::•()
+ ;
+}
+abstract class _Class2&Base&Mixin2 extends opt::Base implements opt3::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_Class2&Base&Mixin2*
+ : super opt::Base::•()
+ ;
+ abstract member-signature get _privateGetter() → opt::B*; -> opt::Base::_privateGetter
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature set _privateSetter(opt::A* a) → void; -> opt::Base::_privateSetter
+}
+class Class2 extends self::_Class2&Base&Mixin2 {
+ synthetic constructor •() → self::Class2*
+ : super self::_Class2&Base&Mixin2::•()
+ ;
+}
+static method main() → dynamic {
+ self::Class1* c = new self::Class1::•();
+ c.{self::Super::getter}.{opt::B::property};
+ c.{self::Super::setter} = new opt::B::•();
+ opt::testInterface2(new opt3::Mixin2::•());
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart:32:8: Error: A catch clause must have a body, even if it is empty.
+// Try adding an empty body.
+// } on NoSuchMethodError (e) {
+// ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart:34:3: Error: Expected ';' after this.
+// }
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart:38:8: Error: A catch clause must have a body, even if it is empty.
+// Try adding an empty body.
+// } on NoSuchMethodError (e) {
+// ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart:40:3: Error: Expected ';' after this.
+// }
+// ^
+//
+import self as opt;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → opt::A
+ : super core::Object::•()
+ ;
+}
+class B extends opt::A {
+ synthetic constructor •() → opt::B
+ : super opt::A::•()
+ ;
+ get property() → core::int
+ return 0;
+}
+class C extends opt::A {
+ synthetic constructor •() → opt::C
+ : super opt::A::•()
+ ;
+}
+class Base extends core::Object {
+ synthetic constructor •() → opt::Base
+ : super core::Object::•()
+ ;
+ get _privateGetter() → opt::B
+ return new opt::B::•();
+ set _privateSetter(opt::A a) → void {}
+}
+abstract class Interface1 extends core::Object {
+ synthetic constructor •() → opt::Interface1
+ : super core::Object::•()
+ ;
+ abstract get getter() → opt::A;
+ abstract set setter(opt::C c) → void;
+}
+abstract class Interface2 extends core::Object {
+ synthetic constructor •() → opt::Interface2
+ : super core::Object::•()
+ ;
+ abstract get _privateGetter() → opt::A;
+ abstract set _privateSetter(opt::C c) → void;
+}
+static method testInterface2(opt::Interface2 c) → dynamic {
+ try {
+ c.{opt::Interface2::_privateGetter};
+ throw "Expected NoSuchMethodError";
+ }
+ on core::NoSuchMethodError catch(no-exception-var) {
+ }
+ (dynamic e) → Null {
+ core::print(e);
+ };
+ try {
+ c.{opt::Interface2::_privateSetter} = new opt::C::•();
+ throw "Expected NoSuchMethodError";
+ }
+ on core::NoSuchMethodError catch(no-exception-var) {
+ }
+ (dynamic e) → Null {
+ core::print(e);
+ };
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt3;
+import "dart:core" as core;
+import "opt_in_lib1.dart" as opt;
+
+import "org-dartlang-testcase:///opt_in_lib1.dart";
+
+class Mixin2 extends core::Object implements opt::Interface2 {
+ synthetic constructor •() → opt3::Mixin2
+ : super core::Object::•()
+ ;
+ no-such-method-forwarder get /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateGetter() → opt::A
+ return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} opt::A;
+ no-such-method-forwarder set /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateSetter(opt::C c) → void
+ return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+}
+
+library;
+import self as opt2;
+import "dart:core" as core;
+import "opt_in_lib1.dart" as opt;
+
+import "org-dartlang-testcase:///opt_in_lib1.dart";
+
+abstract class Mixin1 extends core::Object implements opt::Interface1 {
+ synthetic constructor •() → opt2::Mixin1*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature get getter() → opt::A*; -> opt::Interface1::getter
+ abstract member-signature set setter(opt::C* c) → void; -> opt::Interface1::setter
+}
+
+constants {
+ #C1 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateGetter
+ #C2 = <core::Type*>[]
+ #C3 = <dynamic>[]
+ #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+ #C5 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateSetter=
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart
new file mode 100644
index 0000000..0019ab0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib1.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2021, 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.
+
+class A {}
+
+class B extends A {
+ int get property => 0;
+}
+
+class C extends A {}
+
+class Base {
+ B get _privateGetter => new B();
+ void set _privateSetter(A a) {}
+}
+
+abstract class Interface1 {
+ A get getter;
+ void set setter(C c);
+}
+
+abstract class Interface2 {
+ A get _privateGetter;
+ void set _privateSetter(C c);
+}
+
+testInterface2(Interface2 c) {
+ try {
+ c._privateGetter;
+ throw 'Expected NoSuchMethodError';
+ } on NoSuchMethodError (e) {
+ print(e);
+ }
+ try {
+ c._privateSetter = new C();
+ throw 'Expected NoSuchMethodError';
+ } on NoSuchMethodError (e) {
+ print(e);
+ }
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib2.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib2.dart
new file mode 100644
index 0000000..01e1432
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_in_lib2.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2021, 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.
+
+import 'opt_in_lib1.dart';
+
+class Mixin2 implements Interface2 {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_out_lib.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_out_lib.dart
new file mode 100644
index 0000000..60c244a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/opt_out_lib.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.9
+
+import 'opt_in_lib1.dart';
+
+abstract class Mixin1 implements Interface1 {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/test.options b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/test.options
new file mode 100644
index 0000000..f1e6396
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/test.options
@@ -0,0 +1,3 @@
+opt_in_lib1.dart
+opt_in_lib2.dart
+opt_out_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
index a878892..f2d5fcc 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
@@ -9,32 +9,22 @@
const synthetic constructor •() → self::_C&Object&A*
: super core::Object::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> baz2::A::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> baz2::A::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> baz2::A::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> baz2::A::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> baz2::A::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> baz2::A::==
- abstract mixin-stub get hashCode() → core::int*; -> baz2::A::hashCode
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
mixin-super-stub method toString({core::String* s = #C1}) → core::String*
return super.{baz2::A::toString}(s: s);
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> baz2::A::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> baz2::A::runtimeType
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class _C&Object&A&B = self::_C&Object&A with baz2::B /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> baz2::B::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> baz2::B::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> baz2::B::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> baz2::B::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> baz2::B::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> baz2::B::==
- abstract mixin-stub get hashCode() → core::int*; -> baz2::B::hashCode
- abstract mixin-stub method toString() → core::String*; -> baz2::B::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> baz2::B::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> baz2::B::runtimeType
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
index 44da6f8..363ce97 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
@@ -9,8 +9,6 @@
const synthetic constructor •() → self::_C&Object&A*
: super core::Object::•()
;
- method /* from org-dartlang-testcase:///issue40512_lib.dart */ toString({core::String* s = #C1}) → core::String*
- return s;
abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -18,6 +16,8 @@
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
abstract member-signature operator /* from org-dartlang-testcase:///issue40512_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+ method /* from org-dartlang-testcase:///issue40512_lib.dart */ toString({core::String* s = #C1}) → core::String*
+ return s;
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
}
@@ -25,7 +25,6 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::toString
abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -33,6 +32,7 @@
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
abstract member-signature operator /* from org-dartlang-testcase:///issue40512_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ toString() → core::String*; -> core::Object::toString
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
}
@@ -40,7 +40,6 @@
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::toString
}
static method main() → void {
core::print(new baz2::B::•());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart
new file mode 100644
index 0000000..3b3ec1f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2020, 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.
+
+// @dart = 2.6
+import 'issue40512_lib.dart';
+
+class C extends Object with A, B {}
+
+void main() {
+ print(B());
+ print(C());
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.textual_outline.expect
new file mode 100644
index 0000000..6d60882
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+// @dart = 2.6
+import 'issue40512_lib.dart';
+
+class C extends Object with A, B {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6d60882
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+// @dart = 2.6
+import 'issue40512_lib.dart';
+
+class C extends Object with A, B {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.expect
new file mode 100644
index 0000000..5ce29b0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue40512_lib.dart" as baz2;
+
+import "org-dartlang-testcase:///issue40512_lib.dart";
+
+abstract class _C&Object&A = core::Object with baz2::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method toString({core::String* s = #C1}) → core::String*
+ return super.{baz2::A::toString}(s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with baz2::B /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A&B*
+ : super self::_C&Object&A::•()
+ ;
+}
+class C extends self::_C&Object&A&B {
+ synthetic constructor •() → self::C*
+ : super self::_C&Object&A&B::•()
+ ;
+}
+static method main() → void {
+ core::print(new baz2::B::•());
+ core::print(new self::C::•());
+}
+
+library baz2;
+import self as baz2;
+import "dart:core" as core;
+
+abstract class A extends core::Object /*isMixinDeclaration*/ {
+ method toString({core::String* s = #C1}) → core::String*
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+ synthetic constructor •() → baz2::B*
+ : super core::Object::•()
+ ;
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants {
+ #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.transformed.expect
new file mode 100644
index 0000000..29324d1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.transformed.expect
@@ -0,0 +1,84 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue40512_lib.dart" as baz2;
+
+import "org-dartlang-testcase:///issue40512_lib.dart";
+
+abstract class _C&Object&A extends core::Object implements baz2::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A*
+ : super core::Object::•()
+ ;
+ method /* from org-dartlang-testcase:///issue40512_lib.dart */ toString({core::String* s = #C1}) → core::String*
+ return s;
+ abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator /* from org-dartlang-testcase:///issue40512_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B extends self::_C&Object&A implements baz2::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A&B*
+ : super self::_C&Object&A::•()
+ ;
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ toString() → core::String*; -> core::Object::toString
+ abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator /* from org-dartlang-testcase:///issue40512_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::_C&Object&A&B {
+ synthetic constructor •() → self::C*
+ : super self::_C&Object&A&B::•()
+ ;
+}
+static method main() → void {
+ core::print(new baz2::B::•());
+ core::print(new self::C::•());
+}
+
+library baz2;
+import self as baz2;
+import "dart:core" as core;
+
+abstract class A extends core::Object /*isMixinDeclaration*/ {
+ method toString({core::String* s = #C1}) → core::String*
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+ synthetic constructor •() → baz2::B*
+ : super core::Object::•()
+ ;
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants {
+ #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
index 2ba727b..e644ba8 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
@@ -9,16 +9,16 @@
const synthetic constructor •() → self::_C&Object&A*
: super core::Object::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::A::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
mixin-super-stub method method({core::String* s = #C1}) → core::String*
return super.{iss::A::method}(s: s);
}
@@ -26,17 +26,6 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract mixin-stub get _identityHashCode() → core::int*; -> iss::B::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::B::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::B::==
- abstract mixin-stub get hashCode() → core::int*; -> iss::B::hashCode
- abstract mixin-stub method toString() → core::String*; -> iss::B::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::B::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> iss::B::runtimeType
- abstract mixin-stub method method() → core::String*; -> iss::B::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
@@ -44,7 +33,7 @@
;
}
static method main() → dynamic {
- core::print(new self::C::•().{self::_C&Object&A&B::method}());
+ core::print(new self::C::•().{self::_C&Object&A::method}());
}
library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
index bb7985d..a08b62f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
@@ -9,8 +9,6 @@
const synthetic constructor •() → self::_C&Object&A*
: super core::Object::•()
;
- method /* from org-dartlang-testcase:///issue41210_lib1.dart */ method({core::String* s = #C1}) → core::String*
- return s;
abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -21,12 +19,13 @@
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ toString() → core::String*; -> core::Object::toString
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+ method /* from org-dartlang-testcase:///issue41210_lib1.dart */ method({core::String* s = #C1}) → core::String*
+ return s;
}
abstract class _C&Object&A&B extends self::_C&Object&A implements iss::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract member-signature method method({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -37,15 +36,15 @@
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ toString() → core::String*; -> core::Object::toString
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ method() → core::String*; -> #lib1::Interface::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract member-signature method method({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
}
static method main() → dynamic {
- core::print(new self::C::•().{self::C::method}());
+ core::print(new self::C::•().{self::_C&Object&A::method}());
}
library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart
new file mode 100644
index 0000000..384a53c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2020, 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.
+
+// @dart=2.6
+
+import 'issue41210_lib1.dart';
+
+class C with A, B {} // ok
+
+main() {
+ print(C().method());
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.textual_outline.expect
new file mode 100644
index 0000000..8cdec02
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+// @dart = 2.6
+import 'issue41210_lib1.dart';
+
+class C with A, B {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8cdec02
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+// @dart = 2.6
+import 'issue41210_lib1.dart';
+
+class C with A, B {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.expect
new file mode 100644
index 0000000..5dfa45a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib1.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib1.dart";
+
+abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method({core::String* s = #C1}) → core::String*
+ return super.{iss::A::method}(s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A&B*
+ : super self::_C&Object&A::•()
+ ;
+}
+class C extends self::_C&Object&A&B {
+ synthetic constructor •() → self::C*
+ : super self::_C&Object&A&B::•()
+ ;
+}
+static method main() → dynamic {
+ core::print(new self::C::•().{self::_C&Object&A::method}());
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+import "issue41210_lib2.dart" as iss2;
+
+import "org-dartlang-testcase:///issue41210_lib2.dart";
+
+abstract class A extends core::Object implements iss2::Interface /*isMixinDeclaration*/ {
+ method method({core::String* s = #C1}) → core::String*
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements iss2::Interface {
+ synthetic constructor •() → iss::B*
+ : super core::Object::•()
+ ;
+ abstract member-signature method method() → core::String*; -> iss2::Interface::method
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
+
+library /*isNonNullableByDefault*/;
+import self as iss2;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+ synthetic constructor •() → iss2::Interface
+ : super core::Object::•()
+ ;
+ abstract method method() → core::String;
+}
+
+constants {
+ #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.transformed.expect
new file mode 100644
index 0000000..a058bfa
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.transformed.expect
@@ -0,0 +1,102 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib1.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib1.dart";
+
+abstract class _C&Object&A extends core::Object implements iss::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A*
+ : super core::Object::•()
+ ;
+ method /* from org-dartlang-testcase:///issue41210_lib1.dart */ method({core::String* s = #C1}) → core::String*
+ return s;
+ abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator /* from org-dartlang-testcase:///issue41210_lib1.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ toString() → core::String*; -> core::Object::toString
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B extends self::_C&Object&A implements iss::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C&Object&A&B*
+ : super self::_C&Object&A::•()
+ ;
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ method() → core::String*; -> #lib1::Interface::method
+ abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator /* from org-dartlang-testcase:///issue41210_lib1.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ toString() → core::String*; -> core::Object::toString
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::_C&Object&A&B {
+ synthetic constructor •() → self::C*
+ : super self::_C&Object&A&B::•()
+ ;
+}
+static method main() → dynamic {
+ core::print(new self::C::•().{self::_C&Object&A::method}());
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+import "issue41210_lib2.dart" as iss2;
+
+import "org-dartlang-testcase:///issue41210_lib2.dart";
+
+abstract class A extends core::Object implements iss2::Interface /*isMixinDeclaration*/ {
+ method method({core::String* s = #C1}) → core::String*
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements iss2::Interface {
+ synthetic constructor •() → iss::B*
+ : super core::Object::•()
+ ;
+ abstract member-signature method method() → core::String*; -> iss2::Interface::method
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
+
+library /*isNonNullableByDefault*/;
+import self as iss2;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+ synthetic constructor •() → iss2::Interface
+ : super core::Object::•()
+ ;
+ abstract method method() → core::String;
+}
+
+constants {
+ #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.expect
index cf0c156..255626c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.expect
@@ -14,17 +14,17 @@
synthetic constructor •() → self::_TestSchedulerBinding&BindingBase&SchedulerBinding*
: super fou::BindingBase::•()
;
- abstract mixin-stub method registerSignalServiceExtension({core::String* name = #C1, () →* asy::Future<Null>* callback = #C1}) → void; -> sch::SchedulerBinding::registerSignalServiceExtension
- abstract mixin-stub get _identityHashCode() → core::int*; -> sch::SchedulerBinding::_identityHashCode
- abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> sch::SchedulerBinding::_instanceOf
- abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> sch::SchedulerBinding::_simpleInstanceOf
- abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> sch::SchedulerBinding::_simpleInstanceOfTrue
- abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> sch::SchedulerBinding::_simpleInstanceOfFalse
- abstract mixin-stub operator ==(dynamic other) → core::bool*; -> sch::SchedulerBinding::==
- abstract mixin-stub get hashCode() → core::int*; -> sch::SchedulerBinding::hashCode
- abstract mixin-stub method toString() → core::String*; -> sch::SchedulerBinding::toString
- abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> sch::SchedulerBinding::noSuchMethod
- abstract mixin-stub get runtimeType() → core::Type*; -> sch::SchedulerBinding::runtimeType
+ abstract member-signature method registerSignalServiceExtension({core::String* name = #C1, () →* asy::Future<Null>* callback = #C1}) → void; -> fou::BindingBase::registerSignalServiceExtension
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class _TestSchedulerBinding&BindingBase&SchedulerBinding&ServicesBinding = self::_TestSchedulerBinding&BindingBase&SchedulerBinding with ser::ServicesBinding /*isAnonymousMixin*/ {
synthetic constructor •() → self::_TestSchedulerBinding&BindingBase&SchedulerBinding&ServicesBinding*
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
index 11f8668..b315eec 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
@@ -26,8 +26,8 @@
const synthetic constructor •() → self::_E1&Object&A&D*
: super self::_E1&Object&A::•()
;
- forwarding-stub method method(covariant core::num* i) → core::String*
- return super.{self::_E1&Object&A::method}(i);
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E1&Object&A::method}(i, s: s);
}
class E1 extends self::_E1&Object&A&D {
synthetic constructor •() → self::E1*
@@ -55,8 +55,8 @@
const synthetic constructor •() → self::E2*
: super self::_E2&Object&A::•()
;
- forwarding-stub method method(covariant core::num* i) → core::String*
- return super.{self::_E2&Object&A::method}(i);
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E2&Object&A::method}(i, s: s);
}
abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E3&Object&A*
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
index 7b32bba..f366369 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
@@ -26,8 +26,8 @@
const synthetic constructor •() → self::_E1&Object&A&D*
: super self::_E1&Object&A::•()
;
- forwarding-stub method method(covariant core::num* i) → core::String*
- return super.{self::_E1&Object&A::method}(i);
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E1&Object&A::method}(i, s: s);
}
class E1 extends self::_E1&Object&A&D {
synthetic constructor •() → self::E1*
@@ -55,8 +55,8 @@
const synthetic constructor •() → self::E2*
: super self::_E2&Object&A::•()
;
- forwarding-stub method method(covariant core::num* i) → core::String*
- return super.{self::_E2&Object&A::method}(i);
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E2&Object&A::method}(i, s: s);
}
abstract class _E3&Object&A extends core::Object implements mai::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E3&Object&A*
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart
new file mode 100644
index 0000000..4ac860d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2020, 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.
+
+// @dart=2.9
+
+import 'main_lib.dart';
+
+class E1 with A, D {}
+
+class E2 = Object with A, D;
+
+class E3 = Object with A, F;
+
+abstract class C6 extends C3 implements C4 {}
+
+abstract class C8 extends C5 implements C7 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.textual_outline.expect
new file mode 100644
index 0000000..212f813
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+// @dart = 2.9
+import 'main_lib.dart';
+
+class E1 with A, D {}
+
+class E2 = Object with A, D;
+class E3 = Object with A, F;
+
+abstract class C6 extends C3 implements C4 {}
+
+abstract class C8 extends C5 implements C7 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ea6829e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+// @dart = 2.9
+import 'main_lib.dart';
+
+abstract class C6 extends C3 implements C4 {}
+
+abstract class C8 extends C5 implements C7 {}
+
+class E1 with A, D {}
+
+class E2 = Object with A, D;
+class E3 = Object with A, F;
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.expect
new file mode 100644
index 0000000..f9f739d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.expect
@@ -0,0 +1,188 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _E1&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E1&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{mai::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E1&Object&A&D = self::_E1&Object&A with mai::D /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E1&Object&A&D*
+ : super self::_E1&Object&A::•()
+ ;
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E1&Object&A::method}(i, s: s);
+}
+class E1 extends self::_E1&Object&A&D {
+ synthetic constructor •() → self::E1*
+ : super self::_E1&Object&A&D::•()
+ ;
+}
+abstract class _E2&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E2&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{mai::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E2 = self::_E2&Object&A with mai::D /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::E2*
+ : super self::_E2&Object&A::•()
+ ;
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E2&Object&A::method}(i, s: s);
+}
+abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E3&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{mai::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E3 = self::_E3&Object&A with mai::F /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::E3*
+ : super self::_E3&Object&A::•()
+ ;
+}
+abstract class C6 extends mai::C3 implements mai::C4 {
+ synthetic constructor •() → self::C6*
+ : super mai::C3::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method method2([covariant core::String* a]) → dynamic;
+}
+abstract class C8 extends mai::C5 implements mai::C7 {
+ synthetic constructor •() → self::C8*
+ : super mai::C5::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+ synthetic constructor •() → mai::Interface
+ : super core::Object::•()
+ ;
+ abstract method method(core::num i) → core::String;
+}
+abstract class Interface2 extends core::Object {
+ synthetic constructor •() → mai::Interface2
+ : super core::Object::•()
+ ;
+ abstract method method(covariant core::int i) → core::String;
+}
+abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/ {
+ method method(core::num i, {core::String s = #C1}) → core::String
+ return s;
+}
+abstract class D extends core::Object implements mai::Interface, mai::Interface2 {
+ synthetic constructor •() → mai::D
+ : super core::Object::•()
+ ;
+ abstract forwarding-stub method method(covariant core::num i) → core::String;
+}
+abstract class F extends core::Object implements mai::Interface {
+ synthetic constructor •() → mai::F
+ : super core::Object::•()
+ ;
+}
+abstract class C1 extends core::Object {
+ synthetic constructor •() → mai::C1
+ : super core::Object::•()
+ ;
+ abstract method method2() → dynamic;
+}
+abstract class C2 extends core::Object {
+ synthetic constructor •() → mai::C2
+ : super core::Object::•()
+ ;
+ abstract method method2([core::String a = #C2]) → dynamic;
+}
+abstract class C3 extends core::Object implements mai::C1, mai::C2 {
+ synthetic constructor •() → mai::C3
+ : super core::Object::•()
+ ;
+ abstract member-signature method method2([core::String a = #C2]) → dynamic; -> mai::C2::method2
+}
+abstract class C4 extends core::Object {
+ synthetic constructor •() → mai::C4
+ : super core::Object::•()
+ ;
+ abstract method method2([covariant core::String a = #C2]) → dynamic;
+}
+abstract class C5 extends mai::C3 implements mai::C4 {
+ synthetic constructor •() → mai::C5
+ : super mai::C3::•()
+ ;
+ abstract forwarding-stub method method2([covariant core::String a = #C2]) → dynamic;
+}
+abstract class C7 extends core::Object {
+ synthetic constructor •() → mai::C7
+ : super core::Object::•()
+ ;
+ abstract method method2([core::String a = #C2, core::num b = #C2]) → dynamic;
+}
+
+constants {
+ #C1 = "hello"
+ #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.transformed.expect
new file mode 100644
index 0000000..2645eb5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.transformed.expect
@@ -0,0 +1,188 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _E1&Object&A extends core::Object implements mai::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E1&Object&A*
+ : super core::Object::•()
+ ;
+ method /*isNonNullableByDefault, from org-dartlang-testcase:///main_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E1&Object&A&D extends self::_E1&Object&A implements mai::D /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E1&Object&A&D*
+ : super self::_E1&Object&A::•()
+ ;
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E1&Object&A::method}(i, s: s);
+}
+class E1 extends self::_E1&Object&A&D {
+ synthetic constructor •() → self::E1*
+ : super self::_E1&Object&A&D::•()
+ ;
+}
+abstract class _E2&Object&A extends core::Object implements mai::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E2&Object&A*
+ : super core::Object::•()
+ ;
+ method /*isNonNullableByDefault, from org-dartlang-testcase:///main_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E2 extends self::_E2&Object&A implements mai::D /*isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::E2*
+ : super self::_E2&Object&A::•()
+ ;
+ forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::_E2&Object&A::method}(i, s: s);
+}
+abstract class _E3&Object&A extends core::Object implements mai::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E3&Object&A*
+ : super core::Object::•()
+ ;
+ method /*isNonNullableByDefault, from org-dartlang-testcase:///main_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E3 extends self::_E3&Object&A implements mai::F /*isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::E3*
+ : super self::_E3&Object&A::•()
+ ;
+}
+abstract class C6 extends mai::C3 implements mai::C4 {
+ synthetic constructor •() → self::C6*
+ : super mai::C3::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method method2([covariant core::String* a]) → dynamic;
+}
+abstract class C8 extends mai::C5 implements mai::C7 {
+ synthetic constructor •() → self::C8*
+ : super mai::C5::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+ synthetic constructor •() → mai::Interface
+ : super core::Object::•()
+ ;
+ abstract method method(core::num i) → core::String;
+}
+abstract class Interface2 extends core::Object {
+ synthetic constructor •() → mai::Interface2
+ : super core::Object::•()
+ ;
+ abstract method method(covariant core::int i) → core::String;
+}
+abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/ {
+ method method(core::num i, {core::String s = #C1}) → core::String
+ return s;
+}
+abstract class D extends core::Object implements mai::Interface, mai::Interface2 {
+ synthetic constructor •() → mai::D
+ : super core::Object::•()
+ ;
+ abstract forwarding-stub method method(covariant core::num i) → core::String;
+}
+abstract class F extends core::Object implements mai::Interface {
+ synthetic constructor •() → mai::F
+ : super core::Object::•()
+ ;
+}
+abstract class C1 extends core::Object {
+ synthetic constructor •() → mai::C1
+ : super core::Object::•()
+ ;
+ abstract method method2() → dynamic;
+}
+abstract class C2 extends core::Object {
+ synthetic constructor •() → mai::C2
+ : super core::Object::•()
+ ;
+ abstract method method2([core::String a = #C2]) → dynamic;
+}
+abstract class C3 extends core::Object implements mai::C1, mai::C2 {
+ synthetic constructor •() → mai::C3
+ : super core::Object::•()
+ ;
+ abstract member-signature method method2([core::String a = #C2]) → dynamic; -> mai::C2::method2
+}
+abstract class C4 extends core::Object {
+ synthetic constructor •() → mai::C4
+ : super core::Object::•()
+ ;
+ abstract method method2([covariant core::String a = #C2]) → dynamic;
+}
+abstract class C5 extends mai::C3 implements mai::C4 {
+ synthetic constructor •() → mai::C5
+ : super mai::C3::•()
+ ;
+ abstract forwarding-stub method method2([covariant core::String a = #C2]) → dynamic;
+}
+abstract class C7 extends core::Object {
+ synthetic constructor •() → mai::C7
+ : super core::Object::•()
+ ;
+ abstract method method2([core::String a = #C2, core::num b = #C2]) → dynamic;
+}
+
+constants {
+ #C1 = "hello"
+ #C2 = null
+}
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index add20b0..7221323 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -21,6 +21,7 @@
general/invalid_operator_override: TypeCheckError
general/issue41210a: TypeCheckError
general/issue41210b/issue41210: TypeCheckError
+general/issue41210b/issue41210.no_link: TypeCheckError
general/mixin_application_override: TypeCheckError
general/override_check_accessor_after_inference: TypeCheckError
general/override_check_accessor_basic: TypeCheckError
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 10f576d..4b102ab 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -76,6 +76,7 @@
general/issue38961: RuntimeError # no main and compile time errors.
general/issue41210a: TypeCheckError
general/issue41210b/issue41210: TypeCheckError
+general/issue41210b/issue41210.no_link: TypeCheckError
general/micro: RuntimeError
general/mixin_application_override: ExpectationFileMismatch # Too many errors.
general/mixin_application_override: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index ca60b99..c22bd35 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -76,6 +76,7 @@
general/issue38961: RuntimeError
general/issue41210a: TypeCheckError
general/issue41210b/issue41210: TypeCheckError
+general/issue41210b/issue41210.no_link: TypeCheckError
general/micro: RuntimeError
general/mixin_application_override: TypeCheckError
general/mixin_constructors_with_default_values: RuntimeError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 6efa9d9..fe180bd 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -78,8 +78,6 @@
nnbd_mixed/hierarchy/mix_in_override: TypeCheckError
nnbd_mixed/hierarchy/override: TypeCheckError
nnbd_mixed/inheritance_from_opt_in: TypeCheckError
-nnbd_mixed/issue40512/issue40512: TypeCheckError
-nnbd_mixed/issue41210a/issue41210: TypeCheckError
nnbd_mixed/issue41567: TypeCheckError
nnbd_mixed/messages_with_types_opt_in: TypeCheckError
nnbd_mixed/messages_with_types_opt_out: TypeCheckError
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index 26ef345..8839438 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -1216,8 +1216,7 @@
mixedInClassNode, mixedInInfo,
setters: setters)) {
if (mixinMember is! Procedure ||
- (mixinMember is Procedure &&
- !mixinMember.isNoSuchMethodForwarder)) {
+ (mixinMember is Procedure && !mixinMember.isSynthetic)) {
memberMap[mixinMember.name] = mixinMember;
}
}
diff --git a/pkg/testing/lib/src/error_handling.dart b/pkg/testing/lib/src/error_handling.dart
index bf13cb0..452e4b7 100644
--- a/pkg/testing/lib/src/error_handling.dart
+++ b/pkg/testing/lib/src/error_handling.dart
@@ -10,7 +10,9 @@
import 'dart:isolate' show ReceivePort;
-Future<T> withErrorHandling<T>(Future<T> f()) async {
+import 'log.dart';
+
+Future<T> withErrorHandling<T>(Future<T> f(), {Logger logger}) async {
final ReceivePort port = new ReceivePort();
try {
return await f();
@@ -20,6 +22,7 @@
if (trace != null) {
stderr.writeln(trace);
}
+ logger?.noticeFrameworkCatchError(e, trace);
return null;
} finally {
port.close();
diff --git a/pkg/testing/lib/src/log.dart b/pkg/testing/lib/src/log.dart
index e916ba9..7e6fafd 100644
--- a/pkg/testing/lib/src/log.dart
+++ b/pkg/testing/lib/src/log.dart
@@ -68,6 +68,11 @@
void logSuiteComplete(Suite suite);
void logUncaughtError(error, StackTrace stackTrace);
+
+ /// Issued when there's been a crash caught by the framework.
+ /// Notice that the exit-code has already been set and that the error has
+ /// been printed to stderr.
+ void noticeFrameworkCatchError(error, StackTrace stackTrace);
}
class StdoutLogger implements Logger {
@@ -185,6 +190,8 @@
logMessage(stackTrace);
}
}
+
+ void noticeFrameworkCatchError(error, StackTrace stackTrace) {}
}
String pad(Object o, int pad, {String filler: " "}) {
diff --git a/pkg/testing/lib/src/run.dart b/pkg/testing/lib/src/run.dart
index 1930c45..7ce9bd0 100644
--- a/pkg/testing/lib/src/run.dart
+++ b/pkg/testing/lib/src/run.dart
@@ -67,7 +67,7 @@
shards: shards, shard: shard, logger: logger);
}
}
- });
+ }, logger: logger);
}
/// This is called from a `_test.dart` file, and helps integration in other
diff --git a/tools/VERSION b/tools/VERSION
index f6cc11d..6fdb2fb 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 12
PATCH 0
-PRERELEASE 271
+PRERELEASE 272
PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 12f746b..29f0ba2 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -964,7 +964,7 @@
"co19_2"
],
"fileset": "front-end",
- "shards": 10
+ "shards": 2
},
{
"name": "sdk tests",
@@ -972,22 +972,44 @@
"-ncfe-${system}"
],
"fileset": "front-end",
- "shards": 5
+ "shards": 2
},
{
- "name": "unit tests",
+ "name": "unit tests (no git)",
"arguments": [
"-ncfe-unittest-asserts-${mode}-${system}",
- "pkg/pkg/(kernel|front_end|fasta)/"
- ]
+ "pkg/pkg/(kernel|front_end|fasta)\/(*?)(?<!_git)_test"
+ ],
+ "fileset": "front-end",
+ "shards": 3
},
{
- "name": "unit tests suites",
+ "name": "unit tests suites (no git)",
"script": "out/ReleaseX64/dart-sdk/bin/dart",
"testRunner": true,
"arguments": [
"pkg/front_end/test/unit_test_suites.dart",
- "-ncfe-unittest-asserts-${mode}-${system}"
+ "-ncfe-unittest-asserts-${mode}-${system}",
+ "--skipTestsThatRequireGit"
+ ],
+ "fileset": "front-end",
+ "shards": 3
+ },
+ {
+ "name": "unit tests (with git)",
+ "arguments": [
+ "-ncfe-unittest-asserts-${mode}-${system}",
+ "pkg/pkg/(kernel|front_end|fasta)\/(*?)(_git)_test"
+ ]
+ },
+ {
+ "name": "unit tests suites (with git)",
+ "script": "out/ReleaseX64/dart-sdk/bin/dart",
+ "testRunner": true,
+ "arguments": [
+ "pkg/front_end/test/unit_test_suites.dart",
+ "-ncfe-unittest-asserts-${mode}-${system}",
+ "--onlyTestsThatRequireGit"
]
}
]