Migrate build system build.dart to null safety (#83381)
diff --git a/packages/flutter_tools/lib/src/base/build.dart b/packages/flutter_tools/lib/src/base/build.dart index fa3d156..b67eb79 100644 --- a/packages/flutter_tools/lib/src/base/build.dart +++ b/packages/flutter_tools/lib/src/base/build.dart
@@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.8 - -import 'package:meta/meta.dart'; import 'package:process/process.dart'; import '../artifacts.dart'; @@ -20,7 +17,7 @@ SnapshotType(this.platform, this.mode) : assert(mode != null); - final TargetPlatform platform; + final TargetPlatform? platform; final BuildMode mode; @override @@ -30,9 +27,9 @@ /// Interface to the gen_snapshot command-line tool. class GenSnapshot { GenSnapshot({ - @required Artifacts artifacts, - @required ProcessManager processManager, - @required Logger logger, + required Artifacts artifacts, + required ProcessManager processManager, + required Logger logger, }) : _artifacts = artifacts, _processUtils = ProcessUtils(logger: logger, processManager: processManager); @@ -56,10 +53,11 @@ }; Future<int> run({ - @required SnapshotType snapshotType, - DarwinArch darwinArch, + required SnapshotType snapshotType, + DarwinArch? darwinArch, Iterable<String> additionalArgs = const <String>[], }) { + assert(snapshotType.platform != TargetPlatform.ios || darwinArch != null); final List<String> args = <String>[ ...additionalArgs, ]; @@ -69,7 +67,7 @@ // iOS has a separate gen_snapshot for armv7 and arm64 in the same, // directory. So we need to select the right one. if (snapshotType.platform == TargetPlatform.ios) { - snapshotterPath += '_' + getNameForDarwinArch(darwinArch); + snapshotterPath += '_' + getNameForDarwinArch(darwinArch!); } return _processUtils.stream( @@ -82,11 +80,11 @@ class AOTSnapshotter { AOTSnapshotter({ this.reportTimings = false, - @required Logger logger, - @required FileSystem fileSystem, - @required Xcode xcode, - @required ProcessManager processManager, - @required Artifacts artifacts, + required Logger logger, + required FileSystem fileSystem, + required Xcode xcode, + required ProcessManager processManager, + required Artifacts artifacts, }) : _logger = logger, _fileSystem = fileSystem, _xcode = xcode, @@ -108,16 +106,16 @@ /// Builds an architecture-specific ahead-of-time compiled snapshot of the specified script. Future<int> build({ - @required TargetPlatform platform, - @required BuildMode buildMode, - @required String mainPath, - @required String outputPath, - DarwinArch darwinArch, - String sdkRoot, + required TargetPlatform platform, + required BuildMode buildMode, + required String mainPath, + required String outputPath, + DarwinArch? darwinArch, + String? sdkRoot, List<String> extraGenSnapshotOptions = const <String>[], - @required bool bitcode, - @required String splitDebugInfo, - @required bool dartObfuscation, + required bool bitcode, + String? splitDebugInfo, + required bool dartObfuscation, bool quiet = false, }) async { assert(platform != TargetPlatform.ios || darwinArch != null); @@ -197,7 +195,7 @@ // Faster async/await if (shouldSplitDebugInfo) ...<String>[ '--dwarf-stack-traces', - '--save-debugging-info=${_fileSystem.path.join(splitDebugInfo, debugFilename)}' + '--save-debugging-info=${_fileSystem.path.join(splitDebugInfo!, debugFilename)}' ], if (dartObfuscation) '--obfuscate', @@ -220,7 +218,7 @@ // end-developer can link into their app. if (platform == TargetPlatform.ios || platform == TargetPlatform.darwin) { final RunResult result = await _buildFramework( - appleArch: darwinArch, + appleArch: darwinArch!, isIOS: platform == TargetPlatform.ios, sdkRoot: sdkRoot, assemblyPath: assembly, @@ -238,13 +236,13 @@ /// Builds an iOS or macOS framework at [outputPath]/App.framework from the assembly /// source at [assemblyPath]. Future<RunResult> _buildFramework({ - @required DarwinArch appleArch, - @required bool isIOS, - @required String sdkRoot, - @required String assemblyPath, - @required String outputPath, - @required bool bitcode, - @required bool quiet + required DarwinArch appleArch, + required bool isIOS, + String? sdkRoot, + required String assemblyPath, + required String outputPath, + required bool bitcode, + required bool quiet }) async { final String targetArch = getNameForDarwinArch(appleArch); if (!quiet) { @@ -262,7 +260,7 @@ const String embedBitcodeArg = '-fembed-bitcode'; final String assemblyO = _fileSystem.path.join(outputPath, 'snapshot_assembly.o'); - List<String> isysrootArgs; + List<String>? isysrootArgs; if (sdkRoot != null) { isysrootArgs = <String>['-isysroot', sdkRoot]; }
diff --git a/packages/flutter_tools/lib/src/base/process.dart b/packages/flutter_tools/lib/src/base/process.dart index c5924b1..91d2e57 100644 --- a/packages/flutter_tools/lib/src/base/process.dart +++ b/packages/flutter_tools/lib/src/base/process.dart
@@ -11,7 +11,7 @@ import 'io.dart'; import 'logger.dart'; -typedef StringConverter = String Function(String string); +typedef StringConverter = String? Function(String string); /// A function that will be run before the VM exits. typedef ShutdownHook = FutureOr<dynamic> Function(); @@ -452,12 +452,13 @@ .transform<String>(const LineSplitter()) .where((String line) => filter == null || filter.hasMatch(line)) .listen((String line) { + String? mappedLine = line; if (mapFunction != null) { - line = mapFunction(line); + mappedLine = mapFunction(line); } - if (line != null) { - final String message = '$prefix$line'; - if (stdoutErrorMatcher?.hasMatch(line) == true) { + if (mappedLine != null) { + final String message = '$prefix$mappedLine'; + if (stdoutErrorMatcher?.hasMatch(mappedLine) == true) { _logger.printError(message, wrap: false); } else if (trace) { _logger.printTrace(message); @@ -471,11 +472,12 @@ .transform<String>(const LineSplitter()) .where((String line) => filter == null || filter.hasMatch(line)) .listen((String line) { + String? mappedLine = line; if (mapFunction != null) { - line = mapFunction(line); + mappedLine = mapFunction(line); } - if (line != null) { - _logger.printError('$prefix$line', wrap: false); + if (mappedLine != null) { + _logger.printError('$prefix$mappedLine', wrap: false); } });
diff --git a/packages/flutter_tools/lib/src/build_system/targets/android.dart b/packages/flutter_tools/lib/src/build_system/targets/android.dart index 60711bd..da264a8 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/android.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/android.dart
@@ -9,7 +9,7 @@ import '../../base/deferred_component.dart'; import '../../base/file_system.dart'; import '../../build_info.dart'; -import '../../globals.dart' as globals show platform, printError, xcode; +import '../../globals_null_migrated.dart' as globals show platform, printError, xcode; import '../../project.dart'; import '../build_system.dart'; import '../depfile.dart';
diff --git a/packages/flutter_tools/lib/src/build_system/targets/common.dart b/packages/flutter_tools/lib/src/build_system/targets/common.dart index abd8fe9..e1d40b0 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/common.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/common.dart
@@ -12,7 +12,7 @@ import '../../build_info.dart'; import '../../compile.dart'; import '../../dart/package_map.dart'; -import '../../globals.dart' as globals show xcode; +import '../../globals_null_migrated.dart' as globals show xcode; import '../build_system.dart'; import '../depfile.dart'; import '../exceptions.dart';
diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart index dbef1fa..c3445b6 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
@@ -12,7 +12,7 @@ import '../../base/file_system.dart'; import '../../base/io.dart'; import '../../build_info.dart'; -import '../../globals.dart' as globals show xcode; +import '../../globals_null_migrated.dart' as globals show xcode; import '../../macos/xcode.dart'; import '../../project.dart'; import '../build_system.dart';
diff --git a/packages/flutter_tools/lib/src/build_system/targets/macos.dart b/packages/flutter_tools/lib/src/build_system/targets/macos.dart index a4790d7..8e2ef25 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/macos.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/macos.dart
@@ -10,7 +10,7 @@ import '../../base/io.dart'; import '../../base/process.dart'; import '../../build_info.dart'; -import '../../globals.dart' as globals show xcode; +import '../../globals_null_migrated.dart' as globals show xcode; import '../build_system.dart'; import '../depfile.dart'; import '../exceptions.dart';
diff --git a/packages/flutter_tools/test/general.shard/base/build_test.dart b/packages/flutter_tools/test/general.shard/base/build_test.dart index 62618a4..2a77f85 100644 --- a/packages/flutter_tools/test/general.shard/base/build_test.dart +++ b/packages/flutter_tools/test/general.shard/base/build_test.dart
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.8 - import 'package:file/memory.dart'; import 'package:flutter_tools/src/artifacts.dart'; import 'package:flutter_tools/src/base/build.dart'; @@ -72,22 +70,16 @@ void main() { group('SnapshotType', () { - test('throws, if build mode is null', () { - expect( - () => SnapshotType(TargetPlatform.android_x64, null), - throwsA(anything), - ); - }); test('does not throw, if target platform is null', () { expect(() => SnapshotType(null, BuildMode.release), returnsNormally); }); }); group('GenSnapshot', () { - GenSnapshot genSnapshot; - Artifacts artifacts; - FakeProcessManager processManager; - BufferLogger logger; + late GenSnapshot genSnapshot; + late Artifacts artifacts; + late FakeProcessManager processManager; + late BufferLogger logger; setUp(() async { artifacts = Artifacts.test(); @@ -179,10 +171,10 @@ }); group('AOTSnapshotter', () { - MemoryFileSystem fileSystem; - AOTSnapshotter snapshotter; - Artifacts artifacts; - FakeProcessManager processManager; + late MemoryFileSystem fileSystem; + late AOTSnapshotter snapshotter; + late Artifacts artifacts; + late FakeProcessManager processManager; setUp(() async { fileSystem = MemoryFileSystem.test();
diff --git a/packages/flutter_tools/test/general.shard/base/process_test.dart b/packages/flutter_tools/test/general.shard/base/process_test.dart index 3792ae5..e2f2761 100644 --- a/packages/flutter_tools/test/general.shard/base/process_test.dart +++ b/packages/flutter_tools/test/general.shard/base/process_test.dart
@@ -83,6 +83,24 @@ expect(logger.statusText, equals('${testString[0]}\n')); expect(logger.errorText, equals('${testString[0]}\n')); }); + + testWithoutContext('Command output is filtered by mapFunction', () async { + processManager.addCommand(const FakeCommand( + command: <String>['command'], + stdout: 'match\nno match', + stderr: 'match\nno match', + )); + + await processUtils.stream(<String>['command'], mapFunction: (String line) { + if (line == 'match') { + return line; + } + return null; + }); + + expect(logger.statusText, equals('match\n')); + expect(logger.errorText, equals('match\n')); + }); }); group('run', () {