Version 3.9.0-179.0.dev
Merge 2b5b551cfbcea199714d0b46c5edd4c2cd52e644 into dev
diff --git a/DEPS b/DEPS
index 5bcbc1f..1e735dc 100644
--- a/DEPS
+++ b/DEPS
@@ -129,7 +129,7 @@
### /third_party/pkg dependencies
# 'tools/rev_sdk_deps.dart' will rev pkg dependencies to their latest; put an
# EOL comment after a dependency to instead pin at the current revision.
- "ai_rev": "93a9191b6eed79d24fc5d3ec9b514f71c888fc41",
+ "ai_rev": "47fa2fcf476a905b316282d9351e4ed063755ead",
"core_rev": "635dfa32c261ba078438b74de397f2207904ca78", # https://github.com/dart-lang/core/pull/734
"dartdoc_rev": "8e6a95c4aba8def4ef01ccc600b3a3cfb8f3cb9e",
"ecosystem_rev": "815d4ba2e7d11f8695a26f6cbe1262e3b8ff8d0d",
diff --git a/pkg/_fe_analyzer_shared/analysis_options.yaml b/pkg/_fe_analyzer_shared/analysis_options.yaml
index 8579d9b..aab7f10 100644
--- a/pkg/_fe_analyzer_shared/analysis_options.yaml
+++ b/pkg/_fe_analyzer_shared/analysis_options.yaml
@@ -10,6 +10,7 @@
- annotate_overrides
- collection_methods_unrelated_type
- curly_braces_in_flow_control_structures
+ - discarded_futures
- prefer_adjacent_string_concatenation
- unawaited_futures
- recursive_getters
diff --git a/pkg/analyzer/analysis_options.yaml b/pkg/analyzer/analysis_options.yaml
index 4b9db4e..324647e 100644
--- a/pkg/analyzer/analysis_options.yaml
+++ b/pkg/analyzer/analysis_options.yaml
@@ -53,6 +53,7 @@
- avoid_dynamic_calls
- avoid_redundant_argument_values
- avoid_unused_constructor_parameters
+ - discarded_futures
- flutter_style_todos
- unawaited_futures
- unnecessary_breaks
diff --git a/pkg/analyzer/lib/file_system/memory_file_system.dart b/pkg/analyzer/lib/file_system/memory_file_system.dart
index d2cb846..017b01a 100644
--- a/pkg/analyzer/lib/file_system/memory_file_system.dart
+++ b/pkg/analyzer/lib/file_system/memory_file_system.dart
@@ -631,12 +631,14 @@
void setupWatcher() {
var watchers = provider._pathToWatchers[path] ??= [];
watchers.add(streamController);
- streamController.done.then((_) {
- watchers.remove(streamController);
- if (watchers.isEmpty) {
- provider._pathToWatchers.remove(path);
- }
- });
+ unawaited(
+ streamController.done.then((_) {
+ watchers.remove(streamController);
+ if (watchers.isEmpty) {
+ provider._pathToWatchers.remove(path);
+ }
+ }),
+ );
ready.complete();
if (provider.emitPathNotFoundExceptionsForPaths.contains(path)) {
streamController.addError(
diff --git a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
index bf6a744..9d84321 100644
--- a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.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 'dart:async';
+
import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/dart/analysis/declared_variables.dart';
import 'package:analyzer/file_system/file_system.dart';
@@ -70,7 +72,7 @@
if (scheduler == null) {
scheduler = AnalysisDriverScheduler(performanceLog);
if (drainStreams) {
- scheduler.events.drain<void>();
+ unawaited(scheduler.events.drain<void>());
}
scheduler.start();
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index 3d1d6af..338d08d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.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 'dart:async';
+
import 'package:analyzer/dart/analysis/context_root.dart';
import 'package:analyzer/dart/analysis/declared_variables.dart';
import 'package:analyzer/file_system/file_system.dart';
@@ -179,7 +181,7 @@
// AnalysisDriver reports results into streams.
// We need to drain these streams to avoid memory leak.
if (drainStreams) {
- driver.exceptions.drain<void>();
+ unawaited(driver.exceptions.drain<void>());
}
return analysisContext;
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 086b37d..dfbf27c 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -2559,7 +2559,7 @@
throw StateError('The scheduler has already been started.');
}
_started = true;
- _run();
+ unawaited(_run());
}
/// Return a future that will be completed the next time the status is idle.
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart b/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
index 16227d9..a634753 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'dart:async';
import 'dart:io';
import 'dart:isolate';
import 'dart:typed_data';
@@ -37,7 +38,7 @@
EvictingFileByteStore(this._cachePath, this._maxSizeBytes)
: _fileByteStore = FileByteStore(_cachePath) {
- _requestCacheCleanUp();
+ unawaited(_requestCacheCleanUp());
}
@override
@@ -49,7 +50,7 @@
// Update the current size.
_bytesWrittenSinceCleanup += bytes.length;
if (_bytesWrittenSinceCleanup > _maxSizeBytes ~/ 8) {
- _requestCacheCleanUp();
+ unawaited(_requestCacheCleanUp());
}
return bytes;
}
@@ -300,12 +301,14 @@
void _run(Future Function() fn) {
_available--;
- fn().whenComplete(() {
- _available++;
+ unawaited(
+ fn().whenComplete(() {
+ _available++;
- if (waiting.isNotEmpty) {
- _run(waiting.removeAt(0));
- }
- });
+ if (waiting.isNotEmpty) {
+ _run(waiting.removeAt(0));
+ }
+ }),
+ );
}
}
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index d32077f..8459e0a 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -12125,7 +12125,7 @@
/// Description for a single property in the node implementation.
///
-/// Most of these description refer to properties of the public interface,
+/// Most of these descriptions refer to properties of the public interface,
/// e.g. `Foo` in `class FooImpl extends BarImpl implements Baz, Foo`.
class GenerateNodeProperty {
final String name;
@@ -12146,12 +12146,23 @@
/// Obviously, these are always paired with [isSuper].
final bool superNullAssertOverride;
- /// Sometimes we use [Token.lexicallyFirst], and want to describe which
- /// group of tokens to use.
+ /// If the parser can recover from tokens in a group of keyword tokens
+ /// being in wrong order, each keyword's property in the group should be
+ /// marked with the same non-null value for this field. The generated code
+ /// for [AstNode.beginToken] or
+ /// [AnnotatedNode.firstTokenAfterCommentAndMetadata] will use
+ /// [Token.lexicallyFirst] to identify which keyword in the group appears
+ /// first.
+ ///
+ /// Only meaningful when applied to token properties; all properties with
+ /// the same [tokenGroupId] should appear consecutively in the
+ /// `childEntitiesOrder` list.
final int? tokenGroupId;
- /// If the property does not exist in the public interface, we still need
- /// to know its type.
+ /// The type of the property.
+ ///
+ /// If the property is declared in the public API, this doesn't need to be
+ /// specified (because it can be inferred from the public API declaration).
final Type? type;
const GenerateNodeProperty(
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 7040b1b..542b443 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -4489,6 +4489,7 @@
@override
List<FieldElementImpl2> get fields {
+ globalResultRequirements?.record_instanceElement_fields(element: this);
_readMembers();
return firstFragment.fields.map((e) => e.asElement2).toList();
}
@@ -4502,6 +4503,7 @@
@override
List<GetterElementImpl> get getters {
+ globalResultRequirements?.record_instanceElement_getters(element: this);
_readMembers();
return firstFragment.getters.map((e) => e.element).toList();
}
@@ -4557,6 +4559,7 @@
@override
List<SetterElementImpl> get setters {
+ globalResultRequirements?.record_instanceElement_setters(element: this);
_readMembers();
return firstFragment.setters.map((e) => e.element).toList();
}
@@ -4586,7 +4589,15 @@
name: name,
);
- return fields.firstWhereOrNull((e) => e.name3 == name);
+ return globalResultRequirements.withoutRecording(
+ reason: r'''
+The result depends only on the requested field, which we have already
+recorded above.
+''',
+ operation: () {
+ return fields.firstWhereOrNull((e) => e.name3 == name);
+ },
+ );
}
@Deprecated('Use getField instead')
@@ -4601,7 +4612,15 @@
name: name,
);
- return getters.firstWhereOrNull((e) => e.name3 == name);
+ return globalResultRequirements.withoutRecording(
+ reason: r'''
+The result depends only on the requested getter, which we have already
+recorded above.
+''',
+ operation: () {
+ return getters.firstWhereOrNull((e) => e.name3 == name);
+ },
+ );
}
@Deprecated('Use getGetter instead')
@@ -4639,7 +4658,15 @@
name: name,
);
- return setters.firstWhereOrNull((e) => e.name3 == name);
+ return globalResultRequirements.withoutRecording(
+ reason: r'''
+The result depends only on the requested setter, which we have already
+recorded above.
+''',
+ operation: () {
+ return setters.firstWhereOrNull((e) => e.name3 == name);
+ },
+ );
}
@Deprecated('Use getSetter instead')
diff --git a/pkg/analyzer/lib/src/fine/requirement_failure.dart b/pkg/analyzer/lib/src/fine/requirement_failure.dart
index dc457ec..1416fce 100644
--- a/pkg/analyzer/lib/src/fine/requirement_failure.dart
+++ b/pkg/analyzer/lib/src/fine/requirement_failure.dart
@@ -44,6 +44,22 @@
ExportLibraryMissing({required this.uri});
}
+class InstanceChildrenIdsMismatch extends RequirementFailure {
+ final Uri libraryUri;
+ final LookupName instanceName;
+ final String childrenPropertyName;
+ final ManifestItemIdList expectedIds;
+ final ManifestItemIdList actualIds;
+
+ InstanceChildrenIdsMismatch({
+ required this.libraryUri,
+ required this.instanceName,
+ required this.childrenPropertyName,
+ required this.expectedIds,
+ required this.actualIds,
+ });
+}
+
class InstanceFieldIdMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
@@ -76,20 +92,6 @@
});
}
-class InstanceMethodIdsMismatch extends RequirementFailure {
- final Uri libraryUri;
- final LookupName interfaceName;
- final ManifestItemIdList expectedIds;
- final ManifestItemIdList actualIds;
-
- InstanceMethodIdsMismatch({
- required this.libraryUri,
- required this.interfaceName,
- required this.expectedIds,
- required this.actualIds,
- });
-}
-
class InterfaceConstructorIdMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
diff --git a/pkg/analyzer/lib/src/fine/requirements.dart b/pkg/analyzer/lib/src/fine/requirements.dart
index 3015341..5bd1325 100644
--- a/pkg/analyzer/lib/src/fine/requirements.dart
+++ b/pkg/analyzer/lib/src/fine/requirements.dart
@@ -202,6 +202,9 @@
final Map<LookupName, ManifestItemId?> requestedSetters;
final Map<LookupName, ManifestItemId?> requestedMethods;
+ ManifestItemIdList? allDeclaredFields;
+ ManifestItemIdList? allDeclaredGetters;
+ ManifestItemIdList? allDeclaredSetters;
ManifestItemIdList? allDeclaredMethods;
InstanceItemRequirements({
@@ -209,6 +212,9 @@
required this.requestedGetters,
required this.requestedSetters,
required this.requestedMethods,
+ required this.allDeclaredFields,
+ required this.allDeclaredGetters,
+ required this.allDeclaredSetters,
required this.allDeclaredMethods,
});
@@ -218,6 +224,9 @@
requestedGetters: {},
requestedSetters: {},
requestedMethods: {},
+ allDeclaredFields: null,
+ allDeclaredGetters: null,
+ allDeclaredSetters: null,
allDeclaredMethods: null,
);
}
@@ -228,6 +237,9 @@
requestedGetters: reader.readNameToIdMap(),
requestedSetters: reader.readNameToIdMap(),
requestedMethods: reader.readNameToIdMap(),
+ allDeclaredFields: ManifestItemIdList.readOptional(reader),
+ allDeclaredGetters: ManifestItemIdList.readOptional(reader),
+ allDeclaredSetters: ManifestItemIdList.readOptional(reader),
allDeclaredMethods: ManifestItemIdList.readOptional(reader),
);
}
@@ -237,6 +249,9 @@
sink.writeNameToIdMap(requestedGetters);
sink.writeNameToIdMap(requestedSetters);
sink.writeNameToIdMap(requestedMethods);
+ allDeclaredFields.writeOptional(sink);
+ allDeclaredGetters.writeOptional(sink);
+ allDeclaredSetters.writeOptional(sink);
allDeclaredMethods.writeOptional(sink);
}
}
@@ -510,13 +525,56 @@
}
}
+ if (requirements.allDeclaredFields case var required?) {
+ var actualItems = instanceItem.declaredFields.values;
+ var actualIds = actualItems.map((item) => item.id);
+ if (!required.equalToIterable(actualIds)) {
+ return InstanceChildrenIdsMismatch(
+ libraryUri: libraryUri,
+ instanceName: instanceName,
+ childrenPropertyName: 'fields',
+ expectedIds: required,
+ actualIds: ManifestItemIdList(actualIds.toList()),
+ );
+ }
+ }
+
+ if (requirements.allDeclaredGetters case var required?) {
+ var actualItems = instanceItem.declaredGetters.values;
+ var actualIds = actualItems.map((item) => item.id);
+ if (!required.equalToIterable(actualIds)) {
+ return InstanceChildrenIdsMismatch(
+ libraryUri: libraryUri,
+ instanceName: instanceName,
+ childrenPropertyName: 'getters',
+ expectedIds: required,
+ actualIds: ManifestItemIdList(actualIds.toList()),
+ );
+ }
+ }
+
+ if (requirements.allDeclaredSetters case var required?) {
+ var actualItems = instanceItem.declaredSetters.values;
+ var actualIds = actualItems.map((item) => item.id);
+ if (!required.equalToIterable(actualIds)) {
+ return InstanceChildrenIdsMismatch(
+ libraryUri: libraryUri,
+ instanceName: instanceName,
+ childrenPropertyName: 'setters',
+ expectedIds: required,
+ actualIds: ManifestItemIdList(actualIds.toList()),
+ );
+ }
+ }
+
if (requirements.allDeclaredMethods case var required?) {
var actualItems = instanceItem.declaredMethods.values;
var actualIds = actualItems.map((item) => item.id);
if (!required.equalToIterable(actualIds)) {
- return InstanceMethodIdsMismatch(
+ return InstanceChildrenIdsMismatch(
libraryUri: libraryUri,
- interfaceName: instanceName,
+ instanceName: instanceName,
+ childrenPropertyName: 'methods',
expectedIds: required,
actualIds: ManifestItemIdList(actualIds.toList()),
);
@@ -641,6 +699,24 @@
}
}
+ void record_instanceElement_fields({required InstanceElementImpl2 element}) {
+ if (_recordingLockLevel != 0) {
+ return;
+ }
+
+ var itemRequirements = _getInstanceItem(element);
+ if (itemRequirements == null) {
+ return;
+ }
+
+ var item = itemRequirements.item;
+ var requirements = itemRequirements.requirements;
+
+ requirements.allDeclaredFields ??= ManifestItemIdList(
+ item.declaredFields.values.map((item) => item.id).toList(),
+ );
+ }
+
void record_instanceElement_getField({
required InstanceElementImpl2 element,
required String name,
@@ -710,6 +786,24 @@
requirements.requestedSetters[methodName] = methodId;
}
+ void record_instanceElement_getters({required InstanceElementImpl2 element}) {
+ if (_recordingLockLevel != 0) {
+ return;
+ }
+
+ var itemRequirements = _getInstanceItem(element);
+ if (itemRequirements == null) {
+ return;
+ }
+
+ var item = itemRequirements.item;
+ var requirements = itemRequirements.requirements;
+
+ requirements.allDeclaredGetters ??= ManifestItemIdList(
+ item.declaredGetters.values.map((item) => item.id).toList(),
+ );
+ }
+
void record_instanceElement_methods({required InstanceElementImpl2 element}) {
if (_recordingLockLevel != 0) {
return;
@@ -728,6 +822,24 @@
);
}
+ void record_instanceElement_setters({required InstanceElementImpl2 element}) {
+ if (_recordingLockLevel != 0) {
+ return;
+ }
+
+ var itemRequirements = _getInstanceItem(element);
+ if (itemRequirements == null) {
+ return;
+ }
+
+ var item = itemRequirements.item;
+ var requirements = itemRequirements.requirements;
+
+ requirements.allDeclaredSetters ??= ManifestItemIdList(
+ item.declaredSetters.values.map((item) => item.id).toList(),
+ );
+ }
+
void record_interface_all({required InterfaceElementImpl2 element}) {
var itemRequirements = _getInterfaceItem(element);
if (itemRequirements == null) {
diff --git a/pkg/analyzer/lib/src/workspace/blaze_watcher.dart b/pkg/analyzer/lib/src/workspace/blaze_watcher.dart
index be84a0f..442f140 100644
--- a/pkg/analyzer/lib/src/workspace/blaze_watcher.dart
+++ b/pkg/analyzer/lib/src/workspace/blaze_watcher.dart
@@ -317,10 +317,10 @@
_toIsolatePort.send(BlazeWatcherShutdownIsolate());
}
if (_isolateIsStarting) {
- _fromIsolateSubscription.cancel();
+ unawaited(_fromIsolateSubscription.cancel());
_fromIsolatePort.close();
}
- _events.close();
+ unawaited(_events.close());
}
void startWatching(String workspace, BlazeSearchInfo info) {
@@ -363,11 +363,13 @@
void _startIsolateIfNeeded() {
if (_isolateIsStarting) return;
_isolateIsStarting = true;
- _startIsolateImpl();
- _isolateHasStarted.future.then((_) {
- _buffer.forEach(_toIsolatePort.send);
- _buffer.clear();
- });
+ unawaited(_startIsolateImpl());
+ unawaited(
+ _isolateHasStarted.future.then((_) {
+ _buffer.forEach(_toIsolatePort.send);
+ _buffer.clear();
+ }),
+ );
}
Future<void> _startIsolateImpl() async {
diff --git a/pkg/analyzer/test/file_system/physical_resource_provider_watch_test.dart b/pkg/analyzer/test/file_system/physical_resource_provider_watch_test.dart
index 24decfb..31e21b7 100644
--- a/pkg/analyzer/test/file_system/physical_resource_provider_watch_test.dart
+++ b/pkg/analyzer/test/file_system/physical_resource_provider_watch_test.dart
@@ -154,7 +154,7 @@
var subscription = file.watch().changes.listen(changesReceived.add);
// Delay running the rest of the test to allow file.changes propagate.
return _delayed(() => test(changesReceived)).whenComplete(() {
- subscription.cancel();
+ unawaited(subscription.cancel());
});
});
}
@@ -177,7 +177,7 @@
// won't be able to reliably distinguish new files from modified
// ones.
return _delayed(() => test(changesReceived)).whenComplete(() {
- subscription.cancel();
+ unawaited(subscription.cancel());
});
});
}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 08782e8..1b8bb5e 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -7941,9 +7941,10 @@
[operation] readLibraryCycleBundle
package:test/test.dart
[operation] getErrorsCannotReuse
- instanceMethodIdsMismatch
+ instanceChildrenIdsMismatch
libraryUri: package:test/a.dart
- interfaceName: A
+ instanceName: A
+ childrenPropertyName: methods
expectedIds: #M1
actualIds: #M1 #M3
[operation] analyzeFile
@@ -15389,6 +15390,538 @@
);
}
+ test_dependency_instanceElement_fields_add() async {
+ _ManualRequirements.install((state) {
+ var A = state.singleUnit.scopeInstanceElement('A');
+ A.fields;
+ });
+
+ await _runChangeScenarioTA(
+ initialA: r'''
+class A {
+ static final int foo = 0;
+}
+''',
+ testCode: r'''
+import 'a.dart';
+''',
+ operation: _FineOperationTestFileGetErrors(),
+ expectedInitialEvents: r'''
+[status] working
+[operation] linkLibraryCycle SDK
+[future] getErrors T1
+ ErrorsResult #0
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ foo: #M1
+ declaredGetters
+ foo: #M2
+ interface: #M3
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[operation] linkLibraryCycle
+ package:test/test.dart
+ requirements
+[operation] analyzeFile
+ file: /home/test/lib/test.dart
+ library: /home/test/lib/test.dart
+[stream]
+ ResolvedUnitResult #1
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: exists isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredFields: #M1
+[status] idle
+''',
+ updatedA: r'''
+class A {
+ static final int foo = 0;
+ static final int bar = 0;
+}
+''',
+ expectedUpdatedEvents: r'''
+[status] working
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ bar: #M5
+ foo: #M1
+ declaredGetters
+ bar: #M6
+ foo: #M2
+ interface: #M3
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[future] getErrors T2
+ ErrorsResult #2
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] readLibraryCycleBundle
+ package:test/test.dart
+[operation] getErrorsCannotReuse
+ instanceChildrenIdsMismatch
+ libraryUri: package:test/a.dart
+ instanceName: A
+ childrenPropertyName: fields
+ expectedIds: #M1
+ actualIds: #M1 #M5
+[operation] analyzeFile
+ file: /home/test/lib/test.dart
+ library: /home/test/lib/test.dart
+[stream]
+ ResolvedUnitResult #3
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: exists isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredFields: #M1 #M5
+[status] idle
+''',
+ );
+ }
+
+ test_dependency_instanceElement_getters_add() async {
+ _ManualRequirements.install((state) {
+ var A = state.singleUnit.scopeInstanceElement('A');
+ A.getters;
+ });
+
+ await _runChangeScenarioTA(
+ initialA: r'''
+class A {
+ int get foo => 0;
+}
+''',
+ testCode: r'''
+import 'a.dart';
+''',
+ operation: _FineOperationTestFileGetErrors(),
+ expectedInitialEvents: r'''
+[status] working
+[operation] linkLibraryCycle SDK
+[future] getErrors T1
+ ErrorsResult #0
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ foo: #M1
+ declaredGetters
+ foo: #M2
+ interface: #M3
+ map
+ foo: #M2
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[operation] linkLibraryCycle
+ package:test/test.dart
+ requirements
+[operation] analyzeFile
+ file: /home/test/lib/test.dart
+ library: /home/test/lib/test.dart
+[stream]
+ ResolvedUnitResult #1
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: exists isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredGetters: #M2
+[status] idle
+''',
+ updatedA: r'''
+class A {
+ int get foo => 0;
+ int get bar => 0;
+}
+''',
+ expectedUpdatedEvents: r'''
+[status] working
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ bar: #M5
+ foo: #M1
+ declaredGetters
+ bar: #M6
+ foo: #M2
+ interface: #M7
+ map
+ bar: #M6
+ foo: #M2
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[future] getErrors T2
+ ErrorsResult #2
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] readLibraryCycleBundle
+ package:test/test.dart
+[operation] getErrorsCannotReuse
+ instanceChildrenIdsMismatch
+ libraryUri: package:test/a.dart
+ instanceName: A
+ childrenPropertyName: getters
+ expectedIds: #M2
+ actualIds: #M2 #M6
+[operation] analyzeFile
+ file: /home/test/lib/test.dart
+ library: /home/test/lib/test.dart
+[stream]
+ ResolvedUnitResult #3
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: exists isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredGetters: #M2 #M6
+[status] idle
+''',
+ );
+ }
+
+ test_dependency_instanceElement_methods_add() async {
+ _ManualRequirements.install((state) {
+ var A = state.singleUnit.scopeInstanceElement('A');
+ A.methods;
+ });
+
+ await _runChangeScenarioTA(
+ initialA: r'''
+class A {
+ void foo() {}
+}
+''',
+ testCode: r'''
+import 'a.dart';
+''',
+ operation: _FineOperationTestFileGetErrors(),
+ expectedInitialEvents: r'''
+[status] working
+[operation] linkLibraryCycle SDK
+[future] getErrors T1
+ ErrorsResult #0
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredMethods
+ foo: #M1
+ interface: #M2
+ map
+ foo: #M1
+ requirements
+[operation] linkLibraryCycle
+ package:test/test.dart
+ requirements
+[operation] analyzeFile
+ file: /home/test/lib/test.dart
+ library: /home/test/lib/test.dart
+[stream]
+ ResolvedUnitResult #1
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: exists isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredMethods: #M1
+[status] idle
+''',
+ updatedA: r'''
+class A {
+ void foo() {}
+ void bar() {}
+}
+''',
+ expectedUpdatedEvents: r'''
+[status] working
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredMethods
+ bar: #M3
+ foo: #M1
+ interface: #M4
+ map
+ bar: #M3
+ foo: #M1
+ requirements
+[future] getErrors T2
+ ErrorsResult #2
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] readLibraryCycleBundle
+ package:test/test.dart
+[operation] getErrorsCannotReuse
+ instanceChildrenIdsMismatch
+ libraryUri: package:test/a.dart
+ instanceName: A
+ childrenPropertyName: methods
+ expectedIds: #M1
+ actualIds: #M1 #M3
+[operation] analyzeFile
+ file: /home/test/lib/test.dart
+ library: /home/test/lib/test.dart
+[stream]
+ ResolvedUnitResult #3
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: exists isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredMethods: #M1 #M3
+[status] idle
+''',
+ );
+ }
+
+ test_dependency_instanceElement_setters_add() async {
+ _ManualRequirements.install((state) {
+ var A = state.singleUnit.scopeInstanceElement('A');
+ A.setters;
+ });
+
+ await _runChangeScenarioTA(
+ initialA: r'''
+class A {
+ set foo(int _) {}
+}
+''',
+ testCode: r'''
+import 'a.dart';
+''',
+ operation: _FineOperationTestFileGetErrors(),
+ expectedInitialEvents: r'''
+[status] working
+[operation] linkLibraryCycle SDK
+[future] getErrors T1
+ ErrorsResult #0
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ foo: #M1
+ declaredSetters
+ foo=: #M2
+ interface: #M3
+ map
+ foo=: #M2
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[operation] linkLibraryCycle
+ package:test/test.dart
+ requirements
+[operation] analyzeFile
+ file: /home/test/lib/test.dart
+ library: /home/test/lib/test.dart
+[stream]
+ ResolvedUnitResult #1
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: exists isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredSetters: #M2
+[status] idle
+''',
+ updatedA: r'''
+class A {
+ set foo(int _) {}
+ set bar(int _) {}
+}
+''',
+ expectedUpdatedEvents: r'''
+[status] working
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ bar: #M5
+ foo: #M1
+ declaredSetters
+ bar=: #M6
+ foo=: #M2
+ interface: #M7
+ map
+ bar=: #M6
+ foo=: #M2
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[future] getErrors T2
+ ErrorsResult #2
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] readLibraryCycleBundle
+ package:test/test.dart
+[operation] getErrorsCannotReuse
+ instanceChildrenIdsMismatch
+ libraryUri: package:test/a.dart
+ instanceName: A
+ childrenPropertyName: setters
+ expectedIds: #M2
+ actualIds: #M2 #M6
+[operation] analyzeFile
+ file: /home/test/lib/test.dart
+ library: /home/test/lib/test.dart
+[stream]
+ ResolvedUnitResult #3
+ path: /home/test/lib/test.dart
+ uri: package:test/test.dart
+ flags: exists isLibrary
+ errors
+ 7 +8 UNUSED_IMPORT
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredSetters: #M2 #M6
+[status] idle
+''',
+ );
+ }
+
test_dependency_mixin_getter_inherited_fromGeneric_on_changeTypeArgument() async {
configuration.withStreamResolvedUnitResults = false;
await _runChangeScenarioTA(
@@ -45471,6 +46004,59 @@
);
}
+ test_req_instanceElement_fields() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+class A {
+ static final int foo = 0;
+}
+''');
+
+ newFile(testFile.path, r'''
+import 'a.dart';
+''');
+
+ _ManualRequirements.install((state) {
+ var A = state.singleUnit.scopeInstanceElement('A');
+ A.fields;
+ });
+
+ await _runManualRequirementsRecording(
+ expectedEvents: r'''
+[status] working
+[operation] linkLibraryCycle SDK
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ foo: #M1
+ declaredGetters
+ foo: #M2
+ interface: #M3
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[operation] linkLibraryCycle
+ package:test/test.dart
+ requirements
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredFields: #M1
+[status] idle
+''',
+ );
+ }
+
test_req_instanceElement_getField() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {
@@ -45851,6 +46437,61 @@
);
}
+ test_req_instanceElement_getters() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+class A {
+ int get foo => 0;
+}
+''');
+
+ newFile(testFile.path, r'''
+import 'a.dart';
+''');
+
+ _ManualRequirements.install((state) {
+ var A = state.singleUnit.scopeInstanceElement('A');
+ A.getters;
+ });
+
+ await _runManualRequirementsRecording(
+ expectedEvents: r'''
+[status] working
+[operation] linkLibraryCycle SDK
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ foo: #M1
+ declaredGetters
+ foo: #M2
+ interface: #M3
+ map
+ foo: #M2
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[operation] linkLibraryCycle
+ package:test/test.dart
+ requirements
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredGetters: #M2
+[status] idle
+''',
+ );
+ }
+
test_req_instanceElement_methods() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {
@@ -46021,6 +46662,61 @@
);
}
+ test_req_instanceElement_setters() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+class A {
+ set foo(int _) {}
+}
+''');
+
+ newFile(testFile.path, r'''
+import 'a.dart';
+''');
+
+ _ManualRequirements.install((state) {
+ var A = state.singleUnit.scopeInstanceElement('A');
+ A.setters;
+ });
+
+ await _runManualRequirementsRecording(
+ expectedEvents: r'''
+[status] working
+[operation] linkLibraryCycle SDK
+[operation] linkLibraryCycle
+ package:test/a.dart
+ declaredClasses
+ A: #M0
+ declaredFields
+ foo: #M1
+ declaredSetters
+ foo=: #M2
+ interface: #M3
+ map
+ foo=: #M2
+ requirements
+ topLevels
+ dart:core
+ int: #M4
+[operation] linkLibraryCycle
+ package:test/test.dart
+ requirements
+[operation] analyzedLibrary
+ file: /home/test/lib/test.dart
+ requirements
+ topLevels
+ dart:core
+ A: <null>
+ package:test/a.dart
+ A: #M0
+ instances
+ package:test/a.dart
+ A
+ allDeclaredSetters: #M2
+[status] idle
+''',
+ );
+ }
+
test_req_interfaceElement_getConstructor_named() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {
diff --git a/pkg/analyzer/test/src/dart/analysis/result_printer.dart b/pkg/analyzer/test/src/dart/analysis/result_printer.dart
index 9a49e03..43c74b6 100644
--- a/pkg/analyzer/test/src/dart/analysis/result_printer.dart
+++ b/pkg/analyzer/test/src/dart/analysis/result_printer.dart
@@ -111,44 +111,59 @@
sink.writeElements('instances', libEntries, (libEntry) {
var interfaceEntries = libEntry.value.sorted;
sink.writeElements('${libEntry.key}', interfaceEntries, (instanceEntry) {
+ var instanceRequirements = instanceEntry.value;
sink.writelnWithIndent(instanceEntry.key.asString);
+
sink.withIndent(() {
- sink.writeElements(
+ void writeRequested(
+ String name,
+ Map<LookupName, ManifestItemId?> nameToIdMap,
+ ) {
+ sink.writeElements(name, nameToIdMap.sorted, _writeNamedId);
+ }
+
+ writeRequested(
'requestedFields',
- instanceEntry.value.requestedFields.sorted,
- _writeNamedId,
+ instanceRequirements.requestedFields,
);
- });
- sink.withIndent(() {
- sink.writeElements(
+ writeRequested(
'requestedGetters',
- instanceEntry.value.requestedGetters.sorted,
- _writeNamedId,
+ instanceRequirements.requestedGetters,
);
- });
- sink.withIndent(() {
- sink.writeElements(
+ writeRequested(
'requestedSetters',
- instanceEntry.value.requestedSetters.sorted,
- _writeNamedId,
+ instanceRequirements.requestedSetters,
);
- });
- sink.withIndent(() {
- sink.writeElements(
+ writeRequested(
'requestedMethods',
- instanceEntry.value.requestedMethods.sorted,
- _writeNamedId,
+ instanceRequirements.requestedMethods,
);
});
sink.withIndent(() {
- var idList = instanceEntry.value.allDeclaredMethods;
- if (idList != null) {
- if (idList.ids.isNotEmpty) {
+ void writeAllDeclared(String name, ManifestItemIdList? idList) {
+ if (idList != null && idList.ids.isNotEmpty) {
var idListStr = idList.asString(idProvider);
- sink.writelnWithIndent('allDeclaredMethods: $idListStr');
+ sink.writelnWithIndent('$name: $idListStr');
}
}
+
+ writeAllDeclared(
+ 'allDeclaredFields',
+ instanceRequirements.allDeclaredFields,
+ );
+ writeAllDeclared(
+ 'allDeclaredGetters',
+ instanceRequirements.allDeclaredGetters,
+ );
+ writeAllDeclared(
+ 'allDeclaredSetters',
+ instanceRequirements.allDeclaredSetters,
+ );
+ writeAllDeclared(
+ 'allDeclaredMethods',
+ instanceRequirements.allDeclaredMethods,
+ );
});
});
});
@@ -501,11 +516,12 @@
'expectedId': idProvider.manifestId(failure.expectedId),
'actualId': idProvider.manifestId(failure.actualId),
});
- case InstanceMethodIdsMismatch():
- sink.writelnWithIndent('instanceMethodIdsMismatch');
+ case InstanceChildrenIdsMismatch():
+ sink.writelnWithIndent('instanceChildrenIdsMismatch');
sink.writeProperties({
'libraryUri': failure.libraryUri,
- 'interfaceName': failure.interfaceName.asString,
+ 'instanceName': failure.instanceName.asString,
+ 'childrenPropertyName': failure.childrenPropertyName,
'expectedIds': failure.expectedIds.asString(idProvider),
'actualIds': failure.actualIds.asString(idProvider),
});
diff --git a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
index 829a59d..f131a08 100644
--- a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
+++ b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
@@ -1040,8 +1040,8 @@
''');
}
- test_errors_hasNullSuffix() {
- assertErrorsInCode(
+ Future<void> test_errors_hasNullSuffix() async {
+ await assertErrorsInCode(
r'''
String f(Map<int, String> a) {
return a[0];
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart
index 4849900..c6331e0 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart
@@ -15,8 +15,8 @@
@reflectiveTest
class IncludeFileNotFoundTest extends AbstractAnalysisOptionsTest {
- void test_notFound_existent_doubleQuoted() {
- assertErrorsInCode(
+ Future<void> test_notFound_existent_doubleQuoted() async {
+ await assertErrorsInCode(
'''
include: "./analysis_options.yaml"
''',
@@ -24,8 +24,8 @@
);
}
- void test_notFound_existent_notQuoted() {
- assertErrorsInCode(
+ Future<void> test_notFound_existent_notQuoted() async {
+ await assertErrorsInCode(
'''
include: ./analysis_options.yaml
''',
@@ -33,8 +33,8 @@
);
}
- void test_notFound_existent_singleQuoted() {
- assertErrorsInCode(
+ Future<void> test_notFound_existent_singleQuoted() async {
+ await assertErrorsInCode(
'''
include: './analysis_options.yaml'
''',
@@ -42,8 +42,8 @@
);
}
- void test_notFound_nonexistent_doubleQuoted() {
- assertErrorsInCode(
+ Future<void> test_notFound_nonexistent_doubleQuoted() async {
+ await assertErrorsInCode(
'''
# We don't depend on pedantic, but we should consider adding it.
include: "package:pedantic/analysis_options.yaml"
@@ -61,8 +61,8 @@
);
}
- void test_notFound_nonexistent_notQuoted() {
- assertErrorsInCode(
+ Future<void> test_notFound_nonexistent_notQuoted() async {
+ await assertErrorsInCode(
'''
# We don't depend on pedantic, but we should consider adding it.
include: package:pedantic/analysis_options.yaml
@@ -80,8 +80,8 @@
);
}
- void test_notFound_nonexistent_singleQuoted() {
- assertErrorsInCode(
+ Future<void> test_notFound_nonexistent_singleQuoted() async {
+ await assertErrorsInCode(
'''
# We don't depend on pedantic, but we should consider adding it.
include: 'package:pedantic/analysis_options.yaml'
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_warning_test.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_warning_test.dart
index 9d0d0a4..932ba9f 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_warning_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_warning_test.dart
@@ -15,12 +15,12 @@
@reflectiveTest
class IncludeFileWarningTest extends AbstractAnalysisOptionsTest {
- void test_fileWarning() {
+ Future<void> test_fileWarning() async {
newFile('/a.yaml', '''
analyzer:
something: bad
''');
- assertErrorsInCode(
+ await assertErrorsInCode(
'''
include: a.yaml
''',
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/recursive_include_file_test.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/recursive_include_file_test.dart
index 735e8fdc..51cff61 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/recursive_include_file_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/recursive_include_file_test.dart
@@ -15,8 +15,8 @@
@reflectiveTest
class RecursiveIncludeFileTest extends AbstractAnalysisOptionsTest {
- void test_itself() {
- assertErrorsInCode(
+ Future<void> test_itself() async {
+ await assertErrorsInCode(
'''
include: analysis_options.yaml
''',
@@ -33,8 +33,8 @@
);
}
- void test_itself_inList() {
- assertErrorsInCode(
+ Future<void> test_itself_inList() async {
+ await assertErrorsInCode(
'''
include:
- analysis_options.yaml
@@ -52,14 +52,14 @@
);
}
- void test_recursive() {
+ Future<void> test_recursive() async {
newFile('/a.yaml', '''
include: b.yaml
''');
newFile('/b.yaml', '''
include: analysis_options.yaml
''');
- assertErrorsInCode(
+ await assertErrorsInCode(
'''
include: a.yaml
''',
@@ -76,11 +76,11 @@
);
}
- void test_recursive_itself() {
+ Future<void> test_recursive_itself() async {
newFile('/a.yaml', '''
include: a.yaml
''');
- assertErrorsInCode(
+ await assertErrorsInCode(
'''
include: a.yaml
''',
@@ -98,7 +98,7 @@
);
}
- void test_recursive_listAtTop() {
+ Future<void> test_recursive_listAtTop() async {
newFile('/a.yaml', '''
include: b.yaml
''');
@@ -107,7 +107,7 @@
''');
newFile('/empty.yaml', '''
''');
- assertErrorsInCode(
+ await assertErrorsInCode(
'''
include:
- empty.yaml
@@ -126,7 +126,7 @@
);
}
- void test_recursive_listIncluded() {
+ Future<void> test_recursive_listIncluded() async {
newFile('/a.yaml', '''
include:
- empty.yaml
@@ -137,7 +137,7 @@
''');
newFile('/empty.yaml', '''
''');
- assertErrorsInCode(
+ await assertErrorsInCode(
'''
include: a.yaml
''',
@@ -154,14 +154,14 @@
);
}
- void test_recursive_notInBeginning() {
+ Future<void> test_recursive_notInBeginning() async {
newFile('/a.yaml', '''
include: b.yaml
''');
newFile('/b.yaml', '''
include: a.yaml
''');
- assertErrorsInCode(
+ await assertErrorsInCode(
'''
include: a.yaml
''',
diff --git a/pkg/analyzer/test/src/options/options_rule_validator_test.dart b/pkg/analyzer/test/src/options/options_rule_validator_test.dart
index dae7c8e..c8c76e3 100644
--- a/pkg/analyzer/test/src/options/options_rule_validator_test.dart
+++ b/pkg/analyzer/test/src/options/options_rule_validator_test.dart
@@ -46,26 +46,26 @@
@reflectiveTest
class OptionsRuleValidatorIncludedFileTest extends AbstractAnalysisOptionsTest
with OptionsRuleValidatorTestMixin {
- test_deprecated_rule_inInclude_ok() {
+ Future<void> test_deprecated_rule_inInclude_ok() async {
newFile('/included.yaml', '''
linter:
rules:
- deprecated_lint
''');
- assertErrorsInCode('''
+ await assertErrorsInCode('''
include: included.yaml
''', []);
}
- test_removed_rule_inInclude_ok() {
+ Future<void> test_removed_rule_inInclude_ok() async {
newFile('/included.yaml', '''
linter:
rules:
- removed_in_2_12_lint
''');
- assertErrorsInCode('''
+ await assertErrorsInCode('''
include: included.yaml
''', []);
}
diff --git a/pkg/analyzer_utilities/lib/testing/tree_string_sink.dart b/pkg/analyzer_utilities/lib/testing/tree_string_sink.dart
index 71d0bfd..5ef214d 100644
--- a/pkg/analyzer_utilities/lib/testing/tree_string_sink.dart
+++ b/pkg/analyzer_utilities/lib/testing/tree_string_sink.dart
@@ -37,7 +37,7 @@
}
}
- Future<void> writeFlags(Map<String, bool> flags) async {
+ void writeFlags(Map<String, bool> flags) {
if (flags.values.any((flag) => flag)) {
writeIndentedLine(() {
write('flags:');
diff --git a/pkg/dynamic_modules/test/data/apply_mixin/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/apply_mixin/dynamic_interface.yaml
index 5f8fe58..408d80d 100644
--- a/pkg/dynamic_modules/test/data/apply_mixin/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/apply_mixin/dynamic_interface.yaml
@@ -8,6 +8,7 @@
class: 'M'
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'M'
- library: 'shared/shared_old.dart'
diff --git a/pkg/dynamic_modules/test/data/closure_invocation/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/closure_invocation/dynamic_interface.yaml
index 170d41d..306d570 100644
--- a/pkg/dynamic_modules/test/data/closure_invocation/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/closure_invocation/dynamic_interface.yaml
@@ -2,4 +2,5 @@
# 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.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
diff --git a/pkg/dynamic_modules/test/data/closure_shapes/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/closure_shapes/dynamic_interface.yaml
index dd66d2c..306d570 100644
--- a/pkg/dynamic_modules/test/data/closure_shapes/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/closure_shapes/dynamic_interface.yaml
@@ -2,9 +2,5 @@
# 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.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
- - library: 'dart:core'
- class: ['int', 'num', 'Object']
- - library: 'dart:core'
- class: 'pragma'
- member: '_'
diff --git a/pkg/dynamic_modules/test/data/const_body/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/const_body/dynamic_interface.yaml
index af5bccc..d2c7a2e 100644
--- a/pkg/dynamic_modules/test/data/const_body/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/const_body/dynamic_interface.yaml
@@ -3,6 +3,7 @@
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'B'
member: ''
diff --git a/pkg/dynamic_modules/test/data/const_constructor/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/const_constructor/dynamic_interface.yaml
index 629e158..31bce6e 100644
--- a/pkg/dynamic_modules/test/data/const_constructor/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/const_constructor/dynamic_interface.yaml
@@ -3,4 +3,5 @@
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
diff --git a/pkg/dynamic_modules/test/data/const_mixin_class/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/const_mixin_class/dynamic_interface.yaml
index 43360b9..fc10e25 100644
--- a/pkg/dynamic_modules/test/data/const_mixin_class/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/const_mixin_class/dynamic_interface.yaml
@@ -3,5 +3,6 @@
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'Foo'
diff --git a/pkg/dynamic_modules/test/data/core_api/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/core_api/dynamic_interface.yaml
index 1d4541b..80c55a6 100644
--- a/pkg/dynamic_modules/test/data/core_api/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/core_api/dynamic_interface.yaml
@@ -2,6 +2,7 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'package:expect/expect.dart'
class: 'Expect'
member: 'equals'
diff --git a/pkg/dynamic_modules/test/data/duplicate_library/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/duplicate_library/dynamic_interface.yaml
index 669288a..f6b9d69 100644
--- a/pkg/dynamic_modules/test/data/duplicate_library/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/duplicate_library/dynamic_interface.yaml
@@ -2,3 +2,5 @@
# 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.
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/dyn_module_type_checks/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/dyn_module_type_checks/dynamic_interface.yaml
index 0f4eba1..d48fa10 100644
--- a/pkg/dynamic_modules/test/data/dyn_module_type_checks/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/dyn_module_type_checks/dynamic_interface.yaml
@@ -12,6 +12,7 @@
# TODO(sigmund): consider implying this for all extendable types.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'Base'
- library: 'shared/shared.dart'
diff --git a/pkg/dynamic_modules/test/data/enum/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/enum/dynamic_interface.yaml
index 06879fe..28673b6 100644
--- a/pkg/dynamic_modules/test/data/enum/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/enum/dynamic_interface.yaml
@@ -2,3 +2,5 @@
# 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.
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/extend_class/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/extend_class/dynamic_interface.yaml
index 97b226d..962d1c5 100644
--- a/pkg/dynamic_modules/test/data/extend_class/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/extend_class/dynamic_interface.yaml
@@ -12,6 +12,7 @@
# TODO(sigmund): consider implying this for all extendable types.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'Base'
member: ''
diff --git a/pkg/dynamic_modules/test/data/extend_class2/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/extend_class2/dynamic_interface.yaml
index 97b226d..962d1c5 100644
--- a/pkg/dynamic_modules/test/data/extend_class2/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/extend_class2/dynamic_interface.yaml
@@ -12,6 +12,7 @@
# TODO(sigmund): consider implying this for all extendable types.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'Base'
member: ''
diff --git a/pkg/dynamic_modules/test/data/extend_class_dyn_only/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/extend_class_dyn_only/dynamic_interface.yaml
index ee6e384..28673b6 100644
--- a/pkg/dynamic_modules/test/data/extend_class_dyn_only/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/extend_class_dyn_only/dynamic_interface.yaml
@@ -1,3 +1,6 @@
# Copyright (c) 2025, 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.
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/extend_class_generics/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/extend_class_generics/dynamic_interface.yaml
index 296804a..f6dd13a 100644
--- a/pkg/dynamic_modules/test/data/extend_class_generics/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/extend_class_generics/dynamic_interface.yaml
@@ -12,6 +12,7 @@
# TODO(sigmund): consider implying this for all extendable types.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'Base'
member: ''
diff --git a/pkg/dynamic_modules/test/data/extension_type/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/extension_type/dynamic_interface.yaml
index 629e158..31bce6e 100644
--- a/pkg/dynamic_modules/test/data/extension_type/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/extension_type/dynamic_interface.yaml
@@ -3,4 +3,5 @@
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
diff --git a/pkg/dynamic_modules/test/data/extension_type2/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/extension_type2/dynamic_interface.yaml
index 629e158..31bce6e 100644
--- a/pkg/dynamic_modules/test/data/extension_type2/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/extension_type2/dynamic_interface.yaml
@@ -3,4 +3,5 @@
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
diff --git a/pkg/dynamic_modules/test/data/generic_static_tearoff/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/generic_static_tearoff/dynamic_interface.yaml
index ee6e384..28673b6 100644
--- a/pkg/dynamic_modules/test/data/generic_static_tearoff/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/generic_static_tearoff/dynamic_interface.yaml
@@ -1,3 +1,6 @@
# Copyright (c) 2025, 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.
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/implement_interface/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/implement_interface/dynamic_interface.yaml
index 5b516b6..5ede93e 100644
--- a/pkg/dynamic_modules/test/data/implement_interface/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/implement_interface/dynamic_interface.yaml
@@ -8,3 +8,6 @@
can-be-overridden:
- library: 'shared/shared.dart'
class: 'Base'
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/implicitly_extendable/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/implicitly_extendable/dynamic_interface.yaml
index 397c0ee..636de47 100644
--- a/pkg/dynamic_modules/test/data/implicitly_extendable/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/implicitly_extendable/dynamic_interface.yaml
@@ -8,3 +8,6 @@
can-be-overridden:
- library: 'shared/shared.dart'
class: 'Sub1'
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/indirect_expose/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/indirect_expose/dynamic_interface.yaml
index 382b7b3..0017975 100644
--- a/pkg/dynamic_modules/test/data/indirect_expose/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/indirect_expose/dynamic_interface.yaml
@@ -2,6 +2,7 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'package:expect/expect.dart'
# Sufficient to export interface, even if implementation is private.
- library: 'shared/shared.dart'
diff --git a/pkg/dynamic_modules/test/data/invoke_checked/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/invoke_checked/dynamic_interface.yaml
index b5842a0..8f82783 100644
--- a/pkg/dynamic_modules/test/data/invoke_checked/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/invoke_checked/dynamic_interface.yaml
@@ -2,6 +2,7 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'Base'
member: ''
diff --git a/pkg/dynamic_modules/test/data/load_twice/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/load_twice/dynamic_interface.yaml
index 7d0e4e1..f6b9d69 100644
--- a/pkg/dynamic_modules/test/data/load_twice/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/load_twice/dynamic_interface.yaml
@@ -1,3 +1,6 @@
# Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/load_unmodifiable_view/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/load_unmodifiable_view/dynamic_interface.yaml
index 669288a..f6b9d69 100644
--- a/pkg/dynamic_modules/test/data/load_unmodifiable_view/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/load_unmodifiable_view/dynamic_interface.yaml
@@ -2,3 +2,5 @@
# 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.
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/mixin_field/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/mixin_field/dynamic_interface.yaml
index 4c5b159..af123f5 100644
--- a/pkg/dynamic_modules/test/data/mixin_field/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/mixin_field/dynamic_interface.yaml
@@ -6,5 +6,6 @@
class: 'Foo'
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'Foo'
diff --git a/pkg/dynamic_modules/test/data/multiple_classes/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/multiple_classes/dynamic_interface.yaml
index 3674b5c..7c3b87f5 100644
--- a/pkg/dynamic_modules/test/data/multiple_classes/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/multiple_classes/dynamic_interface.yaml
@@ -7,6 +7,7 @@
class: 'A'
callable:
+ - library: 'dart:core'
- library: 'modules/common.dart'
class: 'A'
member: 'getString'
diff --git a/pkg/dynamic_modules/test/data/override_extra_params/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/override_extra_params/dynamic_interface.yaml
index 0740f8c..98ac857 100644
--- a/pkg/dynamic_modules/test/data/override_extra_params/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/override_extra_params/dynamic_interface.yaml
@@ -21,6 +21,7 @@
# TODO(sigmund): consider implying this for all extendable types.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'Base'
member: ''
diff --git a/pkg/dynamic_modules/test/data/override_mixin_method/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/override_mixin_method/dynamic_interface.yaml
index 65a7902..c095e24 100644
--- a/pkg/dynamic_modules/test/data/override_mixin_method/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/override_mixin_method/dynamic_interface.yaml
@@ -5,6 +5,7 @@
- library: 'shared/shared.dart'
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
can-be-overridden:
diff --git a/pkg/dynamic_modules/test/data/reshape_selectors/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/reshape_selectors/dynamic_interface.yaml
index 47c3964..0675b37 100644
--- a/pkg/dynamic_modules/test/data/reshape_selectors/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/reshape_selectors/dynamic_interface.yaml
@@ -12,3 +12,6 @@
- library: 'shared/shared.dart'
class: 'B'
member: 'foo'
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/same_record_shape/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/same_record_shape/dynamic_interface.yaml
index ee6e384..28673b6 100644
--- a/pkg/dynamic_modules/test/data/same_record_shape/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/same_record_shape/dynamic_interface.yaml
@@ -1,3 +1,6 @@
# Copyright (c) 2025, 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.
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/shared_const/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/shared_const/dynamic_interface.yaml
index af5bccc..d2c7a2e 100644
--- a/pkg/dynamic_modules/test/data/shared_const/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/shared_const/dynamic_interface.yaml
@@ -3,6 +3,7 @@
# BSD-style license that can be found in the LICENSE file.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
class: 'B'
member: ''
diff --git a/pkg/dynamic_modules/test/data/submodule_type_check/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/submodule_type_check/dynamic_interface.yaml
index ee6e384..28673b6 100644
--- a/pkg/dynamic_modules/test/data/submodule_type_check/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/submodule_type_check/dynamic_interface.yaml
@@ -1,3 +1,6 @@
# Copyright (c) 2025, 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.
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/tearoff_no_concrete_impl/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/tearoff_no_concrete_impl/dynamic_interface.yaml
index 0577438..20ca244 100644
--- a/pkg/dynamic_modules/test/data/tearoff_no_concrete_impl/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/tearoff_no_concrete_impl/dynamic_interface.yaml
@@ -9,3 +9,6 @@
- library: 'shared/shared.dart'
class: 'C'
member: 'foo'
+
+callable:
+ - library: 'dart:core'
diff --git a/pkg/dynamic_modules/test/data/top_level/dynamic_interface.yaml b/pkg/dynamic_modules/test/data/top_level/dynamic_interface.yaml
index d52d42c..944d84a 100644
--- a/pkg/dynamic_modules/test/data/top_level/dynamic_interface.yaml
+++ b/pkg/dynamic_modules/test/data/top_level/dynamic_interface.yaml
@@ -2,4 +2,5 @@
# 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.
callable:
+ - library: 'dart:core'
- library: 'shared/shared.dart'
diff --git a/pkg/front_end/lib/src/kernel/dynamic_module_validator.dart b/pkg/front_end/lib/src/kernel/dynamic_module_validator.dart
index d90431b..4379b75 100644
--- a/pkg/front_end/lib/src/kernel/dynamic_module_validator.dart
+++ b/pkg/front_end/lib/src/kernel/dynamic_module_validator.dart
@@ -61,13 +61,6 @@
final YamlNode spec = loadYamlNode(dynamicInterfaceSpecification);
final LibraryIndex libraryIndex = new LibraryIndex.all(component);
- // Included by default to the dynamic interface:
- //
- // callable:
- // - library: 'dart:core'
- //
- callable.add(libraryIndex.getLibrary('dart:core'));
-
// If the spec is empty, the result is a scalar and not a map.
if (spec is! YamlMap) return;
_verifyKeys(spec, const {'extendable', 'can-be-overridden', 'callable'});
diff --git a/pkg/front_end/testcases/general/dynamic_modules/dynamic_interface.yaml b/pkg/front_end/testcases/general/dynamic_modules/dynamic_interface.yaml
index 71ebfe7..204751b 100644
--- a/pkg/front_end/testcases/general/dynamic_modules/dynamic_interface.yaml
+++ b/pkg/front_end/testcases/general/dynamic_modules/dynamic_interface.yaml
@@ -28,6 +28,7 @@
member: 'field2'
callable:
+ - library: 'dart:core'
- library: 'main_lib1.dart'
class: 'C2'
- library: 'main_lib1.dart'
diff --git a/tools/VERSION b/tools/VERSION
index 174d881..7ab0481 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 3
MINOR 9
PATCH 0
-PRERELEASE 178
+PRERELEASE 179
PRERELEASE_PATCH 0
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 8972edb..6f92b76 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -3387,7 +3387,8 @@
"--arch=x64,x64c",
"runtime",
"dartaotruntime",
- "dart2js_platform.dill"
+ "dart2js_platform.dill",
+ "dart2wasm_platform.dill"
]
},
{