Version 2.12.0-36.0.dev
Merge commit '4b3840d01ddfed57374b872927a03921077614b0' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 139cd68..548f1a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -98,6 +98,9 @@
```
See [#44072][].
+
+ For legacy dependencies without an sdk constraint pub will now assume a
+ default language version of 2.7.
* The top level `pub` executable has been deprecated. Use `dart pub` instead.
See [dart tool][].
* New command `dart pub add` that adds new dependencies to your `pubspec.yaml`.
diff --git a/DEPS b/DEPS
index bb39333..73717bf 100644
--- a/DEPS
+++ b/DEPS
@@ -132,7 +132,7 @@
"ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
"pool_rev": "eedbd5fde84f9a1a8da643b475305a81841da599",
"protobuf_rev": "3746c8fd3f2b0147623a8e3db89c3ff4330de760",
- "pub_rev": "b10966c6a8ad7d95c2023b7842fa2697001d2fdf",
+ "pub_rev": "c00d4b4abf5b4ff265a7ce6282b748551f1b5b1f",
"pub_semver_tag": "v1.4.4",
"resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
"root_certificates_rev": "7e5ec82c99677a2e5b95ce296c4d68b0d3378ed8",
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 6bce0eb..e40a4fc 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -8714,13 +8714,12 @@
_names)> templateStrongModeNNBDPackageOptOut = const Template<
Message Function(List<String> _names)>(
messageTemplate:
- r"""This project cannot run with sound null safety, because one or more project dependencies do not
-support null safety:
+ r"""Cannot run with sound null safety, because the following dependencies
+don't support null safety:
#names
-Run 'pub outdated --mode=null-safety' to determine if versions of your
-dependencies supporting null safety are available.""",
+For solutions, see https://dart.dev/go/unsound-null-safety""",
withArguments: _withArgumentsStrongModeNNBDPackageOptOut);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8737,13 +8736,12 @@
String names = itemizeNames(_names);
return new Message(codeStrongModeNNBDPackageOptOut,
message:
- """This project cannot run with sound null safety, because one or more project dependencies do not
-support null safety:
+ """Cannot run with sound null safety, because the following dependencies
+don't support null safety:
${names}
-Run 'pub outdated --mode=null-safety' to determine if versions of your
-dependencies supporting null safety are available.""",
+For solutions, see https://dart.dev/go/unsound-null-safety""",
arguments: {'names': _names});
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 4cd7a7e..56a9123 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -749,7 +749,15 @@
Class cls = classBuilder.cls;
Constructor constructor = memberBuilder.member;
- bool isConst = constructor.isConst && mixin.fields.isEmpty;
+ bool isConst = constructor.isConst;
+ if (isConst && mixin.fields.isNotEmpty) {
+ for (Field field in mixin.fields) {
+ if (!field.isStatic) {
+ isConst = false;
+ break;
+ }
+ }
+ }
List<VariableDeclaration> positionalParameters = <VariableDeclaration>[];
List<VariableDeclaration> namedParameters = <VariableDeclaration>[];
List<Expression> positional = <Expression>[];
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 4e6e901..ae4a9e7 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1325,13 +1325,12 @@
StrongModeNNBDPackageOptOut:
template: |
- This project cannot run with sound null safety, because one or more project dependencies do not
- support null safety:
+ Cannot run with sound null safety, because the following dependencies
+ don't support null safety:
#names
- Run 'pub outdated --mode=null-safety' to determine if versions of your
- dependencies supporting null safety are available.
+ For solutions, see https://dart.dev/go/unsound-null-safety
WeakWithStrongDillLibrary:
template: "Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety."
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 324b76d..debea18 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -19,6 +19,7 @@
constructor(s)
count.#count
d
+dart.dev
dart2js_server
dart:ffi
dart_runner
@@ -30,6 +31,7 @@
flutter_runner
futureor
h
+https
interop
libraries.json
list.filled
@@ -51,6 +53,7 @@
pubspec.yaml
re
sdksummary
+solutions
stacktrace
stringokempty
struct<#name
diff --git a/pkg/front_end/testcases/general/issue40982.dart b/pkg/front_end/testcases/general/issue40982.dart
new file mode 100644
index 0000000..ed06fc3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40982.dart
@@ -0,0 +1,37 @@
+// 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.
+
+class A {
+ const A();
+}
+
+mixin B {
+ static const int value = 1;
+}
+
+class C1 extends A with B {
+ const C1();
+}
+
+class C2 = A with B;
+
+class C3 extends C2 {
+ const C3();
+}
+
+mixin D {
+ int value = 1;
+}
+
+class E1 extends A with D {
+ const E1();
+}
+
+class E2 = A with D;
+
+class E3 extends E2 {
+ const E3();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue40982.dart.outline.expect b/pkg/front_end/testcases/general/issue40982.dart.outline.expect
new file mode 100644
index 0000000..642ab52
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40982.dart.outline.expect
@@ -0,0 +1,98 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue40982.dart:28:9: Error: A constant constructor can't call a non-constant super constructor.
+// const E1();
+// ^
+//
+// pkg/front_end/testcases/general/issue40982.dart:34:9: Error: A constant constructor can't call a non-constant super constructor.
+// const E3();
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/ {
+ const constructor •() → self::A*
+ : 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 class B extends core::Object /*isMixinDeclaration*/ {
+ static const field core::int* value = 1;
+ 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 _C1&A&B = self::A with self::B /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C1&A&B*
+ : super self::A::•()
+ ;
+}
+class C1 extends self::_C1&A&B /*hasConstConstructor*/ {
+ const constructor •() → self::C1*
+ : super self::_C1&A&B::•()
+ ;
+}
+class C2 = self::A with self::B /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::C2*
+ : super self::A::•()
+ ;
+}
+class C3 extends self::C2 /*hasConstConstructor*/ {
+ const constructor •() → self::C3*
+ : super self::C2::•()
+ ;
+}
+abstract class D extends core::Object /*isMixinDeclaration*/ {
+ field core::int* value;
+ 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&A&D = self::A with self::D /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_E1&A&D*
+ : super self::A::•()
+ ;
+}
+class E1 extends self::_E1&A&D /*hasConstConstructor*/ {
+ const constructor •() → self::E1*
+ : super self::_E1&A&D::•()
+ ;
+}
+class E2 = self::A with self::D {
+ synthetic constructor •() → self::E2*
+ : super self::A::•()
+ ;
+}
+class E3 extends self::E2 /*hasConstConstructor*/ {
+ const constructor •() → self::E3*
+ : super self::E2::•()
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/issue40982.dart.strong.expect b/pkg/front_end/testcases/general/issue40982.dart.strong.expect
new file mode 100644
index 0000000..d5bdf49
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40982.dart.strong.expect
@@ -0,0 +1,101 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue40982.dart:28:9: Error: A constant constructor can't call a non-constant super constructor.
+// const E1();
+// ^
+//
+// pkg/front_end/testcases/general/issue40982.dart:34:9: Error: A constant constructor can't call a non-constant super constructor.
+// const E3();
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/ {
+ const constructor •() → self::A*
+ : 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 class B extends core::Object /*isMixinDeclaration*/ {
+ static const field core::int* value = #C1;
+ 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 _C1&A&B = self::A with self::B /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C1&A&B*
+ : super self::A::•()
+ ;
+}
+class C1 extends self::_C1&A&B /*hasConstConstructor*/ {
+ const constructor •() → self::C1*
+ : super self::_C1&A&B::•()
+ ;
+}
+class C2 = self::A with self::B /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::C2*
+ : super self::A::•()
+ ;
+}
+class C3 extends self::C2 /*hasConstConstructor*/ {
+ const constructor •() → self::C3*
+ : super self::C2::•()
+ ;
+}
+abstract class D extends core::Object /*isMixinDeclaration*/ {
+ field core::int* value = 1;
+ 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&A&D = self::A with self::D /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_E1&A&D*
+ : super self::A::•()
+ ;
+}
+class E1 extends self::_E1&A&D /*hasConstConstructor*/ {
+ const constructor •() → self::E1*
+ : super self::_E1&A&D::•()
+ ;
+}
+class E2 = self::A with self::D {
+ synthetic constructor •() → self::E2*
+ : super self::A::•()
+ ;
+}
+class E3 extends self::E2 /*hasConstConstructor*/ {
+ const constructor •() → self::E3*
+ : super self::E2::•()
+ ;
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+}
diff --git a/pkg/front_end/testcases/general/issue40982.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue40982.dart.strong.transformed.expect
new file mode 100644
index 0000000..a903a15
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40982.dart.strong.transformed.expect
@@ -0,0 +1,145 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue40982.dart:28:9: Error: A constant constructor can't call a non-constant super constructor.
+// const E1();
+// ^
+//
+// pkg/front_end/testcases/general/issue40982.dart:34:9: Error: A constant constructor can't call a non-constant super constructor.
+// const E3();
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/ {
+ const constructor •() → self::A*
+ : 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 class B extends core::Object /*isMixinDeclaration*/ {
+ static const field core::int* value = #C1;
+ 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 _C1&A&B extends self::A implements self::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ static const field core::int* value = #C1;
+ const synthetic constructor •() → self::_C1&A&B*
+ : super self::A::•()
+ ;
+ 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 C1 extends self::_C1&A&B /*hasConstConstructor*/ {
+ const constructor •() → self::C1*
+ : super self::_C1&A&B::•()
+ ;
+}
+class C2 extends self::A implements self::B /*isEliminatedMixin,hasConstConstructor*/ {
+ static const field core::int* value = #C1;
+ const synthetic constructor •() → self::C2*
+ : super self::A::•()
+ ;
+ 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 C3 extends self::C2 /*hasConstConstructor*/ {
+ const constructor •() → self::C3*
+ : super self::C2::•()
+ ;
+}
+abstract class D extends core::Object /*isMixinDeclaration*/ {
+ field core::int* value = 1;
+ 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&A&D extends self::A implements self::D /*isAnonymousMixin,isEliminatedMixin*/ {
+ field core::int* value = 1;
+ synthetic constructor •() → self::_E1&A&D*
+ : super self::A::•()
+ ;
+ 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 E1 extends self::_E1&A&D /*hasConstConstructor*/ {
+ const constructor •() → self::E1*
+ : super self::_E1&A&D::•()
+ ;
+}
+class E2 extends self::A implements self::D /*isEliminatedMixin*/ {
+ field core::int* value = 1;
+ synthetic constructor •() → self::E2*
+ : super self::A::•()
+ ;
+ 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::E2 /*hasConstConstructor*/ {
+ const constructor •() → self::E3*
+ : super self::E2::•()
+ ;
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+}
diff --git a/pkg/front_end/testcases/general/issue40982.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue40982.dart.textual_outline.expect
new file mode 100644
index 0000000..d0c04bf
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40982.dart.textual_outline.expect
@@ -0,0 +1,33 @@
+class A {
+ const A();
+}
+
+mixin B {
+ static const int value = 1;
+}
+
+class C1 extends A with B {
+ const C1();
+}
+
+class C2 = A with B;
+
+class C3 extends C2 {
+ const C3();
+}
+
+mixin D {
+ int value = 1;
+}
+
+class E1 extends A with D {
+ const E1();
+}
+
+class E2 = A with D;
+
+class E3 extends E2 {
+ const E3();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue40982.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue40982.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..eeaccee
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40982.dart.textual_outline_modelled.expect
@@ -0,0 +1,31 @@
+class A {
+ const A();
+}
+
+class C1 extends A with B {
+ const C1();
+}
+
+class C2 = A with B;
+
+class C3 extends C2 {
+ const C3();
+}
+
+class E1 extends A with D {
+ const E1();
+}
+
+class E2 = A with D;
+
+class E3 extends E2 {
+ const E3();
+}
+
+main() {}
+mixin B {
+ static const int value = 1;
+}
+mixin D {
+ int value = 1;
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.1.expect
index cdbc8c9..c60e92f 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.1.expect
@@ -2,14 +2,13 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:foo
// - package:bar
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
library from "package:bar/bar.dart" as bar {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.2.expect
index d574728..8d45bc5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.2.expect
@@ -2,14 +2,13 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:foo
// - package:bar
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
library from "package:bar/bar.dart" as bar {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.3.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.3.expect
index caa2322..4c66e26 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.3.expect
@@ -2,13 +2,12 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:bar
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
library from "package:bar/bar.dart" as bar {
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
index a0f941d..6f3562f 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
@@ -1,14 +1,13 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:opt_in_package/opt_out_lib.dart
// - package:opt_out_package
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
// pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/opt_in_package/lib/opt_in_lib.dart: Error: Loaded library is compiled with unsound null safety and cannot be used in compilation for sound null safety.
//
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
index d72b9a7..5600de5 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
@@ -1,14 +1,13 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:opt_in_package/opt_out_lib.dart
// - package:opt_out_package
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
// pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/opt_in_package/lib/opt_in_lib.dart: Error: Loaded library is compiled with unsound null safety and cannot be used in compilation for sound null safety.
//
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
index d72b9a7..5600de5 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
@@ -1,14 +1,13 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:opt_in_package/opt_out_lib.dart
// - package:opt_out_package
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
// pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/opt_in_package/lib/opt_in_lib.dart: Error: Loaded library is compiled with unsound null safety and cannot be used in compilation for sound null safety.
//
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
index 59a5039..967b08d 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
@@ -8,13 +8,12 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:opt_out_package
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
library /*isNonNullableByDefault*/;
import self as self;
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
index d834f3b..874184d 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
@@ -8,13 +8,12 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:opt_out_package
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
library /*isNonNullableByDefault*/;
import self as self;
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
index 95f7dc1..fda0ef7 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
@@ -1,13 +1,12 @@
//
// Problems in component:
//
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
//
// - package:opt_out_package
//
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
//
library /*isNonNullableByDefault*/;
import self as self;
diff --git a/tools/VERSION b/tools/VERSION
index 5a2abd7..517c0f1 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 12
PATCH 0
-PRERELEASE 35
+PRERELEASE 36
PRERELEASE_PATCH 0
\ No newline at end of file