Skip to content

Commit 25d5f61

Browse files
authored
Add --use-experimental-resolver flag. (#3831)
* Add --use-experimental-resolver flag. * Address review comments. * Fix pubspec.
1 parent 874393a commit 25d5f61

File tree

8 files changed

+53
-6
lines changed

8 files changed

+53
-6
lines changed

build_resolvers/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
`AnalysisDriverFilesystem`. Add new implementation of
55
`AnalysisDriverModel`.
66
- Make resolver only throw `SyntaxErrorInAssetException` on severe syntax errors
7+
- Add `BuildAssetUriResolver.useExperimentalResolver` for
8+
`--use-experimental-resolver` flag. This will be removed.
79

810
## 2.4.3
911

build_resolvers/lib/src/build_asset_uri_resolver.dart

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ const _ignoredSchemes = ['dart', 'dart-ext'];
2323

2424
const transitiveDigestExtension = '.transitive_digest';
2525

26+
/// Switches [BuildAssetUriResolver.sharedInstance] from [BuildAssetUriResolver]
27+
/// to [AnalysisDriverModel].
28+
void useExperimentalResolver() {
29+
BuildAssetUriResolver._sharedInstance = AnalysisDriverModel();
30+
}
31+
2632
class BuildAssetUriResolver implements AnalysisDriverModel {
2733
/// A cache of the directives for each Dart library.
2834
///
@@ -61,7 +67,12 @@ class BuildAssetUriResolver implements AnalysisDriverModel {
6167
/// what should be used by normal builds.
6268
///
6369
/// This is not used within testing contexts or similar custom contexts.
64-
static final BuildAssetUriResolver sharedInstance = BuildAssetUriResolver();
70+
static AnalysisDriverModel get sharedInstance => _sharedInstance;
71+
static AnalysisDriverModel _sharedInstance = _sharedUriResolverInstance;
72+
// Keep a [BuildAssetUriResolver] instance even if [useExperimentalResolver]
73+
// is called, for [dependenciesOf].
74+
static final BuildAssetUriResolver _sharedUriResolverInstance =
75+
BuildAssetUriResolver();
6576

6677
@override
6778
Future<void> performResolve(
@@ -219,9 +230,11 @@ Set<AssetId> _parseDependencies(String content, AssetId from) => HashSet.of(
219230

220231
/// Read the (potentially) cached dependencies of [id] based on parsing the
221232
/// directives, and cache the results if they weren't already cached.
233+
///
234+
/// TODO(davidmorgan): remove this or make it use `AnalysisDriverModel`.
222235
Future<Iterable<AssetId>?> dependenciesOf(
223236
AssetId id, BuildStep buildStep) async =>
224-
(await BuildAssetUriResolver.sharedInstance
237+
(await BuildAssetUriResolver._sharedUriResolverInstance
225238
._updateCachedAssetState(id, buildStep))
226239
?.dependencies;
227240

build_runner/CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
## 2.4.15
1+
## 2.4.15-wip
22

33
- Update to package:web and dart:js_interop.
44
- Support the latest `package:shelf_web_socket`.
5+
- Add hidden `--use-experimental-resolver` flag for issue #3811 performance
6+
work. This flag will be removed.
57

68
## 2.4.14
79

build_runner/lib/src/entrypoint/base_command.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ abstract class BuildRunnerCommand extends Command<int> {
9797
'If multiple filters are applied then outputs matching any '
9898
'filter will be built (they do not need to match all filters).')
9999
..addMultiOption(enableExperimentOption,
100-
help: 'A list of dart language experiments to enable.');
100+
help: 'A list of dart language experiments to enable.')
101+
..addFlag(useExperimentalResolverOption, hide: true);
101102
}
102103

103104
/// Must be called inside [run] so that [argResults] is non-null.

build_runner/lib/src/entrypoint/build.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import 'dart:async';
66

77
import 'package:build/experiments.dart';
8+
// ignore: implementation_imports
9+
import 'package:build_resolvers/src/build_asset_uri_resolver.dart'
10+
as uri_resolver;
811
import 'package:build_runner_core/build_runner_core.dart';
912
import 'package:io/io.dart';
1013

@@ -32,6 +35,10 @@ class BuildCommand extends BuildRunnerCommand {
3235
}
3336

3437
Future<int> _run(SharedOptions options) async {
38+
// TODO(davidmorgan): remove when experiment is over.
39+
if (options.useExperimentalResolver) {
40+
uri_resolver.useExperimentalResolver();
41+
}
3542
var result = await build(
3643
builderApplications,
3744
buildFilters: options.buildFilters,

build_runner/lib/src/entrypoint/options.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const releaseOption = 'release';
3131
const trackPerformanceOption = 'track-performance';
3232
const skipBuildScriptCheckOption = 'skip-build-script-check';
3333
const symlinkOption = 'symlink';
34+
const useExperimentalResolverOption = 'use-experimental-resolver';
3435
const usePollingWatcherOption = 'use-polling-watcher';
3536
const verboseOption = 'verbose';
3637

@@ -86,6 +87,8 @@ class SharedOptions {
8687

8788
final List<String> enableExperiments;
8889

90+
final bool useExperimentalResolver;
91+
8992
SharedOptions._({
9093
required this.buildFilters,
9194
required this.deleteFilesByDefault,
@@ -100,6 +103,7 @@ class SharedOptions {
100103
required this.isReleaseBuild,
101104
required this.logPerformanceDir,
102105
required this.enableExperiments,
106+
required this.useExperimentalResolver,
103107
});
104108

105109
SharedOptions.fromParsedArgs(ArgResults argResults,
@@ -122,6 +126,8 @@ class SharedOptions {
122126
isReleaseBuild: argResults[releaseOption] as bool,
123127
logPerformanceDir: argResults[logPerformanceOption] as String?,
124128
enableExperiments: argResults[enableExperimentOption] as List<String>,
129+
useExperimentalResolver:
130+
argResults[useExperimentalResolverOption] as bool,
125131
);
126132
}
127133

@@ -147,6 +153,7 @@ class DaemonOptions extends WatchOptions {
147153
required super.logPerformanceDir,
148154
required super.usePollingWatcher,
149155
required super.enableExperiments,
156+
required super.useExperimentalResolver,
150157
}) : super._();
151158

152159
factory DaemonOptions.fromParsedArgs(ArgResults argResults,
@@ -187,6 +194,8 @@ class DaemonOptions extends WatchOptions {
187194
logPerformanceDir: argResults[logPerformanceOption] as String?,
188195
usePollingWatcher: argResults[usePollingWatcherOption] as bool,
189196
enableExperiments: argResults[enableExperimentOption] as List<String>,
197+
useExperimentalResolver:
198+
argResults[useExperimentalResolverOption] as bool,
190199
);
191200
}
192201
}
@@ -214,6 +223,7 @@ class WatchOptions extends SharedOptions {
214223
required super.isReleaseBuild,
215224
required super.logPerformanceDir,
216225
required super.enableExperiments,
226+
required super.useExperimentalResolver,
217227
}) : super._();
218228

219229
WatchOptions.fromParsedArgs(ArgResults argResults,
@@ -237,6 +247,8 @@ class WatchOptions extends SharedOptions {
237247
logPerformanceDir: argResults[logPerformanceOption] as String?,
238248
usePollingWatcher: argResults[usePollingWatcherOption] as bool,
239249
enableExperiments: argResults[enableExperimentOption] as List<String>,
250+
useExperimentalResolver:
251+
argResults[useExperimentalResolverOption] as bool,
240252
);
241253
}
242254

@@ -266,6 +278,7 @@ class ServeOptions extends WatchOptions {
266278
required super.logPerformanceDir,
267279
required super.usePollingWatcher,
268280
required super.enableExperiments,
281+
required super.useExperimentalResolver,
269282
}) : super._();
270283

271284
factory ServeOptions.fromParsedArgs(ArgResults argResults,
@@ -337,6 +350,8 @@ class ServeOptions extends WatchOptions {
337350
logPerformanceDir: argResults[logPerformanceOption] as String?,
338351
usePollingWatcher: argResults[usePollingWatcherOption] as bool,
339352
enableExperiments: argResults[enableExperimentOption] as List<String>,
353+
useExperimentalResolver:
354+
argResults[useExperimentalResolverOption] as bool,
340355
);
341356
}
342357
}

build_runner/lib/src/entrypoint/watch.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import 'dart:async';
66

77
import 'package:build/experiments.dart';
8+
// ignore: implementation_imports
9+
import 'package:build_resolvers/src/build_asset_uri_resolver.dart'
10+
as uri_resolver;
811
import 'package:build_runner_core/build_runner_core.dart';
912
import 'package:io/io.dart';
1013

@@ -46,6 +49,10 @@ class WatchCommand extends BuildRunnerCommand {
4649
}
4750

4851
Future<int> _run(WatchOptions options) async {
52+
// TODO(davidmorgan): remove when experiment is over.
53+
if (options.useExperimentalResolver) {
54+
uri_resolver.useExperimentalResolver();
55+
}
4956
var handler = await watch(
5057
builderApplications,
5158
deleteFilesByDefault: options.deleteFilesByDefault,

build_runner/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: build_runner
2-
version: 2.4.15
2+
version: 2.4.15-wip
33
description: A build system for Dart code generation and modular compilation.
44
repository: https://github.com/dart-lang/build/tree/master/build_runner
55
resolution: workspace
@@ -19,7 +19,7 @@ dependencies:
1919
build: ">=2.1.0 <2.5.0"
2020
build_config: ">=1.1.0 <1.2.0"
2121
build_daemon: ^4.0.0
22-
build_resolvers: ^2.0.0
22+
build_resolvers: ^2.4.4-wip
2323
build_runner_core: ^8.0.0
2424
code_builder: ^4.2.0
2525
collection: ^1.15.0

0 commit comments

Comments
 (0)