From ac770423ec0c96e51fcbd7a2ad83f54b8661ace7 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Thu, 8 Apr 2021 15:22:55 -0700 Subject: [PATCH] [flutter_tools] Allow flutter build aar to know the null safety mode ahead of time (#80000) --- .../flutter_tools/lib/src/commands/build_aar.dart | 15 +++++++++++---- .../lib/src/runner/flutter_command.dart | 6 +++--- .../commands.shard/permeable/build_aar_test.dart | 1 + 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/build_aar.dart b/packages/flutter_tools/lib/src/commands/build_aar.dart index b251c0e7a4..8d904a9996 100644 --- a/packages/flutter_tools/lib/src/commands/build_aar.dart +++ b/packages/flutter_tools/lib/src/commands/build_aar.dart @@ -3,12 +3,13 @@ // found in the LICENSE file. // @dart = 2.8 - import 'package:meta/meta.dart'; import '../android/android_builder.dart'; import '../android/gradle_utils.dart'; import '../base/common.dart'; + +import '../base/file_system.dart'; import '../base/os.dart'; import '../build_info.dart'; import '../cache.dart'; @@ -96,7 +97,9 @@ class BuildAarCommand extends BuildSubCommand { 'By default, AARs are built for `release`, `debug` and `profile`.\n' 'The POM file is used to include the dependencies that the AAR was compiled against.\n' 'To learn more about how to use these artifacts, see ' - 'https://flutter.dev/go/build-aar'; + 'https://flutter.dev/go/build-aar\n' + 'Note: this command builds applications assuming that the entrypoint is lib/main.dart. ' + 'This cannot currently be configured.'; @override Future runCommand() async { @@ -114,11 +117,15 @@ class BuildAarCommand extends BuildSubCommand { ? stringArg('build-number') : '1.0'; + final File targetFile = globals.fs.file(globals.fs.path.join('lib', 'main.dart')); for (final String buildMode in const ['debug', 'profile', 'release']) { if (boolArg(buildMode)) { androidBuildInfo.add( AndroidBuildInfo( - await getBuildInfo(forcedBuildMode: BuildMode.fromName(buildMode)), + await getBuildInfo( + forcedBuildMode: BuildMode.fromName(buildMode), + forcedTargetFile: targetFile, + ), targetArchs: targetArchitectures, ) ); @@ -131,7 +138,7 @@ class BuildAarCommand extends BuildSubCommand { displayNullSafetyMode(androidBuildInfo.first.buildInfo); await androidBuilder.buildAar( project: _getProject(), - target: '', // Not needed because this command only builds Android's code. + target: targetFile.path, androidBuildInfo: androidBuildInfo, outputDirectoryPath: stringArg('output-dir'), buildNumber: buildNumber, diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index b803d72e95..f12e929f95 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -841,7 +841,7 @@ abstract class FlutterCommand extends Command { /// /// Throws a [ToolExit] if the current set of options is not compatible with /// each other. - Future getBuildInfo({ BuildMode forcedBuildMode }) async { + Future getBuildInfo({ BuildMode forcedBuildMode, File forcedTargetFile }) async { final bool trackWidgetCreation = argParser.options.containsKey('track-widget-creation') && boolArg('track-widget-creation'); @@ -891,8 +891,8 @@ abstract class FlutterCommand extends Command { // passing a flag. Examine the entrypoint file to determine if it // is opted in or out. final bool wasNullSafetyFlagParsed = argResults.wasParsed(FlutterOptions.kNullSafety); - if (!wasNullSafetyFlagParsed && argParser.options.containsKey('target')) { - final File entrypointFile = globals.fs.file(targetFile); + if (!wasNullSafetyFlagParsed && (argParser.options.containsKey('target') || forcedTargetFile != null)) { + final File entrypointFile = forcedTargetFile ?? globals.fs.file(targetFile); final LanguageVersion languageVersion = determineLanguageVersion( entrypointFile, packageConfig.packageOf(entrypointFile.absolute.uri), diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart index da136cb8e2..eface8992b 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart @@ -185,6 +185,7 @@ void main() { expect(buildInfo.splitDebugInfoPath, '/project-name/v1.2.3/'); expect(buildInfo.dartObfuscation, isTrue); expect(buildInfo.dartDefines.contains('foo=bar'), isTrue); + expect(buildInfo.nullSafetyMode, NullSafetyMode.sound); }, overrides: { AndroidBuilder: () => fakeAndroidBuilder, });