Version 2.18.0-185.0.dev
Merge commit '2acf0360232d481549b545f2de0a5a6237bacc42' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aef3ad5..cbd5912 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,23 @@
+## 2.19.0
+
+### Language
+
+- **Breaking Change** [#48167](https://github.com/dart-lang/sdk/issues/48167):
+ Mixin of classes that don't extend `Object` is no longer supported:
+ ```dart
+ class Base {}
+ class Mixin extends Base {}
+ class C extends Base with Mixin {}
+ ```
+ This should instead be written using a mixin declaration of `Mixin`:
+ ```dart
+ class Base {}
+ mixin Mixin on Base {}
+ class C extends Base with Mixin {}
+ ```
+ This feature has not been supported in most compilation targets for some
+ time but is now completely removed.
+
## 2.18.0
### Language
diff --git a/DEPS b/DEPS
index 1125cc8..f159d22 100644
--- a/DEPS
+++ b/DEPS
@@ -319,7 +319,7 @@
Var("dart_git") + "crypto.git" + "@" + Var("crypto_rev"),
Var("dart_root") + "/third_party/pkg/csslib":
Var("dart_git") + "csslib.git" + "@" + Var("csslib_rev"),
- Var("dart_root") + "/third_party/pkg_tested/dart_style":
+ Var("dart_root") + "/third_party/pkg/dart_style":
Var("dart_git") + "dart_style.git" + "@" + Var("dart_style_rev"),
Var("dart_root") + "/third_party/pkg/dartdoc":
Var("dart_git") + "dartdoc.git" + "@" + Var("dartdoc_rev"),
@@ -361,7 +361,7 @@
Var("dart_git") + "mockito.git" + "@" + Var("mockito_rev"),
Var("dart_root") + "/third_party/pkg/oauth2":
Var("dart_git") + "oauth2.git" + "@" + Var("oauth2_rev"),
- Var("dart_root") + "/third_party/pkg_tested/package_config":
+ Var("dart_root") + "/third_party/pkg/package_config":
Var("dart_git") + "package_config.git" +
"@" + Var("package_config_rev"),
Var("dart_root") + "/third_party/pkg/path":
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 a54317b..42e8fa8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -7841,6 +7841,31 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
+ String
+ name)> templateMixinInheritsFromNotObject = const Template<
+ Message Function(String name)>(
+ problemMessageTemplate:
+ r"""The class '#name' can't be used as a mixin because it extends a class other than 'Object'.""",
+ withArguments: _withArgumentsMixinInheritsFromNotObject);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeMixinInheritsFromNotObject =
+ const Code<Message Function(String name)>("MixinInheritsFromNotObject",
+ analyzerCodes: <String>["MIXIN_INHERITS_FROM_NOT_OBJECT"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMixinInheritsFromNotObject(String name) {
+ if (name.isEmpty) throw 'No name provided';
+ name = demangleMixinApplicationName(name);
+ return new Message(codeMixinInheritsFromNotObject,
+ problemMessage:
+ """The class '${name}' can't be used as a mixin because it extends a class other than 'Object'.""",
+ arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+ Message Function(
String string,
String
string2)> templateModifierOutOfOrder = const Template<
diff --git a/pkg/analysis_server/lib/src/analytics/analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
index 3448b7b..ab1a1486 100644
--- a/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
@@ -24,12 +24,19 @@
/// Record that the set of plugins known to the [pluginManager] has changed.
void changedPlugins(PluginManager pluginManager);
+ /// Record the number of [added] folders and [removed] folders.
+ void changedWorkspaceFolders(
+ {required List<String> added, required List<String> removed});
+
/// Record that the given [notification] was received and has been handled.
void handledNotificationMessage(
{required NotificationMessage notification,
required DateTime startTime,
required DateTime endTime}) {}
+ /// Record the number of [openWorkspacePaths].
+ void initialized({required List<String> openWorkspacePaths});
+
/// Record that the given [response] was sent to the client.
void sentResponse({required Response response});
diff --git a/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
index f294c37..092440d 100644
--- a/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
@@ -45,6 +45,15 @@
}
@override
+ void changedWorkspaceFolders(
+ {required List<String> added, required List<String> removed}) {
+ var requestData =
+ _getRequestData(Method.workspace_didChangeWorkspaceFolders.toString());
+ requestData.addValue('added', added.length);
+ requestData.addValue('removed', removed.length);
+ }
+
+ @override
void handledNotificationMessage(
{required NotificationMessage notification,
required DateTime startTime,
@@ -62,6 +71,12 @@
}
@override
+ void initialized({required List<String> openWorkspacePaths}) {
+ var requestData = _getRequestData(Method.initialized.toString());
+ requestData.addValue('openWorkspacePaths', openWorkspacePaths.length);
+ }
+
+ @override
void sentResponse({required Response response}) {
var sendTime = DateTime.now();
_recordResponseData(response.id, sendTime);
@@ -95,9 +110,7 @@
@override
void startedGetRefactoring(EditGetRefactoringParams params) {
- var requestData = _completedRequests.putIfAbsent(
- EDIT_REQUEST_GET_REFACTORING,
- () => _RequestData(EDIT_REQUEST_GET_REFACTORING));
+ var requestData = _getRequestData(EDIT_REQUEST_GET_REFACTORING);
requestData.addEnumValue(
EDIT_REQUEST_GET_REFACTORING_KIND, params.kind.name);
}
@@ -118,9 +131,7 @@
@override
void startedSetAnalysisRoots(AnalysisSetAnalysisRootsParams params) {
- var requestData = _completedRequests.putIfAbsent(
- ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS,
- () => _RequestData(ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS));
+ var requestData = _getRequestData(ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS);
requestData.addValue(
ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED, params.included.length);
requestData.addValue(
@@ -129,9 +140,7 @@
@override
void startedSetPriorityFiles(AnalysisSetPriorityFilesParams params) {
- var requestData = _completedRequests.putIfAbsent(
- ANALYSIS_REQUEST_SET_PRIORITY_FILES,
- () => _RequestData(ANALYSIS_REQUEST_SET_PRIORITY_FILES));
+ var requestData = _getRequestData(ANALYSIS_REQUEST_SET_PRIORITY_FILES);
requestData.addValue(
ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES, params.files.length);
}
@@ -151,6 +160,11 @@
sdkVersion: sdkVersion);
}
+ /// Return the request data for requests that have the given [method].
+ _RequestData _getRequestData(String method) {
+ return _completedRequests.putIfAbsent(method, () => _RequestData(method));
+ }
+
/// Record that the request with the given [id] was responded to at the given
/// [sendTime].
void _recordResponseData(String id, DateTime sendTime) {
@@ -163,8 +177,7 @@
var clientRequestTime = data.clientRequestTime;
var startTime = data.startTime.millisecondsSinceEpoch;
- var requestData =
- _completedRequests.putIfAbsent(method, () => _RequestData(method));
+ var requestData = _getRequestData(method);
if (clientRequestTime != null) {
var latencyTime = startTime - clientRequestTime;
diff --git a/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
index 3302a1e..bcf2759 100644
--- a/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
@@ -15,12 +15,19 @@
void changedPlugins(PluginManager pluginManager) {}
@override
+ void changedWorkspaceFolders(
+ {required List<String> added, required List<String> removed}) {}
+
+ @override
void handledNotificationMessage(
{required NotificationMessage notification,
required DateTime startTime,
required DateTime endTime}) {}
@override
+ void initialized({required List<String> openWorkspacePaths}) {}
+
+ @override
void sentResponse({required Response response}) {}
@override
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_change_workspace_folders.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_change_workspace_folders.dart
index 590e49d..d1dc6f9 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_change_workspace_folders.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_change_workspace_folders.dart
@@ -27,15 +27,20 @@
return success(null);
}
- final added =
- params.event.added.map((wf) => Uri.parse(wf.uri).toFilePath()).toList();
+ final added = _convertWorkspaceFolders(params.event.added);
+ final removed = _convertWorkspaceFolders(params.event.removed);
- final removed = params.event.removed
- .map((wf) => Uri.parse(wf.uri).toFilePath())
- .toList();
+ server.analyticsManager
+ .changedWorkspaceFolders(added: added, removed: removed);
await server.updateWorkspaceFolders(added, removed);
return success(null);
}
+
+ /// Return the result of converting the list of workspace [folders] to file
+ /// paths.
+ List<String> _convertWorkspaceFolders(List<WorkspaceFolder> folders) {
+ return folders.map((wf) => Uri.parse(wf.uri).toFilePath()).toList();
+ }
}
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
index e728d79..a0a34fa 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
@@ -26,6 +26,8 @@
server,
);
+ server.analyticsManager.initialized(openWorkspacePaths: openWorkspacePaths);
+
if (server.initializationOptions.onlyAnalyzeProjectsWithOpenFiles) {
await server.fetchClientConfigurationAndPerformDynamicRegistration();
} else {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
index d690c0b..a8d459b 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
@@ -27,6 +27,11 @@
void apply(DartFileEditBuilder builder, DataDrivenFix fix, _Data data) {
var referenceRange = data.referenceRange;
builder.addSimpleReplacement(referenceRange, _referenceTo(newElement));
+ var libraryUris = newElement.libraryUris;
+ if (libraryUris.isEmpty) return;
+ if (!libraryUris.any((uri) => builder.importsLibrary(uri))) {
+ builder.importLibraryElement(libraryUris.first);
+ }
}
@override
diff --git a/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart b/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
index ec74340..905c990 100644
--- a/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
+++ b/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
@@ -63,6 +63,35 @@
]);
}
+ void test_server_request_analysisDidChangeWorkspaceFolders() {
+ _defaultStartup();
+ var params = DidChangeWorkspaceFoldersParams(
+ event: WorkspaceFoldersChangeEvent(added: [], removed: []));
+ var request = RequestMessage(
+ jsonrpc: '',
+ id: Either2.t1(1),
+ method: Method.workspace_didChangeWorkspaceFolders,
+ params: params.toJson());
+ manager.startedRequestMessage(request: request, startTime: _now());
+ manager
+ .changedWorkspaceFolders(added: ['a', 'b', 'c'], removed: ['d', 'e']);
+ manager.sentResponseMessage(
+ response: ResponseMessage(jsonrpc: '', id: Either2.t1(1)));
+ manager.shutdown();
+ analytics.assertEvents([
+ _ExpectedEvent.session(),
+ _ExpectedEvent.request(parameters: {
+ 'latency': _IsPercentiles(),
+ 'method': Method.workspace_didChangeWorkspaceFolders.toString(),
+ 'duration': _IsPercentiles(),
+ 'added':
+ '{"count":1,"percentiles":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]}',
+ 'removed':
+ '{"count":1,"percentiles":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]}',
+ }),
+ ]);
+ }
+
void test_server_request_analysisSetAnalysisRoots() {
_defaultStartup();
var params = AnalysisSetAnalysisRootsParams(['a', 'b', 'c'], ['d', 'e']);
@@ -127,6 +156,31 @@
]);
}
+ void test_server_request_initialized() {
+ _defaultStartup();
+ var params = InitializedParams();
+ var request = RequestMessage(
+ jsonrpc: '',
+ id: Either2.t1(1),
+ method: Method.initialized,
+ params: params.toJson());
+ manager.startedRequestMessage(request: request, startTime: _now());
+ manager.initialized(openWorkspacePaths: ['a', 'b', 'c']);
+ manager.sentResponseMessage(
+ response: ResponseMessage(jsonrpc: '', id: Either2.t1(1)));
+ manager.shutdown();
+ analytics.assertEvents([
+ _ExpectedEvent.session(),
+ _ExpectedEvent.request(parameters: {
+ 'latency': _IsPercentiles(),
+ 'method': Method.initialized.toString(),
+ 'duration': _IsPercentiles(),
+ 'openWorkspacePaths':
+ '{"count":1,"percentiles":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]}',
+ }),
+ ]);
+ }
+
void test_server_request_noAdditional() {
_defaultStartup();
manager.startedRequest(
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/replaced_by_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/replaced_by_test.dart
index a7b70a4..b4643f2 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/replaced_by_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/replaced_by_test.dart
@@ -14,6 +14,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(ReplacedByTest);
+ defineReflectiveTests(ReplacedByUriSemanticsTest);
});
}
@@ -862,6 +863,83 @@
}
}
+@reflectiveTest
+class ReplacedByUriSemanticsTest extends DataDrivenFixProcessorTest {
+ Future<void> test_new_element_uris_multiple() async {
+ setPackageContent('');
+ newFile('$workspaceRootPath/p/lib/expect.dart', '''
+void expect(actual, expected) {}
+''');
+ newFile('$workspaceRootPath/p/lib/export.dart', '''
+export 'expect.dart';
+''');
+ addPackageDataFile('''
+version: 1
+transforms:
+ - title: 'Replace expect'
+ date: 2022-05-12
+ bulkApply: false
+ element:
+ uris: ['$importUri']
+ function: 'expect'
+ changes:
+ - kind: 'replacedBy'
+ newElement:
+ uris: ['package:p/expect.dart', 'package:p/export.dart']
+ function: 'expect'
+''');
+ await resolveTestCode('''
+import '$importUri';
+
+f() {
+ expect(true, true);
+}
+''');
+ await assertHasFix('''
+import 'package:p/expect.dart';
+import '$importUri';
+
+f() {
+ expect(true, true);
+}
+''', errorFilter: ignoreUnusedImport);
+ }
+
+ Future<void> test_new_element_uris_single() async {
+ setPackageContent('');
+ addPackageDataFile('''
+version: 1
+transforms:
+ - title: 'Replace expect'
+ date: 2022-05-12
+ bulkApply: false
+ element:
+ uris: ['$importUri']
+ function: 'expect'
+ changes:
+ - kind: 'replacedBy'
+ newElement:
+ uris: ['package:matcher/expect.dart']
+ function: 'expect'
+''');
+ await resolveTestCode('''
+import '$importUri';
+
+main() {
+ expect(true, true);
+}
+''');
+ await assertHasFix('''
+import 'package:matcher/expect.dart';
+import '$importUri';
+
+main() {
+ expect(true, true);
+}
+''', errorFilter: ignoreUnusedImport);
+ }
+}
+
class _Element {
final ElementKind kind;
final List<String> components;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
index 544f27c..f9623c1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
@@ -17,6 +17,7 @@
import 'rename_test.dart' as rename;
import 'replaced_by_test.dart' as replaced_by;
import 'sdk_fix_test.dart' as sdk_fix;
+import 'test_use_case_test.dart' as test_use_case;
import 'transform_override_set_parser_test.dart'
as transform_override_set_parser;
import 'transform_set_manager_test.dart' as transform_set_manager;
@@ -37,6 +38,7 @@
rename.main();
replaced_by.main();
sdk_fix.main();
+ test_use_case.main();
transform_override_set_parser.main();
transform_set_manager.main();
transform_set_parser.main();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_use_case_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_use_case_test.dart
new file mode 100644
index 0000000..aa0386b
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_use_case_test.dart
@@ -0,0 +1,102 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../fix_processor.dart';
+import 'data_driven_test_support.dart';
+
+void main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(TestUseCaseTest);
+ });
+}
+
+@reflectiveTest
+class TestUseCaseTest extends DataDrivenFixProcessorTest {
+ @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/23067')
+ Future<void> test_expect_export_deprecated() async {
+ newFile('$workspaceRootPath/p/lib/lib.dart', '''
+library p;
+@deprecated
+export 'package:matcher/expect.dart' show expect;
+''');
+ newFile('$workspaceRootPath/matcher/lib/expect.dart', '''
+void expect(actual, matcher) {}
+''');
+
+ writeTestPackageConfig(
+ config: PackageConfigFileBuilder()
+ ..add(name: 'matcher', rootPath: '$workspaceRootPath/matcher')
+ ..add(name: 'p', rootPath: '$workspaceRootPath/p'),
+ );
+
+ addPackageDataFile('''
+version: 1
+transforms:
+ - title: 'Replace expect'
+ date: 2022-05-12
+ bulkApply: false
+ element:
+ uris: ['$importUri']
+ function: 'expect'
+ changes:
+ - kind: 'replacedBy'
+ newElement:
+ uris: ['package:matcher/expect.dart']
+ function: 'expect'
+''');
+ await resolveTestCode('''
+import '$importUri';
+
+main() {
+ expect(true, true);
+}
+''');
+ await assertHasFix('''
+import 'package:matcher/expect.dart';
+import '$importUri';
+
+main() {
+ expect(true, true);
+}
+''');
+ }
+
+ Future<void> test_expect_removed() async {
+ setPackageContent('''
+''');
+
+ addPackageDataFile('''
+version: 1
+transforms:
+ - title: 'Replace expect'
+ date: 2022-05-12
+ bulkApply: false
+ element:
+ uris: ['$importUri']
+ function: 'expect'
+ changes:
+ - kind: 'replacedBy'
+ newElement:
+ uris: ['package:matcher/expect.dart']
+ function: 'expect'
+''');
+ await resolveTestCode('''
+import '$importUri';
+
+main() {
+ expect(true, true);
+}
+''');
+ await assertHasFix('''
+import 'package:matcher/expect.dart';
+import '$importUri';
+
+main() {
+ expect(true, true);
+}
+''', errorFilter: ignoreUnusedImport);
+ }
+}
diff --git a/pkg/analyzer/lib/src/dart/element/scope.dart b/pkg/analyzer/lib/src/dart/element/scope.dart
index a37d97a..7eb9526 100644
--- a/pkg/analyzer/lib/src/dart/element/scope.dart
+++ b/pkg/analyzer/lib/src/dart/element/scope.dart
@@ -5,7 +5,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/scope.dart';
import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/resolver/scope.dart' as impl;
+import 'package:analyzer/src/summary2/combinator.dart';
/// The scope defined by a class.
class ClassScope extends EnclosedScope {
@@ -141,10 +141,21 @@
PrefixScope(this._library, PrefixElement? prefix) {
for (var import in _library.imports) {
if (import.prefix == prefix) {
- var elements = impl.NamespaceBuilder().getImportedElements(import);
- elements.forEach(_add);
- if (import.isDeferred) {
- _deferredLibrary ??= import.importedLibrary;
+ final importedLibrary = import.importedLibrary;
+ if (importedLibrary is LibraryElementImpl) {
+ // TODO(scheglov) Ask it from `_library`.
+ final elementFactory = importedLibrary.session.elementFactory;
+ final combinators = import.combinators.build();
+ for (final exportedReference in importedLibrary.exportedReferences) {
+ final reference = exportedReference.reference;
+ if (combinators.allows(reference.name)) {
+ final element = elementFactory.elementOfReference(reference)!;
+ _add(element);
+ }
+ }
+ if (import.isDeferred) {
+ _deferredLibrary ??= importedLibrary;
+ }
}
}
}
diff --git a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
index 02c0dcd..a507543 100644
--- a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
@@ -19,6 +19,8 @@
import 'package:analyzer/src/dart/micro/resolve_file.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/summary2/linked_element_factory.dart';
+import 'package:analyzer/src/summary2/reference.dart';
MicroContextObjects createMicroContextObjects({
required FileResolver fileResolver,
@@ -56,6 +58,12 @@
analysisContext2.currentSession = analysisSession;
analysisSession.analysisContext = analysisContext2;
+ analysisSession.elementFactory = LinkedElementFactory(
+ analysisContext,
+ analysisSession,
+ Reference.root(),
+ );
+
return MicroContextObjects._(
declaredVariables: declaredVariables,
synchronousSession: synchronousSession,
@@ -152,6 +160,9 @@
@override
late _MicroAnalysisContextImpl analysisContext;
+ @override
+ late final LinkedElementFactory elementFactory;
+
_MicroAnalysisSessionImpl(
this.fileResolver,
this.declaredVariables,
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index ea109b6..1224e31 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -35,7 +35,6 @@
import 'package:analyzer/src/summary2/bundle_reader.dart';
import 'package:analyzer/src/summary2/link.dart';
import 'package:analyzer/src/summary2/linked_element_factory.dart';
-import 'package:analyzer/src/summary2/reference.dart';
import 'package:analyzer/src/task/options.dart';
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
import 'package:analyzer/src/util/performance/operation_performance.dart';
@@ -858,8 +857,6 @@
final CiderByteStore byteStore;
final MicroContextObjects contextObjects;
- late final LinkedElementFactory elementFactory;
-
Set<LibraryCycle> loadedBundles = Set.identity();
LibraryContext(
@@ -868,12 +865,10 @@
this.resourceProvider,
this.byteStore,
this.contextObjects,
- ) {
- elementFactory = LinkedElementFactory(
- contextObjects.analysisContext,
- contextObjects.analysisSession,
- Reference.root(),
- );
+ );
+
+ LinkedElementFactory get elementFactory {
+ return contextObjects.analysisSession.elementFactory;
}
/// Notifies this object that it is about to be discarded.
diff --git a/pkg/analyzer/lib/src/dart/resolver/scope.dart b/pkg/analyzer/lib/src/dart/resolver/scope.dart
index 83c03c4..9a76055 100644
--- a/pkg/analyzer/lib/src/dart/resolver/scope.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/scope.dart
@@ -197,19 +197,6 @@
return Namespace(definedNames);
}
- /// Return elements imported with the given [element].
- Iterable<Element> getImportedElements(ImportElement element) {
- var importedLibrary = element.importedLibrary;
-
- // If the URI is invalid.
- if (importedLibrary == null) {
- return [];
- }
-
- var map = _getExportMapping(importedLibrary);
- return _applyCombinators(map, element.combinators).values;
- }
-
/// Add the given [element] to the table of [definedNames] if it has a
/// publicly visible name.
void _addIfPublic(Map<String, Element> definedNames, Element element) {
diff --git a/pkg/analyzer/lib/src/summary2/combinator.dart b/pkg/analyzer/lib/src/summary2/combinator.dart
index 96f1152..27226ba 100644
--- a/pkg/analyzer/lib/src/summary2/combinator.dart
+++ b/pkg/analyzer/lib/src/summary2/combinator.dart
@@ -2,6 +2,8 @@
// 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 'package:analyzer/dart/element/element.dart';
+
class Combinator {
final bool isShow;
final Set<String> names;
@@ -21,3 +23,28 @@
return names.contains(name);
}
}
+
+extension CombinatorListExtension on List<Combinator> {
+ /// Return `true` if this list of combinators allows the [name].
+ bool allows(String name) {
+ for (final combinator in this) {
+ if (combinator.isShow && !combinator.matches(name)) return false;
+ if (combinator.isHide && combinator.matches(name)) return false;
+ }
+ return true;
+ }
+}
+
+extension NamespaceCombinatorListExtension on List<NamespaceCombinator> {
+ List<Combinator> build() {
+ return map((combinator) {
+ if (combinator is ShowElementCombinator) {
+ return Combinator.show(combinator.shownNames);
+ } else if (combinator is HideElementCombinator) {
+ return Combinator.hide(combinator.hiddenNames);
+ } else {
+ throw UnimplementedError();
+ }
+ }).toList();
+ }
+}
diff --git a/pkg/analyzer/lib/src/summary2/export.dart b/pkg/analyzer/lib/src/summary2/export.dart
index 2c79392..9f88ade 100644
--- a/pkg/analyzer/lib/src/summary2/export.dart
+++ b/pkg/analyzer/lib/src/summary2/export.dart
@@ -14,11 +14,10 @@
Export(this.exporter, this.index, this.combinators);
bool addToExportScope(String name, ExportedReference exported) {
- for (Combinator combinator in combinators) {
- if (combinator.isShow && !combinator.matches(name)) return false;
- if (combinator.isHide && combinator.matches(name)) return false;
+ if (combinators.allows(name)) {
+ return exporter.exportScope.export(index, name, exported);
}
- return exporter.exportScope.export(index, name, exported);
+ return false;
}
}
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index 33ca9f8..497160f 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -152,6 +152,7 @@
}
}
+ /// TODO(scheglov) Why would this method return `null`?
Element? elementOfReference(Reference reference) {
if (reference.element != null) {
return reference.element;
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 6608327..9ad3e64 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1484,6 +1484,26 @@
}
@override
+ bool importsLibrary(Uri uri) {
+ // Self-reference.
+ if (resolvedUnit.libraryElement.source.uri == uri) return false;
+
+ // Existing import.
+ for (var import in resolvedUnit.libraryElement.imports) {
+ var importedLibrary = import.importedLibrary;
+ if (importedLibrary != null && importedLibrary.source.uri == uri) {
+ return true;
+ }
+ }
+
+ // Queued change.
+ var importChange = (libraryChangeBuilder ?? this).librariesToImport[uri];
+ if (importChange != null) return true;
+
+ return false;
+ }
+
+ @override
void replaceTypeWithFuture(
TypeAnnotation? typeAnnotation, TypeProvider typeProvider) {
//
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
index 4eababe..2082af0 100644
--- a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
@@ -359,6 +359,10 @@
/// If there is no existing import, a new import is added.
ImportLibraryElementResult importLibraryElement(Uri uri);
+ /// Return `true` if the given library [uri] is already imported or will be
+ /// imported by a scheduled edit.
+ bool importsLibrary(Uri uri);
+
/// Optionally create an edit to replace the given [typeAnnotation] with the
/// type `Future` (with the given type annotation as the type argument). The
/// [typeProvider] is used to check the current type, because if it is already
diff --git a/pkg/compiler/lib/src/js_model/class_type_variable_access.dart b/pkg/compiler/lib/src/js_model/class_type_variable_access.dart
new file mode 100644
index 0000000..3d2b39b
--- /dev/null
+++ b/pkg/compiler/lib/src/js_model/class_type_variable_access.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2016, 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.
+
+/// Enum that defines how a member has access to the current type variables.
+enum ClassTypeVariableAccess {
+ /// The member has no access to type variables.
+ none,
+
+ /// Type variables are accessible as a property on `this`.
+ property,
+
+ /// Type variables are accessible as parameters in the current context.
+ parameter,
+
+ /// If the current context is a generative constructor, type variables are
+ /// accessible as parameters, otherwise type variables are accessible as
+ /// a property on `this`.
+ ///
+ /// This is used for instance fields whose initializers are executed in the
+ /// constructors.
+ // TODO(johnniwinther): Avoid the need for this by adding a field-setter
+ // to the J-model.
+ instanceField,
+}
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index cb36eb7..fad1f00 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -15,11 +15,11 @@
import '../ir/element_map.dart';
import '../ir/static_type_cache.dart';
import '../js_backend/annotations.dart';
+import '../js_model/class_type_variable_access.dart';
import '../js_model/element_map.dart';
import '../js_model/env.dart';
import '../ordered_typeset.dart';
import '../serialization/serialization.dart';
-import '../ssa/type_builder.dart';
import '../universe/selector.dart';
import 'elements.dart';
import 'js_world_builder.dart' show JsClosedWorldBuilder;
diff --git a/pkg/compiler/lib/src/js_model/element_map.dart b/pkg/compiler/lib/src/js_model/element_map.dart
index 2994fbe..9ba22fe 100644
--- a/pkg/compiler/lib/src/js_model/element_map.dart
+++ b/pkg/compiler/lib/src/js_model/element_map.dart
@@ -17,10 +17,10 @@
import '../ir/closure.dart';
import '../ir/static_type_provider.dart';
import '../ir/util.dart';
+import '../js_model/class_type_variable_access.dart';
import '../js_model/elements.dart' show JGeneratorBody;
import '../native/behavior.dart';
import '../serialization/serialization.dart';
-import '../ssa/type_builder.dart';
import '../universe/call_structure.dart';
import '../universe/selector.dart';
import '../world.dart';
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 55c36df..c794980 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -38,6 +38,7 @@
import '../ir/util.dart';
import '../js_backend/annotations.dart';
import '../js_backend/native_data.dart';
+import '../js_model/class_type_variable_access.dart';
import '../kernel/dart2js_target.dart' show allowedNativeTest;
import '../kernel/element_map.dart';
import '../kernel/env.dart';
@@ -46,7 +47,6 @@
import '../options.dart';
import '../ordered_typeset.dart';
import '../serialization/serialization.dart';
-import '../ssa/type_builder.dart';
import '../universe/call_structure.dart';
import '../universe/member_usage.dart';
import '../universe/selector.dart';
diff --git a/pkg/compiler/lib/src/js_model/env.dart b/pkg/compiler/lib/src/js_model/env.dart
index c987921..b2a9bd3 100644
--- a/pkg/compiler/lib/src/js_model/env.dart
+++ b/pkg/compiler/lib/src/js_model/env.dart
@@ -15,9 +15,9 @@
import '../ir/element_map.dart';
import '../ir/static_type_cache.dart';
import '../ir/util.dart';
+import '../js_model/class_type_variable_access.dart';
import '../ordered_typeset.dart';
import '../serialization/serialization.dart';
-import '../ssa/type_builder.dart';
import 'closure.dart';
import 'element_map.dart';
import 'element_map_impl.dart';
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 398082b..2d71b3d 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -20,10 +20,10 @@
import '../ir/element_map.dart';
import '../ir/static_type_cache.dart';
import '../ir/util.dart';
+import '../js_model/class_type_variable_access.dart';
import '../js_model/element_map.dart';
import '../js_model/env.dart';
import '../ordered_typeset.dart';
-import '../ssa/type_builder.dart';
import '../universe/member_usage.dart';
import 'element_map.dart';
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 0c073db..8445d27 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -39,10 +39,11 @@
import '../js_backend/native_data.dart';
import '../js_backend/runtime_types_resolution.dart';
import '../js_emitter/code_emitter_task.dart' show ModularEmitter;
-import '../js_model/locals.dart' show GlobalLocalsMap, JumpVisitor;
-import '../js_model/elements.dart' show JGeneratorBody;
+import '../js_model/class_type_variable_access.dart';
import '../js_model/element_map.dart';
+import '../js_model/elements.dart' show JGeneratorBody;
import '../js_model/js_strategy.dart';
+import '../js_model/locals.dart' show GlobalLocalsMap, JumpVisitor;
import '../js_model/type_recipe.dart';
import '../kernel/invocation_mirror_constants.dart';
import '../native/behavior.dart';
diff --git a/pkg/compiler/lib/src/ssa/type_builder.dart b/pkg/compiler/lib/src/ssa/type_builder.dart
index 86f3504..db034ca 100644
--- a/pkg/compiler/lib/src/ssa/type_builder.dart
+++ b/pkg/compiler/lib/src/ssa/type_builder.dart
@@ -9,34 +9,13 @@
import '../elements/entities.dart';
import '../elements/types.dart';
import '../inferrer/abstract_value_domain.dart';
+import '../js_model/class_type_variable_access.dart';
import '../js_model/type_recipe.dart';
import '../io/source_information.dart';
import '../options.dart';
import '../universe/use.dart' show TypeUse;
import '../world.dart';
-/// Enum that defines how a member has access to the current type variables.
-enum ClassTypeVariableAccess {
- /// The member has no access to type variables.
- none,
-
- /// Type variables are accessible as a property on `this`.
- property,
-
- /// Type variables are accessible as parameters in the current context.
- parameter,
-
- /// If the current context is a generative constructor, type variables are
- /// accessible as parameters, otherwise type variables are accessible as
- /// a property on `this`.
- ///
- /// This is used for instance fields whose initializers are executed in the
- /// constructors.
- // TODO(johnniwinther): Avoid the need for this by adding a field-setter
- // to the J-model.
- instanceField,
-}
-
/// Functions to insert type checking, coercion, and instruction insertion
/// depending on the environment for dart code.
abstract class TypeBuilder {
diff --git a/pkg/compiler/test/model/supermixin_test.dart b/pkg/compiler/test/model/supermixin_test.dart
index b7b0ada..324145d 100644
--- a/pkg/compiler/test/model/supermixin_test.dart
+++ b/pkg/compiler/test/model/supermixin_test.dart
@@ -23,7 +23,7 @@
method1(a) => 'B$a';
}
-class Mixin extends SuperA {
+mixin Mixin on SuperA {
method1(a) => super.method1('M$a');
method2(a) => 'M$a';
}
@@ -55,8 +55,10 @@
Expect.isTrue(elementEnvironment.isMixinApplicationWithMembers(superClass));
Expect.equals(mixin, elementEnvironment.getEffectiveMixinClass(superClass));
- Expect.equals(superA, elementEnvironment.getSuperClass(mixin));
Expect.equals(superB, elementEnvironment.getSuperClass(superClass));
+ Expect.equals(superA, elementEnvironment.getSuperClass(superB));
+ Expect.equals(elementEnvironment.getSuperClass(superA),
+ elementEnvironment.getSuperClass(mixin));
MemberEntity method1 = lookupMember(elementEnvironment, 'Class.method1');
Expect.equals(superClass, method1.enclosingClass);
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 3d80125..b4df57c 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -417,9 +417,7 @@
? hierarchy.getDispatchTarget(instanceClass, name, setter: isSetter)
: hierarchy.getInterfaceMember(instanceClass, name, setter: isSetter);
if (isSuper && target == null) {
- if (cls.isMixinDeclaration ||
- (libraryBuilder.loader.target.backendTarget.enableSuperMixins &&
- this.isAbstract)) {
+ if (cls.isMixinDeclaration) {
target =
hierarchy.getInterfaceMember(instanceClass, name, setter: isSetter);
}
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 40a52c4..985dc64 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -487,8 +487,8 @@
loader.buildClassHierarchy(sortedSourceClassBuilders, objectClassBuilder);
benchmarker?.enterPhase(BenchmarkPhases.outline_checkSupertypes);
- loader.checkSupertypes(
- sortedSourceClassBuilders, enumClass, underscoreEnumClass);
+ loader.checkSupertypes(sortedSourceClassBuilders, objectClass, enumClass,
+ underscoreEnumClass);
if (macroApplications != null) {
benchmarker?.enterPhase(BenchmarkPhases.outline_applyDeclarationMacros);
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 973ee8c..3e629a1 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -41,6 +41,7 @@
import '../fasta_codes.dart';
import '../kernel/combined_member_signature.dart';
import '../kernel/hierarchy/hierarchy_builder.dart';
+import '../kernel/hierarchy/hierarchy_node.dart';
import '../kernel/kernel_helper.dart';
import '../kernel/kernel_target.dart' show KernelTarget;
import '../kernel/redirecting_factory_body.dart'
@@ -729,6 +730,7 @@
void checkSupertypes(
CoreTypes coreTypes,
ClassHierarchyBuilder hierarchyBuilder,
+ Class objectClass,
Class enumClass,
Class underscoreEnumClass,
Class? macroClass) {
@@ -738,16 +740,17 @@
// Moreover, it checks that `FutureOr` and `void` are not among the
// supertypes and that `Enum` is not implemented by non-abstract classes.
+ ClassHierarchyNode classHierarchyNode =
+ hierarchyBuilder.getNodeFromClass(cls);
if (libraryBuilder.libraryFeatures.enhancedEnums.isEnabled && !isEnum) {
bool hasEnumSuperinterface = false;
- List<Supertype> interfaces =
- hierarchyBuilder.getNodeFromClass(cls).superclasses;
+ List<Supertype> interfaces = classHierarchyNode.superclasses;
for (int i = 0; !hasEnumSuperinterface && i < interfaces.length; i++) {
if (interfaces[i].classNode == enumClass) {
hasEnumSuperinterface = true;
}
}
- interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
+ interfaces = classHierarchyNode.interfaces;
for (int i = 0; !hasEnumSuperinterface && i < interfaces.length; i++) {
if (interfaces[i].classNode == enumClass) {
hasEnumSuperinterface = true;
@@ -810,14 +813,13 @@
if (macroClass != null && !cls.isMacro && !cls.isAbstract) {
// TODO(johnniwinther): Merge this check with the loop above.
bool isMacroFound = false;
- List<Supertype> interfaces =
- hierarchyBuilder.getNodeFromClass(cls).superclasses;
+ List<Supertype> interfaces = classHierarchyNode.superclasses;
for (int i = 0; !isMacroFound && i < interfaces.length; i++) {
if (interfaces[i].classNode == macroClass) {
isMacroFound = true;
}
}
- interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
+ interfaces = classHierarchyNode.interfaces;
for (int i = 0; !isMacroFound && i < interfaces.length; i++) {
if (interfaces[i].classNode == macroClass) {
isMacroFound = true;
@@ -866,6 +868,23 @@
superClass = decl;
}
}
+ if (classHierarchyNode.isMixinApplication) {
+ assert(mixedInTypeBuilder != null,
+ "No mixed in type builder for mixin application $this.");
+ ClassHierarchyNode mixedInNode = classHierarchyNode.mixedInNode!;
+ ClassHierarchyNode? mixinSuperClassNode =
+ mixedInNode.directSuperClassNode;
+ if (mixinSuperClassNode != null &&
+ mixinSuperClassNode.classBuilder.cls != objectClass &&
+ !mixedInNode.classBuilder.cls.isMixinDeclaration) {
+ addProblem(
+ templateMixinInheritsFromNotObject
+ .withArguments(mixedInNode.classBuilder.name),
+ mixedInTypeBuilder!.charOffset ?? TreeNode.noOffset,
+ noLength);
+ }
+ }
+
if (interfaceBuilders == null) return;
// Validate interfaces.
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index ffced81..a8312e7 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -2117,12 +2117,12 @@
ticker.logMs("Computed core types");
}
- void checkSupertypes(List<SourceClassBuilder> sourceClasses, Class enumClass,
- Class underscoreEnumClass) {
+ void checkSupertypes(List<SourceClassBuilder> sourceClasses,
+ Class objectClass, Class enumClass, Class underscoreEnumClass) {
for (SourceClassBuilder builder in sourceClasses) {
if (builder.libraryBuilder.loader == this && !builder.isPatch) {
- builder.checkSupertypes(coreTypes, hierarchyBuilder, enumClass,
- underscoreEnumClass, _macroClassBuilder?.cls);
+ builder.checkSupertypes(coreTypes, hierarchyBuilder, objectClass,
+ enumClass, underscoreEnumClass, _macroClassBuilder?.cls);
}
}
ticker.logMs("Checked supertypes");
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 3c2d1fe..5c0668e 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5604,3 +5604,11 @@
EnumAbstractMember:
problemMessage: "Enums can't declare abstract members."
+
+MixinInheritsFromNotObject:
+ problemMessage: "The class '#name' can't be used as a mixin because it extends a class other than 'Object'."
+ analyzerCode: MIXIN_INHERITS_FROM_NOT_OBJECT
+ script: |
+ class Base {}
+ class Mixin extends Base {}
+ class C extends Base with Mixin {}
diff --git a/pkg/front_end/test/deps_git_test.dart b/pkg/front_end/test/deps_git_test.dart
index e123def..5969343 100644
--- a/pkg/front_end/test/deps_git_test.dart
+++ b/pkg/front_end/test/deps_git_test.dart
@@ -23,21 +23,19 @@
final Uri repoDir = computeRepoDirUri();
Set<String> allowlistedExternalDartFiles = {
- "third_party/pkg/charcode/lib/ascii.dart",
-
- "third_party/pkg_tested/package_config/lib/package_config.dart",
- "third_party/pkg_tested/package_config/lib/package_config_types.dart",
- "third_party/pkg_tested/package_config/lib/src/discovery.dart",
- "third_party/pkg_tested/package_config/lib/src/errors.dart",
- "third_party/pkg_tested/package_config/lib/src/package_config_impl.dart",
- "third_party/pkg_tested/package_config/lib/src/package_config_io.dart",
- "third_party/pkg_tested/package_config/lib/src/package_config_json.dart",
- "third_party/pkg_tested/package_config/lib/src/package_config.dart",
- "third_party/pkg_tested/package_config/lib/src/packages_file.dart",
- "third_party/pkg_tested/package_config/lib/src/util.dart",
+ "third_party/pkg/package_config/lib/package_config.dart",
+ "third_party/pkg/package_config/lib/package_config_types.dart",
+ "third_party/pkg/package_config/lib/src/discovery.dart",
+ "third_party/pkg/package_config/lib/src/errors.dart",
+ "third_party/pkg/package_config/lib/src/package_config_impl.dart",
+ "third_party/pkg/package_config/lib/src/package_config_io.dart",
+ "third_party/pkg/package_config/lib/src/package_config_json.dart",
+ "third_party/pkg/package_config/lib/src/package_config.dart",
+ "third_party/pkg/package_config/lib/src/packages_file.dart",
+ "third_party/pkg/package_config/lib/src/util.dart",
// TODO(johnniwinther): Fix to allow dependency of package:package_config.
- "third_party/pkg_tested/package_config/lib/src/util_io.dart",
+ "third_party/pkg/package_config/lib/src/util_io.dart",
// TODO(CFE-team): These files should not be included.
// The package isn't even in pubspec.yaml.
diff --git a/pkg/front_end/test/fasta/super_mixins_test.dart b/pkg/front_end/test/fasta/super_mixins_test.dart
index 2ef4893..d1db05d 100644
--- a/pkg/front_end/test/fasta/super_mixins_test.dart
+++ b/pkg/front_end/test/fasta/super_mixins_test.dart
@@ -108,7 +108,7 @@
..target = new NoneTargetWithSuperMixins(new TargetFlags());
await compileScript(testSource, options: options);
Expect.setEquals(
- const <String>['baz', 'foo', 'quux'], missingSuperMethodNames);
+ const <String>['bar', 'baz', 'foo', 'quux'], missingSuperMethodNames);
}
void main() {
diff --git a/pkg/front_end/test/macros/application/data/tests/sequence.dart b/pkg/front_end/test/macros/application/data/tests/sequence.dart
index 0318ffd..cce1603 100644
--- a/pkg/front_end/test/macros/application/data/tests/sequence.dart
+++ b/pkg/front_end/test/macros/application/data/tests/sequence.dart
@@ -166,7 +166,6 @@
*/
class Class6a {}
-@SequenceMacro(0)
/*class: Class7d:
declarations:
@@ -174,7 +173,8 @@
method2() {}
}
*/
-class Class7d with Class7b, Class7c {}
+@SequenceMacro(0)
+class Class7d extends Class7b with Class7c {}
@SequenceMacro(0)
/*class: Class7c:
diff --git a/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect b/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect
index 80e82bb..691ef16 100644
--- a/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect
+++ b/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect
@@ -95,24 +95,17 @@
;
method /* from org-dartlang-augmentation:/a/b/c/main.dart-11 */ method() → dynamic {}
}
-abstract class _Class7d&Object&Class7b = core::Object with self::Class7b /*isAnonymousMixin,hasConstConstructor*/ {
- const synthetic constructor •() → self::_Class7d&Object&Class7b
- : super core::Object::•()
- ;
- mixin-super-stub method method1() → dynamic
- return super.{self::Class7b::method1}();
-}
-abstract class _Class7d&Object&Class7b&Class7c = self::_Class7d&Object&Class7b with self::Class7c /*isAnonymousMixin,hasConstConstructor*/ {
- const synthetic constructor •() → self::_Class7d&Object&Class7b&Class7c
- : super self::_Class7d&Object&Class7b::•()
+abstract class _Class7d&Class7b&Class7c = self::Class7b with self::Class7c /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_Class7d&Class7b&Class7c
+ : super self::Class7b::•()
;
mixin-super-stub method method() → dynamic
return super.{self::Class7c::method}();
}
@#C2
-class Class7d extends self::_Class7d&Object&Class7b&Class7c {
+class Class7d extends self::_Class7d&Class7b&Class7c {
synthetic constructor •() → self::Class7d
- : super self::_Class7d&Object&Class7b&Class7c::•()
+ : super self::_Class7d&Class7b&Class7c::•()
;
method /* from org-dartlang-augmentation:/a/b/c/main.dart-17 */ method2() → dynamic {}
}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart
index ddee41a..867944a 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart
@@ -6,7 +6,7 @@
int get foo => index;
}
-enum EA with A { element }
+enum EA with A { element } // Error.
abstract class B implements Enum { // Ok.
int get foo => index;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
index 806437d..64e3b29f 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
@@ -1,4 +1,11 @@
library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
index fefad44..8d2555e 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
@@ -1,4 +1,11 @@
library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
index bbf22ca..a059a89 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
@@ -1,4 +1,11 @@
library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
index bbf22ca..a059a89 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
@@ -1,4 +1,11 @@
library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
index c664069..305483e 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
@@ -1,4 +1,11 @@
library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
index 5cdd088..d117fd5 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
@@ -1,4 +1,11 @@
library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48167.dart b/pkg/front_end/testcases/general/issue48167.dart
new file mode 100644
index 0000000..5207b6e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Base {}
+
+class Mixin1a extends Base {}
+
+class Mixin1b extends Mixin1a {}
+
+class C1a extends Base with Mixin1a {}
+
+class C1b extends Base with Mixin1b {}
+
+mixin Mixin2a on Base {}
+
+mixin Mixin2b on Base, Mixin2a {}
+
+class C2a extends Base with Mixin2a {}
+
+class C2b extends Base with Mixin2a, Mixin2b {}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48167.dart.textual_outline.expect
new file mode 100644
index 0000000..b9524fa
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+class Base {}
+
+class Mixin1a extends Base {}
+
+class Mixin1b extends Mixin1a {}
+
+class C1a extends Base with Mixin1a {}
+
+class C1b extends Base with Mixin1b {}
+
+mixin Mixin2a on Base {}
+mixin Mixin2b on Base, Mixin2a {}
+
+class C2a extends Base with Mixin2a {}
+
+class C2b extends Base with Mixin2a, Mixin2b {}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48167.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f907e98
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+class Base {}
+
+class C1a extends Base with Mixin1a {}
+
+class C1b extends Base with Mixin1b {}
+
+class C2a extends Base with Mixin2a {}
+
+class C2b extends Base with Mixin2a, Mixin2b {}
+
+class Mixin1a extends Base {}
+
+class Mixin1b extends Mixin1a {}
+
+mixin Mixin2a on Base {}
+mixin Mixin2b on Base, Mixin2a {}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.weak.expect b/pkg/front_end/testcases/general/issue48167.dart.weak.expect
new file mode 100644
index 0000000..9c5a12c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.weak.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48167.dart:11:29: Error: The class 'Mixin1a' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1a extends Base with Mixin1a {}
+// ^
+//
+// pkg/front_end/testcases/general/issue48167.dart:13:29: Error: The class 'Mixin1b' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1b extends Base with Mixin1b {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+ synthetic constructor •() → self::Base
+ : super core::Object::•()
+ ;
+}
+class Mixin1a extends self::Base {
+ synthetic constructor •() → self::Mixin1a
+ : super self::Base::•()
+ ;
+}
+class Mixin1b extends self::Mixin1a {
+ synthetic constructor •() → self::Mixin1b
+ : super self::Mixin1a::•()
+ ;
+}
+abstract class _C1a&Base&Mixin1a = self::Base with self::Mixin1a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C1a&Base&Mixin1a
+ : super self::Base::•()
+ ;
+}
+class C1a extends self::_C1a&Base&Mixin1a {
+ synthetic constructor •() → self::C1a
+ : super self::_C1a&Base&Mixin1a::•()
+ ;
+}
+abstract class _C1b&Base&Mixin1b = self::Base with self::Mixin1b /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C1b&Base&Mixin1b
+ : super self::Base::•()
+ ;
+}
+class C1b extends self::_C1b&Base&Mixin1b {
+ synthetic constructor •() → self::C1b
+ : super self::_C1b&Base&Mixin1b::•()
+ ;
+}
+abstract class Mixin2a extends self::Base /*isMixinDeclaration*/ {
+}
+abstract class _Mixin2b&Base&Mixin2a extends core::Object implements self::Base, self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_Mixin2b&Base&Mixin2a
+ : super core::Object::•()
+ ;
+}
+abstract class Mixin2b extends self::_Mixin2b&Base&Mixin2a /*isMixinDeclaration*/ {
+}
+abstract class _C2a&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2a&Base&Mixin2a
+ : super self::Base::•()
+ ;
+}
+class C2a extends self::_C2a&Base&Mixin2a {
+ synthetic constructor •() → self::C2a
+ : super self::_C2a&Base&Mixin2a::•()
+ ;
+}
+abstract class _C2b&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2b&Base&Mixin2a
+ : super self::Base::•()
+ ;
+}
+abstract class _C2b&Base&Mixin2a&Mixin2b = self::_C2b&Base&Mixin2a with self::Mixin2b /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2b&Base&Mixin2a&Mixin2b
+ : super self::_C2b&Base&Mixin2a::•()
+ ;
+}
+class C2b extends self::_C2b&Base&Mixin2a&Mixin2b {
+ synthetic constructor •() → self::C2b
+ : super self::_C2b&Base&Mixin2a&Mixin2b::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48167.dart.weak.modular.expect
new file mode 100644
index 0000000..9c5a12c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48167.dart:11:29: Error: The class 'Mixin1a' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1a extends Base with Mixin1a {}
+// ^
+//
+// pkg/front_end/testcases/general/issue48167.dart:13:29: Error: The class 'Mixin1b' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1b extends Base with Mixin1b {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+ synthetic constructor •() → self::Base
+ : super core::Object::•()
+ ;
+}
+class Mixin1a extends self::Base {
+ synthetic constructor •() → self::Mixin1a
+ : super self::Base::•()
+ ;
+}
+class Mixin1b extends self::Mixin1a {
+ synthetic constructor •() → self::Mixin1b
+ : super self::Mixin1a::•()
+ ;
+}
+abstract class _C1a&Base&Mixin1a = self::Base with self::Mixin1a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C1a&Base&Mixin1a
+ : super self::Base::•()
+ ;
+}
+class C1a extends self::_C1a&Base&Mixin1a {
+ synthetic constructor •() → self::C1a
+ : super self::_C1a&Base&Mixin1a::•()
+ ;
+}
+abstract class _C1b&Base&Mixin1b = self::Base with self::Mixin1b /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C1b&Base&Mixin1b
+ : super self::Base::•()
+ ;
+}
+class C1b extends self::_C1b&Base&Mixin1b {
+ synthetic constructor •() → self::C1b
+ : super self::_C1b&Base&Mixin1b::•()
+ ;
+}
+abstract class Mixin2a extends self::Base /*isMixinDeclaration*/ {
+}
+abstract class _Mixin2b&Base&Mixin2a extends core::Object implements self::Base, self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_Mixin2b&Base&Mixin2a
+ : super core::Object::•()
+ ;
+}
+abstract class Mixin2b extends self::_Mixin2b&Base&Mixin2a /*isMixinDeclaration*/ {
+}
+abstract class _C2a&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2a&Base&Mixin2a
+ : super self::Base::•()
+ ;
+}
+class C2a extends self::_C2a&Base&Mixin2a {
+ synthetic constructor •() → self::C2a
+ : super self::_C2a&Base&Mixin2a::•()
+ ;
+}
+abstract class _C2b&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2b&Base&Mixin2a
+ : super self::Base::•()
+ ;
+}
+abstract class _C2b&Base&Mixin2a&Mixin2b = self::_C2b&Base&Mixin2a with self::Mixin2b /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2b&Base&Mixin2a&Mixin2b
+ : super self::_C2b&Base&Mixin2a::•()
+ ;
+}
+class C2b extends self::_C2b&Base&Mixin2a&Mixin2b {
+ synthetic constructor •() → self::C2b
+ : super self::_C2b&Base&Mixin2a&Mixin2b::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48167.dart.weak.outline.expect
new file mode 100644
index 0000000..fbb38a4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.weak.outline.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48167.dart:11:29: Error: The class 'Mixin1a' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1a extends Base with Mixin1a {}
+// ^
+//
+// pkg/front_end/testcases/general/issue48167.dart:13:29: Error: The class 'Mixin1b' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1b extends Base with Mixin1b {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+ synthetic constructor •() → self::Base
+ ;
+}
+class Mixin1a extends self::Base {
+ synthetic constructor •() → self::Mixin1a
+ ;
+}
+class Mixin1b extends self::Mixin1a {
+ synthetic constructor •() → self::Mixin1b
+ ;
+}
+abstract class _C1a&Base&Mixin1a = self::Base with self::Mixin1a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C1a&Base&Mixin1a
+ : super self::Base::•()
+ ;
+}
+class C1a extends self::_C1a&Base&Mixin1a {
+ synthetic constructor •() → self::C1a
+ ;
+}
+abstract class _C1b&Base&Mixin1b = self::Base with self::Mixin1b /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C1b&Base&Mixin1b
+ : super self::Base::•()
+ ;
+}
+class C1b extends self::_C1b&Base&Mixin1b {
+ synthetic constructor •() → self::C1b
+ ;
+}
+abstract class Mixin2a extends self::Base /*isMixinDeclaration*/ {
+}
+abstract class _Mixin2b&Base&Mixin2a extends core::Object implements self::Base, self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_Mixin2b&Base&Mixin2a
+ ;
+}
+abstract class Mixin2b extends self::_Mixin2b&Base&Mixin2a /*isMixinDeclaration*/ {
+}
+abstract class _C2a&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2a&Base&Mixin2a
+ : super self::Base::•()
+ ;
+}
+class C2a extends self::_C2a&Base&Mixin2a {
+ synthetic constructor •() → self::C2a
+ ;
+}
+abstract class _C2b&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2b&Base&Mixin2a
+ : super self::Base::•()
+ ;
+}
+abstract class _C2b&Base&Mixin2a&Mixin2b = self::_C2b&Base&Mixin2a with self::Mixin2b /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C2b&Base&Mixin2a&Mixin2b
+ : super self::_C2b&Base&Mixin2a::•()
+ ;
+}
+class C2b extends self::_C2b&Base&Mixin2a&Mixin2b {
+ synthetic constructor •() → self::C2b
+ ;
+}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48167.dart.weak.transformed.expect
new file mode 100644
index 0000000..f2fe692
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.weak.transformed.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48167.dart:11:29: Error: The class 'Mixin1a' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1a extends Base with Mixin1a {}
+// ^
+//
+// pkg/front_end/testcases/general/issue48167.dart:13:29: Error: The class 'Mixin1b' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1b extends Base with Mixin1b {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+ synthetic constructor •() → self::Base
+ : super core::Object::•()
+ ;
+}
+class Mixin1a extends self::Base {
+ synthetic constructor •() → self::Mixin1a
+ : super self::Base::•()
+ ;
+}
+class Mixin1b extends self::Mixin1a {
+ synthetic constructor •() → self::Mixin1b
+ : super self::Mixin1a::•()
+ ;
+}
+abstract class _C1a&Base&Mixin1a extends self::Base implements self::Mixin1a /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C1a&Base&Mixin1a
+ : super self::Base::•()
+ ;
+}
+class C1a extends self::_C1a&Base&Mixin1a {
+ synthetic constructor •() → self::C1a
+ : super self::_C1a&Base&Mixin1a::•()
+ ;
+}
+abstract class _C1b&Base&Mixin1b extends self::Base implements self::Mixin1b /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C1b&Base&Mixin1b
+ : super self::Base::•()
+ ;
+}
+class C1b extends self::_C1b&Base&Mixin1b {
+ synthetic constructor •() → self::C1b
+ : super self::_C1b&Base&Mixin1b::•()
+ ;
+}
+abstract class Mixin2a extends self::Base /*isMixinDeclaration*/ {
+}
+abstract class _Mixin2b&Base&Mixin2a extends core::Object implements self::Base, self::Mixin2a /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_Mixin2b&Base&Mixin2a
+ : super core::Object::•()
+ ;
+}
+abstract class Mixin2b extends self::_Mixin2b&Base&Mixin2a /*isMixinDeclaration*/ {
+}
+abstract class _C2a&Base&Mixin2a extends self::Base implements self::Mixin2a /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C2a&Base&Mixin2a
+ : super self::Base::•()
+ ;
+}
+class C2a extends self::_C2a&Base&Mixin2a {
+ synthetic constructor •() → self::C2a
+ : super self::_C2a&Base&Mixin2a::•()
+ ;
+}
+abstract class _C2b&Base&Mixin2a extends self::Base implements self::Mixin2a /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C2b&Base&Mixin2a
+ : super self::Base::•()
+ ;
+}
+abstract class _C2b&Base&Mixin2a&Mixin2b extends self::_C2b&Base&Mixin2a implements self::Mixin2b /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C2b&Base&Mixin2a&Mixin2b
+ : super self::_C2b&Base&Mixin2a::•()
+ ;
+}
+class C2b extends self::_C2b&Base&Mixin2a&Mixin2b {
+ synthetic constructor •() → self::C2b
+ : super self::_C2b&Base&Mixin2a&Mixin2b::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart b/pkg/front_end/testcases/general/mixin_super_repeated.dart
index e9453fd..d326a31 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart
@@ -6,7 +6,7 @@
var m;
}
-abstract class N extends M {
+mixin N on M {
void set superM(value) {
super.m = value;
}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
index e92d32e..65c7ba3 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
@@ -2,7 +2,7 @@
var m;
}
-abstract class N extends M {
+mixin N on M {
void set superM(value) {}
get superM => super.m;
}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
index 2d9c4d4..30ac627 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
@@ -2,13 +2,12 @@
var m;
}
-abstract class N extends M {
- get superM => super.m;
- void set superM(value) {}
-}
-
class Named = S with M, N, M;
class S {}
main() {}
+mixin N on M {
+ get superM => super.m;
+ void set superM(value) {}
+}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
index 5ed308d..1c00ad2 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
@@ -8,10 +8,7 @@
: super core::Object::•()
;
}
-abstract class N extends self::M {
- synthetic constructor •() → self::N
- : super self::M::•()
- ;
+abstract class N extends self::M /*isMixinDeclaration*/ {
set superM(dynamic value) → void {
super.{self::M::m} = value;
}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
index 5ed308d..1c00ad2 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
@@ -8,10 +8,7 @@
: super core::Object::•()
;
}
-abstract class N extends self::M {
- synthetic constructor •() → self::N
- : super self::M::•()
- ;
+abstract class N extends self::M /*isMixinDeclaration*/ {
set superM(dynamic value) → void {
super.{self::M::m} = value;
}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
index 48f57f8..5af75a0 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
@@ -7,9 +7,7 @@
synthetic constructor •() → self::M
;
}
-abstract class N extends self::M {
- synthetic constructor •() → self::N
- ;
+abstract class N extends self::M /*isMixinDeclaration*/ {
set superM(dynamic value) → void
;
get superM() → dynamic
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
index 94d7058..b868047 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
@@ -8,10 +8,7 @@
: super core::Object::•()
;
}
-abstract class N extends self::M {
- synthetic constructor •() → self::N
- : super self::M::•()
- ;
+abstract class N extends self::M /*isMixinDeclaration*/ {
set superM(dynamic value) → void {
super.{self::M::m} = value;
}
diff --git a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
index ee75714..d55612e 100644
--- a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
+++ b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
@@ -17,5 +17,5 @@
class A extends Object with B<Object>, C {}
b.dart: |
// @dart=2.9
- abstract class C<T extends Object> extends Object with B<T> {}
+ mixin C<T extends Object> on B<T> {}
abstract class B<ChildType extends Object> extends Object {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
index c20ad39..6858497 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
@@ -4,7 +4,7 @@
// @dart=2.9
class I<X> {}
-class M0<X, Y extends String> extends I<X> {}
+mixin M0<X, Y extends String> on I<X> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
index 2a73ca9..7930d31 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
@@ -1,7 +1,7 @@
// @dart = 2.9
class I<X> {}
-class M0<X, Y extends String> extends I<X> {}
+mixin M0<X, Y extends String> on I<X> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
index a214810..9474532 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
@@ -3,8 +3,7 @@
class I<X> {}
-class M0<X, Y extends String> extends I<X> {}
-
class M1 implements I<int> {}
main() {}
+mixin M0<X, Y extends String> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
index ce1b438..0d4a458 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
index ce1b438..0d4a458 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
index d73c867..e554562 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
@@ -16,9 +16,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
index 0ac49c5..aa3fb5c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
index 5219f6e..6f236ea 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
@@ -4,7 +4,7 @@
// @dart=2.9
class I<X> {}
-class M0<X, Y extends X> extends I<X> {}
+mixin M0<X, Y extends X> on I<X> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
index 4967e97..3cccb82 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
@@ -1,7 +1,7 @@
// @dart = 2.9
class I<X> {}
-class M0<X, Y extends X> extends I<X> {}
+mixin M0<X, Y extends X> on I<X> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
index 37572af..1f00d34 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
@@ -3,8 +3,7 @@
class I<X> {}
-class M0<X, Y extends X> extends I<X> {}
-
class M1 implements I<int> {}
main() {}
+mixin M0<X, Y extends X> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
index f202e79..53f7336 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
index f202e79..53f7336 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
index c7b5bf6..858797c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
@@ -16,9 +16,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
index 3988f83..49e100e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
index f17f138..b09deb8 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
@@ -4,7 +4,7 @@
// @dart=2.9
class I<X> {}
-class M0<X, Y extends Comparable<Y>> extends I<X> {}
+mixin M0<X, Y extends Comparable<Y>> on I<X> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
index 12b7ba8..86c6e94 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
@@ -1,7 +1,7 @@
// @dart = 2.9
class I<X> {}
-class M0<X, Y extends Comparable<Y>> extends I<X> {}
+mixin M0<X, Y extends Comparable<Y>> on I<X> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
index 337d25b..6462f6d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
@@ -3,8 +3,7 @@
class I<X> {}
-class M0<X, Y extends Comparable<Y>> extends I<X> {}
-
class M1 implements I<int> {}
main() {}
+mixin M0<X, Y extends Comparable<Y>> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
index 05a10e7..819871c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
@@ -8,7 +8,7 @@
// class A extends M1 with M0 {}
// ^
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
-// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// mixin M0<X, Y extends Comparable<Y>> on I<X> {}
// ^
//
import self as self;
@@ -29,10 +29,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
index 05a10e7..819871c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
@@ -8,7 +8,7 @@
// class A extends M1 with M0 {}
// ^
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
-// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// mixin M0<X, Y extends Comparable<Y>> on I<X> {}
// ^
//
import self as self;
@@ -29,10 +29,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
index 98c5c87..9d065b1 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
@@ -8,7 +8,7 @@
// class A extends M1 with M0 {}
// ^
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
-// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// mixin M0<X, Y extends Comparable<Y>> on I<X> {}
// ^
//
import self as self;
@@ -28,9 +28,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
index 06c6423..d3a2317 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
// class A extends M1 with M0 {}
// ^
// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
-// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// mixin M0<X, Y extends Comparable<Y>> on I<X> {}
// ^
//
import self as self;
@@ -29,10 +29,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
index 595169f..09bcac5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
@@ -4,7 +4,7 @@
// @dart=2.9
class I<X> {}
-class M0<X, Y extends void Function({String name})> extends I<X> {}
+mixin M0<X, Y extends void Function({String name})> on I<X> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
index 242d773..d90ab5a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
@@ -1,7 +1,7 @@
// @dart = 2.9
class I<X> {}
-class M0<X, Y extends void Function({String name})> extends I<X> {}
+mixin M0<X, Y extends void Function({String name})> on I<X> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
index 58946b1..b7f442c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
@@ -3,8 +3,7 @@
class I<X> {}
-class M0<X, Y extends void Function({String name})> extends I<X> {}
-
class M1 implements I<int> {}
main() {}
+mixin M0<X, Y extends void Function({String name})> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
index 4493630..21810ba 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
index 4493630..21810ba 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
index 11c5048..dd9cb86 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
@@ -16,9 +16,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
index 73fbc15..35928d5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
@@ -17,10 +17,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::I::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
index d133805..7d46deb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
@@ -6,7 +6,7 @@
class J<X> {}
-class M0<X, Y> extends I<X> with J<Y> {}
+mixin M0<X, Y> on I<X>, J<Y> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
index 4287c58..5a2f3a0 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
@@ -3,7 +3,7 @@
class J<X> {}
-class M0<X, Y> extends I<X> with J<Y> {}
+mixin M0<X, Y> on I<X>, J<Y> {}
class M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
index b45667f..f60beeb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
@@ -5,10 +5,9 @@
class J<X> {}
-class M0<X, Y> extends I<X> with J<Y> {}
-
class M1 implements I<int> {}
class M2 extends M1 implements J<double> {}
main() {}
+mixin M0<X, Y> on I<X>, J<Y> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
index 4f31d67..42084e3d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
@@ -32,15 +32,22 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> = self::I<self::_M0&I&J::X*> with self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/ {
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
- : super self::I::•()
+ : 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
}
-class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::_M0&I&J::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
index 4f31d67..42084e3d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
@@ -32,15 +32,22 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> = self::I<self::_M0&I&J::X*> with self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/ {
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
- : super self::I::•()
+ : 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
}
-class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::_M0&I&J::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
index 8a6a14b..8b7ce31 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
@@ -30,14 +30,21 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> = self::I<self::_M0&I&J::X*> with self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/ {
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
- : super self::I::•()
;
+ 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 M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
index ec47bee..40101bf 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
@@ -32,15 +32,22 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::I<self::_M0&I&J::X*> implements self::J<self::_M0&I&J::Y*> /*isAnonymousMixin,isEliminatedMixin*/ {
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
- : super self::I::•()
+ : 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
}
-class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
- synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
- : super self::_M0&I&J::•()
- ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/ {
}
class M1 extends core::Object implements self::I<core::int*> {
synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
index 012dd24..f6f01f3 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
@@ -1,4 +1,11 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:30: Error: The class 'M0' can't be used as a mixin because it extends a class other than 'Object'.
+// class A extends M2<int> with M0 {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
index 012dd24..f6f01f3 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
@@ -1,4 +1,11 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:30: Error: The class 'M0' can't be used as a mixin because it extends a class other than 'Object'.
+// class A extends M2<int> with M0 {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
index 7c5b918..14be2ee 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
@@ -1,4 +1,11 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:30: Error: The class 'M0' can't be used as a mixin because it extends a class other than 'Object'.
+// class A extends M2<int> with M0 {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
index 87156aa..04ba48f 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
@@ -1,4 +1,11 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:30: Error: The class 'M0' can't be used as a mixin because it extends a class other than 'Object'.
+// class A extends M2<int> with M0 {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
index 0c186dd..a81facd 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
@@ -6,7 +6,7 @@
class M0<T> extends I<T> {}
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
// M1 is inferred as M1<int>
class A extends M0<int> with M1 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
index 5a57d83..bcb4e4e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
@@ -3,7 +3,7 @@
class M0<T> extends I<T> {}
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
class A extends M0<int> with M1 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
index c678ba4..09a302b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
@@ -5,6 +5,5 @@
class M0<T> extends I<T> {}
-class M1<T> extends I<T> {}
-
main() {}
+mixin M1<T> on I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
index 0f8933b..21fbce2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
@@ -22,10 +22,7 @@
: super self::I::•()
;
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
index 0f8933b..21fbce2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
@@ -22,10 +22,7 @@
: super self::I::•()
;
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
index 6944ee0..77a51bc 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
@@ -20,9 +20,7 @@
synthetic constructor •() → self::M0<self::M0::T*>*
;
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
index 9909135..6604f0b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
@@ -22,10 +22,7 @@
: super self::I::•()
;
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&M0&M1 extends self::M0<core::int*> implements self::M1<core::int*> /*isAnonymousMixin,isEliminatedMixin*/ {
synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
index e061ed7..7f1dff7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
@@ -6,9 +6,9 @@
class M0<T> extends I<T> {}
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
-class M2<T> extends I<T> {}
+mixin M2<T> on I<T> {}
// M1 is inferred as M1<int>
// M2 is inferred as M1<int>
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
index 2f58213..8035659 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
@@ -3,9 +3,8 @@
class M0<T> extends I<T> {}
-class M1<T> extends I<T> {}
-
-class M2<T> extends I<T> {}
+mixin M1<T> on I<T> {}
+mixin M2<T> on I<T> {}
class A extends M0<int> with M1, M2 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
index c2e033d..99cac73 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
@@ -5,8 +5,6 @@
class M0<T> extends I<T> {}
-class M1<T> extends I<T> {}
-
-class M2<T> extends I<T> {}
-
main() {}
+mixin M1<T> on I<T> {}
+mixin M2<T> on I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
index d7c017d..ac1a6239 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
@@ -22,15 +22,9 @@
: super self::I::•()
;
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
-class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
- synthetic constructor •() → self::M2<self::M2::T*>*
- : super self::I::•()
- ;
+abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/ {
}
abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
index d7c017d..ac1a6239 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
@@ -22,15 +22,9 @@
: super self::I::•()
;
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
-class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
- synthetic constructor •() → self::M2<self::M2::T*>*
- : super self::I::•()
- ;
+abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/ {
}
abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
index 1d14b87..6f2e7df 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
@@ -20,13 +20,9 @@
synthetic constructor •() → self::M0<self::M0::T*>*
;
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
-class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
- synthetic constructor •() → self::M2<self::M2::T*>*
- ;
+abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/ {
}
abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
index 0b98340..9516020 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
@@ -22,15 +22,9 @@
: super self::I::•()
;
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
-class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
- synthetic constructor •() → self::M2<self::M2::T*>*
- : super self::I::•()
- ;
+abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/ {
}
abstract class _A&M0&M1 extends self::M0<core::int*> implements self::M1<core::int*> /*isAnonymousMixin,isEliminatedMixin*/ {
synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
index 90b699b..2caa544 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
@@ -6,7 +6,7 @@
class M0<T> extends Object implements I<T> {}
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
// M0 is inferred as M0<dynamic>
// Error since class hierarchy is inconsistent
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
index 216611a..e13c203 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
@@ -3,7 +3,7 @@
class M0<T> extends Object implements I<T> {}
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
class A extends Object with M0, M1<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
index 6a9e2c6..9310f10 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
@@ -5,6 +5,5 @@
class M0<T> extends Object implements I<T> {}
-class M1<T> extends I<T> {}
-
main() {}
+mixin M1<T> on I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
index da805eec..d9fbc12 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
@@ -7,6 +7,16 @@
// ^
//
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: '_A&Object&M0' doesn't implement 'I<int>' so it can't be used with 'M1<int>'.
+// - 'Object with M0' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// - 'M1' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// class A extends Object with M0, M1<int> {}
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -40,10 +50,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
index da805eec..d9fbc12 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
@@ -7,6 +7,16 @@
// ^
//
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: '_A&Object&M0' doesn't implement 'I<int>' so it can't be used with 'M1<int>'.
+// - 'Object with M0' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// - 'M1' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// class A extends Object with M0, M1<int> {}
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -40,10 +50,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
index 6d82612..58e02afcb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
@@ -7,6 +7,16 @@
// ^
//
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: '_A&Object&M0' doesn't implement 'I<int>' so it can't be used with 'M1<int>'.
+// - 'Object with M0' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// - 'M1' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// class A extends Object with M0, M1<int> {}
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -38,9 +48,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
index 9fd048e..f602be6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
@@ -6,7 +6,7 @@
class M0<T> extends Object implements I<T> {}
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
// M0 is inferred as M0<dynamic> (unconstrained)
// M1 is inferred as M1<dynamic> (constrained by inferred argument to M0)
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
index db097a6..d8111f8 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
@@ -3,7 +3,7 @@
class M0<T> extends Object implements I<T> {}
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
class A extends Object with M0, M1 implements I<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
index c64af1d..158c0b7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
@@ -5,6 +5,5 @@
class M0<T> extends Object implements I<T> {}
-class M1<T> extends I<T> {}
-
main() {}
+mixin M1<T> on I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
index 1391478..39d7387 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
@@ -40,10 +40,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
index 1391478..39d7387 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
@@ -40,10 +40,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- : super self::I::•()
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
index c419d1d..af04810 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
@@ -38,9 +38,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
- synthetic constructor •() → self::M1<self::M1::T*>*
- ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/ {
}
abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/scrape/lib/scrape.dart b/pkg/scrape/lib/scrape.dart
index bed0463..19c719c 100644
--- a/pkg/scrape/lib/scrape.dart
+++ b/pkg/scrape/lib/scrape.dart
@@ -247,7 +247,6 @@
// Don't care about cached packages.
if (entry.path.contains('sdk/third_party/pkg/')) continue;
- if (entry.path.contains('sdk/third_party/pkg_tested/')) continue;
if (entry.path.contains('/.dart_tool/')) continue;
// Don't care about generated protobuf code.
diff --git a/pkg/test_runner/lib/src/test_configurations.dart b/pkg/test_runner/lib/src/test_configurations.dart
index e5157fe..5c3dddb 100644
--- a/pkg/test_runner/lib/src/test_configurations.dart
+++ b/pkg/test_runner/lib/src/test_configurations.dart
@@ -28,31 +28,32 @@
/// simpler to add them to test.dart. Existing test suites should be moved to
/// here, if possible.
final testSuiteDirectories = [
- Path('third_party/pkg/dartdoc'),
Path('pkg'),
- Path('third_party/pkg_tested'),
- Path('runtime/tests/vm'),
- Path('runtime/observatory/tests/service'),
Path('runtime/observatory/tests/observatory_ui'),
- Path('runtime/observatory_2/tests/service_2'),
+ Path('runtime/observatory/tests/service'),
Path('runtime/observatory_2/tests/observatory_ui_2'),
+ Path('runtime/observatory_2/tests/service_2'),
+ Path('runtime/tests/vm'),
Path('samples'),
- Path('samples_2'),
Path('samples-dev'),
+ Path('samples_2'),
Path('tests/corelib'),
Path('tests/corelib_2'),
- Path('tests/web'),
- Path('tests/web_2'),
Path('tests/dartdevc'),
Path('tests/dartdevc_2'),
+ Path('tests/ffi'),
+ Path('tests/ffi_2'),
Path('tests/language'),
Path('tests/language_2'),
Path('tests/lib'),
Path('tests/lib_2'),
Path('tests/standalone'),
Path('tests/standalone_2'),
- Path('tests/ffi'),
- Path('tests/ffi_2'),
+ Path('tests/web'),
+ Path('tests/web_2'),
+ Path('third_party/pkg/dart_style'),
+ Path('third_party/pkg/dartdoc'),
+ Path('third_party/pkg/package_config'),
Path('utils/tests/peg'),
];
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index 6e0473c..0e6735f 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -302,7 +302,7 @@
main.writeAsStringSync("""
import 'lib.dart';
main() => print(foo());
- class C1 extends Object with C2, C3 {
+ class C1 extends Object with C3, C2 {
c1method() {
print("c1");
}
@@ -318,7 +318,7 @@
import 'main.dart';
foo() => 'foo';
main() => print('bar');
- class C2 extends Object with C3 {
+ mixin C2 on C3 {
c2method() {
print("c2");
}
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/lib/main.dart b/pkg/vm/testcases/transformations/to_string_transformer/lib/main.dart
index aa53235..6ac3080 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/lib/main.dart
+++ b/pkg/vm/testcases/transformations/to_string_transformer/lib/main.dart
@@ -30,9 +30,9 @@
@keepToStringInSubtypes
class Base1 {}
-class Base2 extends Base1 {}
+mixin Base2 on Base1 {}
-class Base3 extends Object with Base2 {}
+class Base3 extends Object with Base1, Base2 {}
class KeepInherited implements Base3 {
@override
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect b/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
index 5a3a770..39a0384 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
+++ b/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
@@ -45,19 +45,21 @@
: super core::Object::•()
;
}
-class Base2 extends self::Base1 {
- synthetic constructor •() → self::Base2
- : super self::Base1::•()
- ;
+abstract class Base2 extends self::Base1 /*isMixinDeclaration*/ {
}
-abstract class _Base3&Object&Base2 extends core::Object implements self::Base2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
- const synthetic constructor •() → self::_Base3&Object&Base2
+abstract class _Base3&Object&Base1 extends core::Object implements self::Base1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_Base3&Object&Base1
: super core::Object::•()
;
}
-class Base3 extends self::_Base3&Object&Base2 {
+abstract class _Base3&Object&Base1&Base2 extends self::_Base3&Object&Base1 implements self::Base2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_Base3&Object&Base1&Base2
+ : super self::_Base3&Object&Base1::•()
+ ;
+}
+class Base3 extends self::_Base3&Object&Base1&Base2 {
synthetic constructor •() → self::Base3
- : super self::_Base3&Object&Base2::•()
+ : super self::_Base3&Object&Base1&Base2::•()
;
}
class KeepInherited extends core::Object implements self::Base3 {
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect b/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
index 250e52d..d48dc28 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
+++ b/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
@@ -45,19 +45,21 @@
: super core::Object::•()
;
}
-class Base2 extends self::Base1 {
- synthetic constructor •() → self::Base2
- : super self::Base1::•()
- ;
+abstract class Base2 extends self::Base1 /*isMixinDeclaration*/ {
}
-abstract class _Base3&Object&Base2 extends core::Object implements self::Base2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
- const synthetic constructor •() → self::_Base3&Object&Base2
+abstract class _Base3&Object&Base1 extends core::Object implements self::Base1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_Base3&Object&Base1
: super core::Object::•()
;
}
-class Base3 extends self::_Base3&Object&Base2 {
+abstract class _Base3&Object&Base1&Base2 extends self::_Base3&Object&Base1 implements self::Base2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_Base3&Object&Base1&Base2
+ : super self::_Base3&Object&Base1::•()
+ ;
+}
+class Base3 extends self::_Base3&Object&Base1&Base2 {
synthetic constructor •() → self::Base3
- : super self::_Base3&Object&Base2::•()
+ : super self::_Base3&Object&Base1&Base2::•()
;
}
class KeepInherited extends core::Object implements self::Base3 {
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index 9761651..e7bec95 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -1669,7 +1669,6 @@
"../../../tests/language/mixin/illegal_static_access_runtime_test.dart",
"../../../tests/language/mixin/illegal_super_use_runtime_test.dart",
"../../../tests/language/mixin/illegal_superclass_runtime_test.dart",
- "../../../tests/language/mixin/illegal_superclass_test.dart",
"../../../tests/language/mixin/implements2_test.dart",
"../../../tests/language/mixin/implements_test.dart",
"../../../tests/language/mixin/implicit_covariance_test.dart",
@@ -5116,7 +5115,6 @@
"../../../tests/language_2/mixin/illegal_static_access_runtime_test.dart",
"../../../tests/language_2/mixin/illegal_super_use_runtime_test.dart",
"../../../tests/language_2/mixin/illegal_superclass_runtime_test.dart",
- "../../../tests/language_2/mixin/illegal_superclass_test.dart",
"../../../tests/language_2/mixin/implements2_test.dart",
"../../../tests/language_2/mixin/implements_test.dart",
"../../../tests/language_2/mixin/implicit_covariance_test.dart",
diff --git a/runtime/vm/mixin_test.cc b/runtime/vm/mixin_test.cc
index e359730..ef361c2 100644
--- a/runtime/vm/mixin_test.cc
+++ b/runtime/vm/mixin_test.cc
@@ -17,7 +17,7 @@
"class A {\n"
" _bar() => 42;\n"
"}\n"
- "class M extends A {\n"
+ "mixin M on A {\n"
" bar() => -1;\n"
"}\n"
"class B extends A {\n"
@@ -66,7 +66,7 @@
" foo() => 4;\n"
" _bar() => 42;\n"
"}\n"
- "class M extends A {\n"
+ "mixin M on A {\n"
" bar() => -1;\n"
"}\n"
"class B extends A {\n"
diff --git a/tests/language/mixin/illegal_superclass_test.dart b/tests/language/mixin/illegal_superclass_test.dart
index c1e1e0c..a1b5b8f 100644
--- a/tests/language/mixin/illegal_superclass_test.dart
+++ b/tests/language/mixin/illegal_superclass_test.dart
@@ -19,57 +19,87 @@
class C02 = S0 with M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C03 = S0 with M0, M1;
class C04 = S0 with M0, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C05 = S0 with M2, M0;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C06 = S0 with M1, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C07 = S0 with M2, M1;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C10 = S1 with M0;
class C11 = S1 with M1;
class C12 = S1 with M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C13 = S1 with M0, M1;
class C14 = S1 with M0, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C15 = S1 with M2, M0;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C16 = S1 with M1, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C17 = S1 with M2, M1;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C20 = S2 with M0;
class C21 = S2 with M1;
class C22 = S2 with M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C23 = S2 with M0, M1;
class C24 = S2 with M0, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C25 = S2 with M2, M0;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C26 = S2 with M1, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C27 = S2 with M2, M1;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D00 extends S0 with M0 {}
@@ -78,19 +108,29 @@
class D02 extends S0 with M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D03 extends S0 with M0, M1 {}
class D04 extends S0 with M0, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D05 extends S0 with M2, M0 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D06 extends S0 with M1, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D07 extends S0 with M2, M1 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D10 extends S1 with M0 {}
@@ -99,19 +139,29 @@
class D12 extends S1 with M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D13 extends S1 with M0, M1 {}
class D14 extends S1 with M0, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D15 extends S1 with M2, M0 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D16 extends S1 with M1, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D17 extends S1 with M2, M1 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D20 extends S2 with M0 {}
@@ -120,19 +170,29 @@
class D22 extends S2 with M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D23 extends S2 with M0, M1 {}
class D24 extends S2 with M0, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D25 extends S2 with M2, M0 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D26 extends S2 with M1, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D27 extends S2 with M2, M1 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
main() {
new C00();
diff --git a/tests/language_2/mixin/illegal_superclass_test.dart b/tests/language_2/mixin/illegal_superclass_test.dart
index 56427b5..9290955 100644
--- a/tests/language_2/mixin/illegal_superclass_test.dart
+++ b/tests/language_2/mixin/illegal_superclass_test.dart
@@ -21,57 +21,87 @@
class C02 = S0 with M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C03 = S0 with M0, M1;
class C04 = S0 with M0, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C05 = S0 with M2, M0;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C06 = S0 with M1, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C07 = S0 with M2, M1;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C10 = S1 with M0;
class C11 = S1 with M1;
class C12 = S1 with M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C13 = S1 with M0, M1;
class C14 = S1 with M0, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C15 = S1 with M2, M0;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C16 = S1 with M1, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C17 = S1 with M2, M1;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C20 = S2 with M0;
class C21 = S2 with M1;
class C22 = S2 with M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C23 = S2 with M0, M1;
class C24 = S2 with M0, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C25 = S2 with M2, M0;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C26 = S2 with M1, M2;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class C27 = S2 with M2, M1;
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D00 extends S0 with M0 {}
@@ -80,19 +110,29 @@
class D02 extends S0 with M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D03 extends S0 with M0, M1 {}
class D04 extends S0 with M0, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D05 extends S0 with M2, M0 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D06 extends S0 with M1, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D07 extends S0 with M2, M1 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D10 extends S1 with M0 {}
@@ -101,19 +141,29 @@
class D12 extends S1 with M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D13 extends S1 with M0, M1 {}
class D14 extends S1 with M0, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D15 extends S1 with M2, M0 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D16 extends S1 with M1, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D17 extends S1 with M2, M1 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D20 extends S2 with M0 {}
@@ -122,19 +172,29 @@
class D22 extends S2 with M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D23 extends S2 with M0, M1 {}
class D24 extends S2 with M0, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D25 extends S2 with M2, M0 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D26 extends S2 with M1, M2 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
class D27 extends S2 with M2, M1 { }
// ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
main() {
new C00();
diff --git a/third_party/.gitignore b/third_party/.gitignore
index 779e818c..9207a95 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -4,7 +4,6 @@
# except for our files in boringssl. The checkout is in boringssl/src.
!.gitignore
!pkg
-!pkg_tested
!/tcmalloc
!d8
!firefox_jsshell
diff --git a/third_party/pkg_tested/OWNERS b/third_party/pkg_tested/OWNERS
deleted file mode 100644
index e1e4bf0..0000000
--- a/third_party/pkg_tested/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# Test status file
-per-file pkg_tested.status=file:/tools/OWNERS_ENG
diff --git a/third_party/pkg_tested/pkg_tested.status b/third_party/pkg_tested/pkg_tested.status
deleted file mode 100644
index 5fb6028..0000000
--- a/third_party/pkg_tested/pkg_tested.status
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2014, 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.
-
-# Don't run any test-like files that show up in packages directories. It
-# shouldn't be necessary to run "pub install" in these packages, but if you do
-# it shouldn't break the tests.
-*/*/*/*/*/packages/*/*: Skip
-*/*/*/*/packages/*/*: Skip
-*/*/*/packages/*/*: Skip
-*/*/packages/*/*: Skip
-*/packages/*/*: Skip
-
-[ $runtime == vm ]
-http_io/test/http_cross_process_test: Skip # Fails with --no-preview-dart-2
-http_io/test/http_proxy_advanced_test: Pass, RuntimeError # flaky
-http_io/test/http_proxy_test: Pass, RuntimeError # flaky
-
-[ $browser ]
-dart_style/*: SkipByDesign
-pub/*: SkipByDesign
-
-[ $runtime == vm && $system == windows ]
-pub/test/run/app_can_read_from_stdin_test: Fail # Issue 19448
-pub/test/run/forwards_signal_posix_test: SkipByDesign
-
-[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $builder_tag == asan || $mode == debug) ]
-dart_style/test/command_line_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators.
-dart_style/test/formatter_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators.
-
-[ $compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk ]
-http_io/*: SkipByDesign
diff --git a/tools/VERSION b/tools/VERSION
index 8c03cac..04f9938 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 18
PATCH 0
-PRERELEASE 184
+PRERELEASE 185
PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index b202057..d0f40b6 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -7,7 +7,6 @@
".dart_tool/package_config.json",
"pkg/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"tools/",
"out/ReleaseX64/dart-sdk/",
"xcodebuild/ReleaseX64/dart-sdk/"
@@ -50,7 +49,6 @@
"third_party/babel/babel.min.js",
"third_party/d8/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"third_party/requirejs/",
"tools/",
"xcodebuild/ReleaseIA32/dart-sdk/",
@@ -87,7 +85,6 @@
"third_party/babel/babel.min.js",
"third_party/d8/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"third_party/requirejs/",
"tools/",
"xcodebuild/ReleaseIA32/dart-sdk/",
@@ -134,7 +131,6 @@
"tests/ffi_2/",
"third_party/d8/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"third_party/requirejs/",
"tools/",
"xcodebuild/ReleaseIA32/dart",
@@ -173,7 +169,6 @@
"tests/ffi/",
"third_party/d8/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"third_party/requirejs/",
"tools/",
"xcodebuild/ReleaseX64/dart",
@@ -212,7 +207,6 @@
"tests/ffi/",
"third_party/d8/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"third_party/requirejs/",
"tools/",
"xcodebuild/ReleaseX64/dart"
@@ -258,7 +252,6 @@
"tests/ffi_2/",
"third_party/d8/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"third_party/requirejs/",
"tools/",
"xcodebuild/ReleaseIA32/",
@@ -268,7 +261,6 @@
"runtime/tools/dartfuzz/",
"out/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"tools/sdks/dart-sdk/",
"pkg/_fe_analyzer_shared/",
"pkg/async_helper/",
@@ -299,7 +291,6 @@
"third_party/devtools/",
"third_party/webdriver/",
"third_party/pkg/",
- "third_party/pkg_tested/",
"tests/.dart_tool/package_config.json",
"tests/angular/",
"tests/co19/co19-analyzer.status",
@@ -3721,10 +3712,11 @@
]
},
{
- "name": "third_party pkg_tested unit tests",
+ "name": "third_party tested packages",
"arguments": [
"-nunittest-asserts-${mode}-${system}",
- "pkg_tested"
+ "dart_style",
+ "package_config"
]
},
{
@@ -3760,10 +3752,11 @@
]
},
{
- "name": "third_party pkg_tested unit tests",
+ "name": "third_party tested packages",
"arguments": [
"-nunittest-asserts-${mode}-${system}-arm64",
- "pkg_tested"
+ "dart_style",
+ "package_config"
]
},
{
@@ -3800,10 +3793,11 @@
]
},
{
- "name": "third_party pkg_tested unit tests",
+ "name": "third_party tested packages",
"arguments": [
"-nunittest-asserts-${mode}-${system}",
- "pkg_tested"
+ "dart_style",
+ "package_config"
]
},
{
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 4d758ec..20258a0 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -152,7 +152,6 @@
sdk \
samples-dev/swarm \
third_party/pkg \
- third_party/pkg_tested \
.dart_tool/package_config.json \
pkg \
benchmarks \
@@ -300,7 +299,6 @@
sdk \
samples-dev/swarm \
third_party/pkg \
- third_party/pkg_tested \
.dart_tool/package_config.json \
pkg \
benchmarks \
diff --git a/tools/generate_package_config.dart b/tools/generate_package_config.dart
index 7771bf7..3c7de74 100644
--- a/tools/generate_package_config.dart
+++ b/tools/generate_package_config.dart
@@ -17,7 +17,6 @@
var packageDirs = [
...listSubdirectories(platform('pkg')),
...listSubdirectories(platform('third_party/pkg')),
- ...listSubdirectories(platform('third_party/pkg_tested')),
platform('pkg/vm_service/test/test_package'),
platform(
'runtime/observatory_2/tests/service_2/observatory_test_package_2'),
@@ -105,8 +104,7 @@
'governed by a BSD-style license that can be found in the LICENSE file.',
],
'comment': [
- 'Package configuration for all packages in pkg/, third_party/pkg/, and',
- 'third_party/pkg_tested/',
+ 'Package configuration for all packages in pkg/ and third_party/pkg/',
],
},
);
diff --git a/tools/package_deps/bin/package_deps.dart b/tools/package_deps/bin/package_deps.dart
index 3cf437c..20e2370 100644
--- a/tools/package_deps/bin/package_deps.dart
+++ b/tools/package_deps/bin/package_deps.dart
@@ -69,10 +69,9 @@
print('SDK DEPS');
print('');
- List<String> deps = [...sdkDeps.pkgs, ...sdkDeps.testedPkgs]..sort();
+ List<String> deps = [...sdkDeps.pkgs]..sort();
for (var pkg in deps) {
- final tested = sdkDeps.testedPkgs.contains(pkg);
- print('package:$pkg${tested ? ' [tested]' : ''}');
+ print('package:$pkg');
}
// TODO(devoncarew): Find unused entries in the DEPS file.
@@ -421,7 +420,6 @@
final File file;
List<String> pkgs = [];
- List<String> testedPkgs = [];
final Map<String, ResolvedDep> _resolvedPackageVersions = {};
@@ -440,22 +438,15 @@
// Var("dart_root") + "/third_party/pkg/dart2js_info":
final pkgRegExp = RegExp(r'"/third_party/pkg/(\S+)"');
- // Var("dart_root") + "/third_party/pkg_tested/dart_style":
- final testedPkgRegExp = RegExp(r'"/third_party/pkg_tested/(\S+)"');
-
for (var line in file.readAsLinesSync()) {
var pkgDep = pkgRegExp.firstMatch(line);
- var testedPkgDep = testedPkgRegExp.firstMatch(line);
if (pkgDep != null) {
pkgs.add(pkgDep.group(1)!);
- } else if (testedPkgDep != null) {
- testedPkgs.add(testedPkgDep.group(1)!);
}
}
pkgs.sort();
- testedPkgs.sort();
}
void _parseRepoPackageVersions() {
@@ -464,7 +455,6 @@
_findPackages(Directory(path.join('third_party', 'pkg')));
_findPackages(
Directory(path.join('third_party', 'pkg', 'file', 'packages')));
- _findPackages(Directory(path.join('third_party', 'pkg_tested')));
if (verbose) {
print('Package versions in the SDK:');
diff --git a/tools/rev_sdk_deps.dart b/tools/rev_sdk_deps.dart
index c9cbb5e..6897ae2 100644
--- a/tools/rev_sdk_deps.dart
+++ b/tools/rev_sdk_deps.dart
@@ -114,8 +114,7 @@
rev: (entry.value as Map)['rev'],
);
}).where((PackageDependency deps) {
- return deps.entry.startsWith('sdk/third_party/pkg/') ||
- deps.entry.startsWith('sdk/third_party/pkg_tested/');
+ return deps.entry.startsWith('sdk/third_party/pkg/');
}).where((PackageDependency deps) {
return !pinned.contains(deps.name);
}).toList();