Skip to content

Commit ac7879e

Browse files
authored
Avoid depending on files from build_system/targets other than from top level entrypoints in flutter_tools. (flutter#142760)
Add a new `BuildTargets` class that provides commonly used build targets. And avoid importing files from `build_system/targets` except from the top level entrypoints or from top level commands. Also move `scene_importer.dart` and `shader_compiler.dart` into `build_system/tools` because they are not `Target` classes, but wrapper for certain tools. With this change, we can ignore all files in `build_system/targets` internally and make PR flutter#142709 easier to land internally. See cl/603434066 for the corresponding internal change. Related to: flutter#142709 flutter#142041 Also note that I have opted to add a new variable in `globals.dart` for `BuildTargets` in this PR, but I know that we are trying to get rid of globals. Several alternatives that I was considering: 1. Add a new field in `BuildSystem` that returns a `BuildTargets` instance. Since `BuildSystem` is already in `globals`, we can access build targets using `globals.buildSystem.buildTargets` without adding a new global variable. 2. Properly inject the `BuildTargetsImpl` instance from the top level `executable.dart` and top level commands. Let me know if you want me to do one of the above instead. Thanks!
1 parent b209125 commit ac7879e

30 files changed

+151
-45
lines changed

packages/flutter_tools/lib/executable.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'src/base/platform.dart';
1111
import 'src/base/template.dart';
1212
import 'src/base/terminal.dart';
1313
import 'src/base/user_messages.dart';
14+
import 'src/build_system/build_targets.dart';
1415
import 'src/cache.dart';
1516
import 'src/commands/analyze.dart';
1617
import 'src/commands/assemble.dart';
@@ -47,6 +48,7 @@ import 'src/devtools_launcher.dart';
4748
import 'src/features.dart';
4849
import 'src/globals.dart' as globals;
4950
// Files in `isolated` are intentionally excluded from google3 tooling.
51+
import 'src/isolated/build_targets.dart';
5052
import 'src/isolated/mustache_template.dart';
5153
import 'src/isolated/resident_web_runner.dart';
5254
import 'src/pre_run_validator.dart';
@@ -110,6 +112,7 @@ Future<void> main(List<String> args) async {
110112
logger: globals.logger,
111113
botDetector: globals.botDetector,
112114
),
115+
BuildTargets: () => const BuildTargetsImpl(),
113116
Logger: () {
114117
final LoggerFactory loggerFactory = LoggerFactory(
115118
outputPreferences: globals.outputPreferences,
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// Copyright 2014 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import '../base/file_system.dart';
6+
import '../web/compiler_config.dart';
7+
import './build_system.dart';
8+
9+
/// Commonly used build [Target]s.
10+
abstract class BuildTargets {
11+
const BuildTargets();
12+
13+
Target get copyFlutterBundle;
14+
Target get releaseCopyFlutterBundle;
15+
Target get generateLocalizationsTarget;
16+
Target get dartPluginRegistrantTarget;
17+
Target webServiceWorker(FileSystem fileSystem, List<WebCompilerConfig> compileConfigs);
18+
}
19+
20+
/// BuildTargets that return NoOpTarget for every action.
21+
class NoOpBuildTargets extends BuildTargets {
22+
const NoOpBuildTargets();
23+
24+
@override
25+
Target get copyFlutterBundle => const _NoOpTarget();
26+
27+
@override
28+
Target get releaseCopyFlutterBundle => const _NoOpTarget();
29+
30+
@override
31+
Target get generateLocalizationsTarget => const _NoOpTarget();
32+
33+
@override
34+
Target get dartPluginRegistrantTarget => const _NoOpTarget();
35+
36+
@override
37+
Target webServiceWorker(FileSystem fileSystem, List<WebCompilerConfig> compileConfigs) => const _NoOpTarget();
38+
}
39+
40+
/// A [Target] that does nothing.
41+
class _NoOpTarget extends Target {
42+
const _NoOpTarget();
43+
44+
@override
45+
String get name => 'no_op';
46+
47+
@override
48+
List<Source> get inputs => const <Source>[];
49+
50+
@override
51+
List<Source> get outputs => const <Source>[];
52+
53+
@override
54+
List<Target> get dependencies => const <Target>[];
55+
56+
@override
57+
Future<void> build(Environment environment) async {}
58+
}

packages/flutter_tools/lib/src/build_system/targets/assets.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ import '../../convert.dart';
1212
import '../../devfs.dart';
1313
import '../build_system.dart';
1414
import '../depfile.dart';
15+
import '../tools/scene_importer.dart';
16+
import '../tools/shader_compiler.dart';
1517
import 'common.dart';
1618
import 'icon_tree_shaker.dart';
17-
import 'scene_importer.dart';
18-
import 'shader_compiler.dart';
1919

2020
/// A helper function to copy an asset bundle into an [environment]'s output
2121
/// directory.

packages/flutter_tools/lib/src/build_system/targets/common.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ import '../../globals.dart' as globals show xcode;
1616
import '../build_system.dart';
1717
import '../depfile.dart';
1818
import '../exceptions.dart';
19+
import '../tools/shader_compiler.dart';
1920
import 'assets.dart';
2021
import 'dart_plugin_registrant.dart';
2122
import 'icon_tree_shaker.dart';
2223
import 'localizations.dart';
2324
import 'native_assets.dart';
24-
import 'shader_compiler.dart';
2525

2626
/// Copies the pre-built flutter bundle.
2727
// This is a one-off rule for implementing build bundle in terms of assemble.

packages/flutter_tools/lib/src/build_system/targets/ios.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ import '../../reporting/reporting.dart';
2020
import '../build_system.dart';
2121
import '../depfile.dart';
2222
import '../exceptions.dart';
23+
import '../tools/shader_compiler.dart';
2324
import 'assets.dart';
2425
import 'common.dart';
2526
import 'icon_tree_shaker.dart';
26-
import 'shader_compiler.dart';
2727

2828
/// Supports compiling a dart kernel file to an assembly file.
2929
///

packages/flutter_tools/lib/src/build_system/targets/web.dart

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,6 @@ import '../exceptions.dart';
2929
import 'assets.dart';
3030
import 'localizations.dart';
3131

32-
/// Whether the application has web plugins.
33-
const String kHasWebPlugins = 'HasWebPlugins';
34-
35-
/// Base href to set in index.html in flutter build command
36-
const String kBaseHref = 'baseHref';
37-
38-
/// The caching strategy to use for service worker generation.
39-
const String kServiceWorkerStrategy = 'ServiceWorkerStrategy';
40-
4132
@visibleForTesting
4233
List<String> updateDartDefines(List<String> dartDefines, WebRendererMode webRenderer) {
4334
final Set<String> dartDefinesSet = dartDefines.toSet();

packages/flutter_tools/lib/src/build_system/targets/scene_importer.dart renamed to packages/flutter_tools/lib/src/build_system/tools/scene_importer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class SceneImporter {
9292
/// See [Target.inputs].
9393
static const List<Source> inputs = <Source>[
9494
Source.pattern(
95-
'{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/scene_importer.dart'),
95+
'{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/tools/scene_importer.dart'),
9696
Source.hostArtifact(HostArtifact.scenec),
9797
];
9898

packages/flutter_tools/lib/src/build_system/targets/shader_compiler.dart renamed to packages/flutter_tools/lib/src/build_system/tools/shader_compiler.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ class ShaderCompiler {
136136
///
137137
/// See [Target.inputs].
138138
static const List<Source> inputs = <Source>[
139-
Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/shader_compiler.dart'),
139+
Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/tools/shader_compiler.dart'),
140140
Source.hostArtifact(HostArtifact.impellerc),
141141
];
142142

packages/flutter_tools/lib/src/bundle_builder.dart

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import 'base/logger.dart';
1212
import 'build_info.dart';
1313
import 'build_system/build_system.dart';
1414
import 'build_system/depfile.dart';
15-
import 'build_system/targets/common.dart';
16-
import 'build_system/targets/scene_importer.dart';
17-
import 'build_system/targets/shader_compiler.dart';
15+
import 'build_system/tools/scene_importer.dart';
16+
import 'build_system/tools/shader_compiler.dart';
1817
import 'bundle.dart';
1918
import 'cache.dart';
2019
import 'devfs.dart';
@@ -78,8 +77,8 @@ class BundleBuilder {
7877
generateDartPluginRegistry: true,
7978
);
8079
final Target target = buildInfo.mode == BuildMode.debug
81-
? const CopyFlutterBundle()
82-
: const ReleaseCopyFlutterBundle();
80+
? globals.buildTargets.copyFlutterBundle
81+
: globals.buildTargets.releaseCopyFlutterBundle;
8382
final BuildResult result = await buildSystem.build(target, environment);
8483

8584
if (!result.success) {

packages/flutter_tools/lib/src/commands/create_base.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,7 @@ abstract class CreateBase extends FlutterCommand {
544544
await generateLocalizationsSyntheticPackage(
545545
environment: environment,
546546
buildSystem: globals.buildSystem,
547+
buildTargets: globals.buildTargets,
547548
);
548549
}
549550
final List<SupportedPlatform> platformsForMigrateConfig = <SupportedPlatform>[SupportedPlatform.root];

0 commit comments

Comments
 (0)