diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart index ad99ac9e885950fcc8effe3c145322a68a67ebf5..3100f2bb33eddaccf5c6fe53c4559933d8593750 100644 --- a/packages/flutter_tools/lib/src/build_info.dart +++ b/packages/flutter_tools/lib/src/build_info.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:meta/meta.dart'; +import 'package:package_config/package_config_types.dart'; import 'base/config.dart'; import 'base/context.dart'; @@ -33,9 +34,10 @@ class BuildInfo { @required this.treeShakeIcons, this.performanceMeasurementFile, this.packagesPath = '.packages', // TODO(jonahwilliams): make this required and remove the default. - this.nullSafetyMode = NullSafetyMode.autodetect, + this.nullSafetyMode = NullSafetyMode.sound, this.codeSizeDirectory, this.androidGradleDaemon = true, + this.packageConfig = PackageConfig.empty, }); final BuildMode mode; @@ -134,6 +136,12 @@ class BuildInfo { /// The Gradle daemon may also be disabled in the Android application's properties file. final bool androidGradleDaemon; + /// The package configuration for the loaded application. + /// + /// This is captured once during startup, but the actual package configuration + /// may change during a 'flutter run` workflow. + final PackageConfig packageConfig; + static const BuildInfo debug = BuildInfo(BuildMode.debug, null, treeShakeIcons: false); static const BuildInfo profile = BuildInfo(BuildMode.profile, null, treeShakeIcons: kIconTreeShakerEnabledDefault); static const BuildInfo jitRelease = BuildInfo(BuildMode.jitRelease, null, treeShakeIcons: kIconTreeShakerEnabledDefault); @@ -751,5 +759,6 @@ List<String> decodeDartDefines(Map<String, String> environmentDefines, String ke enum NullSafetyMode { sound, unsound, + /// The null safety mode was not detected. Only supported for 'flutter test'. autodetect, } diff --git a/packages/flutter_tools/lib/src/isolated/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart index f4b3074125afc7c1208eb338c6d5bbdd08b2d703..0a238accc4cbdc749334c79faedafb71cd65a476 100644 --- a/packages/flutter_tools/lib/src/isolated/devfs_web.dart +++ b/packages/flutter_tools/lib/src/isolated/devfs_web.dart @@ -198,10 +198,7 @@ class WebAssetServer implements AssetReader { // Allow rendering in a iframe. httpServer.defaultResponseHeaders.remove('x-frame-options', 'SAMEORIGIN'); - final PackageConfig packageConfig = await loadPackageConfigWithLogging( - globals.fs.file(buildInfo.packagesPath), - logger: globals.logger, - ); + final PackageConfig packageConfig = buildInfo.packageConfig; final Map<String, String> digests = <String, String>{}; final Map<String, String> modules = <String, String>{}; final WebAssetServer server = WebAssetServer( @@ -631,43 +628,35 @@ class WebAssetServer implements AssetReader { return webSdkFile; } - // TODO(yjbanov): https://github.com/flutter/flutter/issues/70121 static const Map<WebRendererMode, Map<NullSafetyMode, Artifact>> _dartSdkJsArtifactMap = <WebRendererMode, Map<NullSafetyMode, Artifact>> { WebRendererMode.autoDetect: <NullSafetyMode, Artifact> { NullSafetyMode.sound: Artifact.webPrecompiledCanvaskitAndHtmlSoundSdk, NullSafetyMode.unsound: Artifact.webPrecompiledCanvaskitAndHtmlSdk, - NullSafetyMode.autodetect: Artifact.webPrecompiledCanvaskitAndHtmlSdk, }, WebRendererMode.canvaskit: <NullSafetyMode, Artifact> { NullSafetyMode.sound: Artifact.webPrecompiledCanvaskitSoundSdk, NullSafetyMode.unsound: Artifact.webPrecompiledCanvaskitSdk, - NullSafetyMode.autodetect: Artifact.webPrecompiledCanvaskitSdk, }, WebRendererMode.html: <NullSafetyMode, Artifact> { NullSafetyMode.sound: Artifact.webPrecompiledSoundSdk, NullSafetyMode.unsound: Artifact.webPrecompiledSdk, - NullSafetyMode.autodetect: Artifact.webPrecompiledSdk, }, }; - // TODO(yjbanov): https://github.com/flutter/flutter/issues/70121 static const Map<WebRendererMode, Map<NullSafetyMode, Artifact>> _dartSdkJsMapArtifactMap = <WebRendererMode, Map<NullSafetyMode, Artifact>> { WebRendererMode.autoDetect: <NullSafetyMode, Artifact> { NullSafetyMode.sound: Artifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps, NullSafetyMode.unsound: Artifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps, - NullSafetyMode.autodetect: Artifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps, }, WebRendererMode.canvaskit: <NullSafetyMode, Artifact> { NullSafetyMode.sound: Artifact.webPrecompiledCanvaskitSoundSdkSourcemaps, NullSafetyMode.unsound: Artifact.webPrecompiledCanvaskitSdkSourcemaps, - NullSafetyMode.autodetect: Artifact.webPrecompiledCanvaskitSdkSourcemaps, }, WebRendererMode.html: <NullSafetyMode, Artifact> { NullSafetyMode.sound: Artifact.webPrecompiledSoundSdkSourcemaps, NullSafetyMode.unsound: Artifact.webPrecompiledSdkSourcemaps, - NullSafetyMode.autodetect: Artifact.webPrecompiledSdkSourcemaps, }, }; diff --git a/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart b/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart index 9df21c979edb0632b99fc6e4ba0cc40d0e829a68..54b9dff9bb20141fd5714f6e88446c212c93ea4d 100644 --- a/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart +++ b/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart @@ -508,7 +508,7 @@ class _ResidentWebRunner extends ResidentWebRunner { expressionCompiler: expressionCompiler, chromiumLauncher: _chromiumLauncher, nullAssertions: debuggingOptions.nullAssertions, - nullSafetyMode: device.nullSafetyMode, + nullSafetyMode: debuggingOptions.buildInfo.nullSafetyMode, ); final Uri url = await device.devFS.create(); if (debuggingOptions.buildInfo.isDebug) { @@ -719,7 +719,8 @@ class _ResidentWebRunner extends ResidentWebRunner { lastCompiled: device.devFS.lastCompiled, urisToMonitor: device.devFS.sources, packagesPath: packagesFilePath, - packageConfig: device.devFS.lastPackageConfig, + packageConfig: device.devFS.lastPackageConfig + ?? debuggingOptions.buildInfo.packageConfig, ); final Status devFSStatus = globals.logger.startProgress( 'Syncing files to device ${device.device.name}...', diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index 8897db38fcb9f69515b78a9c93ae6bc86e8fd5de..ad3074a2c3e5b241ad8f051fde8882265146f8b8 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -27,8 +27,6 @@ import 'build_system/targets/localizations.dart'; import 'bundle.dart'; import 'cache.dart'; import 'compile.dart'; -import 'dart/language_version.dart'; -import 'dart/package_map.dart'; import 'devfs.dart'; import 'device.dart'; import 'features.dart'; @@ -48,7 +46,6 @@ class FlutterDevice { TargetPlatform targetPlatform, ResidentCompiler generator, this.userIdentifier, - this.nullSafetyMode = NullSafetyMode.autodetect, }) : assert(buildInfo.trackWidgetCreation != null), generator = generator ?? ResidentCompiler( globals.artifacts.getArtifactPath( @@ -84,7 +81,6 @@ class FlutterDevice { String userIdentifier, }) async { ResidentCompiler generator; - NullSafetyMode nullSafetyMode = buildInfo.nullSafetyMode; final TargetPlatform targetPlatform = await device.targetPlatform; if (device.platformType == PlatformType.fuchsia) { targetModel = TargetModel.flutterRunner; @@ -96,39 +92,21 @@ class FlutterDevice { // a warning message and dump some debug information which can be // used to file a bug, but the compiler will still start up correctly. if (targetPlatform == TargetPlatform.web_javascript) { + // TODO(jonahwilliams): consistently provide these flags across platforms. Artifact platformDillArtifact; - List<String> extraFrontEndOptions; + final List<String> extraFrontEndOptions = List<String>.of(buildInfo.extraFrontEndOptions ?? <String>[]); if (buildInfo.nullSafetyMode == NullSafetyMode.unsound) { platformDillArtifact = Artifact.webPlatformKernelDill; - extraFrontEndOptions = buildInfo.extraFrontEndOptions; + if (!extraFrontEndOptions.contains('--no-sound-null-safety')) { + extraFrontEndOptions.add('--no-sound-null-safety'); + } } else if (buildInfo.nullSafetyMode == NullSafetyMode.sound) { platformDillArtifact = Artifact.webPlatformSoundKernelDill; - extraFrontEndOptions = buildInfo.extraFrontEndOptions; - } else { - final PackageConfig packageConfig = await loadPackageConfigWithLogging( - globals.fs.file(buildInfo.packagesPath), - logger: globals.logger, - ); - final File entrypointFile = globals.fs.file(target); - final LanguageVersion languageVersion = determineLanguageVersion( - entrypointFile, - packageConfig.packageOf(entrypointFile.absolute.uri), - ); - if (languageVersion.major >= nullSafeVersion.major && languageVersion.minor >= nullSafeVersion.minor) { - platformDillArtifact = Artifact.webPlatformSoundKernelDill; - extraFrontEndOptions = <String>[ - ...?buildInfo.extraFrontEndOptions, - '--sound-null-safety', - ]; - nullSafetyMode = NullSafetyMode.sound; - } else { - platformDillArtifact = Artifact.webPlatformKernelDill; - extraFrontEndOptions = <String>[ - ...?buildInfo.extraFrontEndOptions, - '--no-sound-null-safety', - ]; - nullSafetyMode = NullSafetyMode.unsound; + if (!extraFrontEndOptions.contains('--sound-null-safety')) { + extraFrontEndOptions.add('--sound-null-safety'); } + } else { + assert(false); } generator = ResidentCompiler( @@ -202,7 +180,6 @@ class FlutterDevice { generator: generator, buildInfo: buildInfo, userIdentifier: userIdentifier, - nullSafetyMode: nullSafetyMode, ); } @@ -210,7 +187,6 @@ class FlutterDevice { final ResidentCompiler generator; final BuildInfo buildInfo; final String userIdentifier; - final NullSafetyMode nullSafetyMode; DevFSWriter devFSWriter; Stream<Uri> observatoryUris; diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart index d24c6e85c56f948e9d01c8aacd83cd370c7842dd..2ed8b1524e199e6f87a48d5918069a6e3f50934f 100644 --- a/packages/flutter_tools/lib/src/run_hot.dart +++ b/packages/flutter_tools/lib/src/run_hot.dart @@ -307,10 +307,6 @@ class HotRunner extends ResidentRunner { firstBuildTime = DateTime.now(); final List<Future<bool>> startupTasks = <Future<bool>>[]; - final PackageConfig packageConfig = await loadPackageConfigWithLogging( - globals.fs.file(debuggingOptions.buildInfo.packagesPath), - logger: globals.logger, - ); for (final FlutterDevice device in flutterDevices) { // Here we initialize the frontend_server concurrently with the platform // build, reducing overall initialization time. This is safe because the first @@ -331,7 +327,7 @@ class HotRunner extends ResidentRunner { getDefaultApplicationKernelPath( trackWidgetCreation: debuggingOptions.buildInfo.trackWidgetCreation, ), - packageConfig: packageConfig, + packageConfig: debuggingOptions.buildInfo.packageConfig, ).then((CompilerOutput output) => output?.errorCount == 0) ); } @@ -386,7 +382,8 @@ class HotRunner extends ResidentRunner { urisToMonitor: flutterDevices[0].devFS.sources, packagesPath: packagesFilePath, asyncScanning: hotRunnerConfig.asyncScanning, - packageConfig: flutterDevices[0].devFS.lastPackageConfig, + packageConfig: flutterDevices[0].devFS.lastPackageConfig + ?? debuggingOptions.buildInfo.packageConfig, ); final File entrypointFile = globals.fs.file(mainPath); if (!entrypointFile.existsSync()) { @@ -1211,7 +1208,7 @@ class ProjectFileInvalidator { // Initial load. assert(urisToMonitor.isEmpty); return InvalidationResult( - packageConfig: await _createPackageConfig(packagesPath), + packageConfig: packageConfig, uris: <Uri>[] ); } diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index d761cded01095261bd6fd6f990e467f7435e12e7..36f510cae69ba4622ba5bc50698c4f04fe781797 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -6,6 +6,7 @@ import 'package:args/args.dart'; import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:meta/meta.dart'; +import 'package:package_config/package_config_types.dart'; import '../application_package.dart'; import '../base/common.dart'; @@ -21,6 +22,8 @@ import '../build_system/targets/icon_tree_shaker.dart' show kIconTreeShakerEnabl import '../bundle.dart' as bundle; import '../cache.dart'; import '../dart/generate_synthetic_packages.dart'; +import '../dart/language_version.dart'; +import '../dart/package_map.dart'; import '../dart/pub.dart'; import '../device.dart'; import '../features.dart'; @@ -758,6 +761,11 @@ abstract class FlutterCommand extends Command<void> { ? stringArg('build-number') : null; + final File packagesFile = globals.fs.file( + globalResults['packages'] as String ?? globals.fs.path.absolute('.dart_tool', 'package_config.json')); + final PackageConfig packageConfig = await loadPackageConfigWithLogging( + packagesFile, logger: globals.logger, throwOnError: false); + final List<String> experiments = argParser.options.containsKey(FlutterOptions.kEnableExperiment) ? stringsArg(FlutterOptions.kEnableExperiment).toList() @@ -789,12 +797,28 @@ abstract class FlutterCommand extends Command<void> { codeSizeDirectory = directory.path; } - NullSafetyMode nullSafetyMode = NullSafetyMode.unsound; + NullSafetyMode nullSafetyMode = NullSafetyMode.sound; if (argParser.options.containsKey(FlutterOptions.kNullSafety)) { // Explicitly check for `true` and `false` so that `null` results in not - // passing a flag. This will use the automatically detected null-safety - // value based on the entrypoint - if (!argResults.wasParsed(FlutterOptions.kNullSafety)) { + // 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); + final LanguageVersion languageVersion = determineLanguageVersion( + entrypointFile, + packageConfig.packageOf(entrypointFile.absolute.uri), + ); + // Extra frontend options are only provided if explicitly + // requested. + if (languageVersion.major >= nullSafeVersion.major && languageVersion.minor >= nullSafeVersion.minor) { + nullSafetyMode = NullSafetyMode.sound; + } else { + nullSafetyMode = NullSafetyMode.unsound; + } + } else if (!wasNullSafetyFlagParsed) { + // This mode is only used for commands which do not build a single target like + // 'flutter test'. nullSafetyMode = NullSafetyMode.autodetect; } else if (boolArg(FlutterOptions.kNullSafety)) { nullSafetyMode = NullSafetyMode.sound; @@ -886,6 +910,7 @@ abstract class FlutterCommand extends Command<void> { nullSafetyMode: nullSafetyMode, codeSizeDirectory: codeSizeDirectory, androidGradleDaemon: androidGradleDaemon, + packageConfig: packageConfig, ); } diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart index 408ba646ce16c20d56f2fb7a5f0d0a8c27467998..7c6a3be3b3802fe21c356db08357bfa648083907 100644 --- a/packages/flutter_tools/lib/src/test/flutter_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart @@ -19,7 +19,6 @@ import '../build_info.dart'; import '../compile.dart'; import '../convert.dart'; import '../dart/language_version.dart'; -import '../dart/package_map.dart'; import '../globals.dart' as globals; import '../project.dart'; import '../test/test_wrapper.dart'; @@ -374,10 +373,7 @@ class FlutterPlatform extends PlatformPlugin { StreamChannel<dynamic> controller, int ourTestCount, ) async { - _packageConfig ??= await loadPackageConfigWithLogging( - globals.fs.file(buildInfo.packagesPath), - logger: globals.logger, - ); + _packageConfig ??= buildInfo.packageConfig; globals.printTrace('test $ourTestCount: starting test $testPath'); _AsyncError outOfBandError; // error that we couldn't send to the harness that we need to send via our future diff --git a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart index 4a6f60dcbf22ef857a10fa123e35b828dedfe0aa..642cc9356277946c90baffadf5b9a9184536e0af 100644 --- a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart @@ -42,6 +42,7 @@ class FlutterWebPlatform extends PlatformPlugin { FlutterProject flutterProject, String shellPath, this.updateGoldens, + @required BuildInfo buildInfo, }) { final shelf.Cascade cascade = shelf.Cascade() .add(_webSocketHandler.handler) @@ -67,7 +68,7 @@ class FlutterWebPlatform extends PlatformPlugin { _testGoldenComparator = TestGoldenComparator( shellPath, - () => TestCompiler(BuildInfo.debug, flutterProject), + () => TestCompiler(buildInfo, flutterProject), ); } @@ -76,6 +77,7 @@ class FlutterWebPlatform extends PlatformPlugin { String shellPath, bool updateGoldens = false, bool pauseAfterLoad = false, + @required BuildInfo buildInfo, }) async { final shelf_io.IOServer server = shelf_io.IOServer(await HttpMultiServer.loopback(0)); @@ -86,6 +88,7 @@ class FlutterWebPlatform extends PlatformPlugin { flutterProject: flutterProject, shellPath: shellPath, updateGoldens: updateGoldens, + buildInfo: buildInfo, ); } diff --git a/packages/flutter_tools/lib/src/test/runner.dart b/packages/flutter_tools/lib/src/test/runner.dart index dfc23252f43cd8636be74ec630d31785afec3e8b..05ac3765d0f9f0a2e1d47f2bb8bab62ab483460b 100644 --- a/packages/flutter_tools/lib/src/test/runner.dart +++ b/packages/flutter_tools/lib/src/test/runner.dart @@ -148,6 +148,7 @@ class _FlutterTestRunnerImpl implements FlutterTestRunner { shellPath: shellPath, flutterProject: flutterProject, pauseAfterLoad: startPaused, + buildInfo: buildInfo, ); }, ); diff --git a/packages/flutter_tools/lib/src/test/test_compiler.dart b/packages/flutter_tools/lib/src/test/test_compiler.dart index fbb79ad9b5240193ecc75f336835e063b30d4a12..a9d39f66d25f188e41be4f31e655ce62dbd31cea 100644 --- a/packages/flutter_tools/lib/src/test/test_compiler.dart +++ b/packages/flutter_tools/lib/src/test/test_compiler.dart @@ -12,7 +12,6 @@ import '../base/file_system.dart'; import '../build_info.dart'; import '../bundle.dart'; import '../compile.dart'; -import '../dart/package_map.dart'; import '../globals.dart' as globals; import '../project.dart'; @@ -128,10 +127,7 @@ class TestCompiler { return; } if (_packageConfig == null) { - _packageConfig ??= await loadPackageConfigWithLogging( - globals.fs.file(buildInfo.packagesPath), - logger: globals.logger, - ); + _packageConfig ??= buildInfo.packageConfig; // Compilation will fail if there is no flutter_test dependency, since // this library is imported by the generated entrypoint script. if (_packageConfig['test_api'] == null) { diff --git a/packages/flutter_tools/test/general.shard/project_file_invalidator_test.dart b/packages/flutter_tools/test/general.shard/project_file_invalidator_test.dart index 20fa4d5243266f03dc0ce8d414e135150e650095..cac35d40af69e10d26d81e929cdca8179e7ff61c 100644 --- a/packages/flutter_tools/test/general.shard/project_file_invalidator_test.dart +++ b/packages/flutter_tools/test/general.shard/project_file_invalidator_test.dart @@ -143,7 +143,8 @@ void main() { packageConfig: packageConfig, ); - expect(invalidationResult.packageConfig, isNot(packageConfig)); + // Initial package config is re-used. + expect(invalidationResult.packageConfig, packageConfig); fileSystem.file('.packages') .writeAsStringSync('foo:lib/\n'); diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart index eb5ffbee58acbfd7fcde755cb72f66bb385fea36..2b824dfdf09488d53e7fd024a86da38d01b1733a 100644 --- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart @@ -2501,7 +2501,7 @@ void main() { )).generator as DefaultResidentCompiler; expect(residentCompiler.initializeFromDill, - globals.fs.path.join(getBuildDirectory(), 'cache.dill')); + globals.fs.path.join(getBuildDirectory(), 'fbbe6a61fb7a1de317d381f8df4814e5.cache.dill')); expect(residentCompiler.librariesSpec, globals.fs.file(globals.artifacts.getArtifactPath(Artifact.flutterWebLibrariesJson)) .uri.toString()); diff --git a/packages/flutter_tools/test/general.shard/test_compiler_test.dart b/packages/flutter_tools/test/general.shard/test_compiler_test.dart index 1c6bc87062901d5c360de2d090c40d3854b20362..ed38d3f295a453dc7a8941d03ae6b6f4f870e0ec 100644 --- a/packages/flutter_tools/test/general.shard/test_compiler_test.dart +++ b/packages/flutter_tools/test/general.shard/test_compiler_test.dart @@ -12,6 +12,7 @@ import 'package:flutter_tools/src/compile.dart'; import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/test/test_compiler.dart'; import 'package:mockito/mockito.dart'; +import 'package:package_config/package_config_types.dart'; import '../src/common.dart'; import '../src/context.dart'; @@ -22,6 +23,15 @@ final Platform linuxPlatform = FakePlatform( environment: <String, String>{}, ); +final BuildInfo debugBuild = BuildInfo( + BuildMode.debug, + '', + treeShakeIcons: false, + packageConfig: PackageConfig(<Package>[ + Package('test_api', Uri.parse('file:///test_api/')), + ]) +); + void main() { MockResidentCompiler residentCompiler; FileSystem fileSystem; @@ -29,17 +39,13 @@ void main() { setUp(() { fileSystem = MemoryFileSystem.test(); fileSystem.file('pubspec.yaml').createSync(); - fileSystem.file('.packages').writeAsStringSync('flutter_test:flutter_test/'); fileSystem.file('test/foo.dart').createSync(recursive: true); - fileSystem.file('.packages') - ..createSync() - ..writeAsStringSync('test_api:test_api/\n'); residentCompiler = MockResidentCompiler(); }); testUsingContext('TestCompiler reports a dill file when compile is successful', () async { final FakeTestCompiler testCompiler = FakeTestCompiler( - BuildInfo.debug, + debugBuild, FlutterProject.current(), residentCompiler, ); @@ -64,7 +70,7 @@ void main() { testUsingContext('TestCompiler reports null when a compile fails', () async { final FakeTestCompiler testCompiler = FakeTestCompiler( - BuildInfo.debug, + debugBuild, FlutterProject.current(), residentCompiler, ); @@ -90,7 +96,7 @@ void main() { testUsingContext('TestCompiler disposing test compiler shuts down backing compiler', () async { final FakeTestCompiler testCompiler = FakeTestCompiler( - BuildInfo.debug, + debugBuild, FlutterProject.current(), residentCompiler, ); @@ -115,7 +121,6 @@ void main() { FlutterProject.current(), residentCompiler, ); - fileSystem.file('.packages').writeAsStringSync('\n'); expect(await testCompiler.compile(Uri.parse('test/foo.dart')), null); expect(testLogger.errorText, contains('Error: cannot run without a dependency on ' diff --git a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart index bf3aa54401d521eff18d6c24fc03d20e8e5bc7ee..e1e82a732292bac77fbc54813f553a021920d43c 100644 --- a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart +++ b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart @@ -591,14 +591,12 @@ void main() { })); test('Can start web server with specified assets', () => testbed.run(() async { - globals.fs.file('.packages').writeAsStringSync('\n'); final File outputFile = globals.fs.file(globals.fs.path.join('lib', 'main.dart')) ..createSync(recursive: true); outputFile.parent.childFile('a.sources').writeAsStringSync(''); outputFile.parent.childFile('a.json').writeAsStringSync('{}'); outputFile.parent.childFile('a.map').writeAsStringSync('{}'); outputFile.parent.childFile('a.metadata').writeAsStringSync('{}'); - outputFile.parent.childFile('.packages').writeAsStringSync('\n'); final ResidentCompiler residentCompiler = MockResidentCompiler(); when(residentCompiler.recompile( @@ -708,14 +706,12 @@ void main() { })); test('Can start web server with specified assets in sound null safety mode', () => testbed.run(() async { - globals.fs.file('.packages').writeAsStringSync('\n'); final File outputFile = globals.fs.file(globals.fs.path.join('lib', 'main.dart')) ..createSync(recursive: true); outputFile.parent.childFile('a.sources').writeAsStringSync(''); outputFile.parent.childFile('a.json').writeAsStringSync('{}'); outputFile.parent.childFile('a.map').writeAsStringSync('{}'); outputFile.parent.childFile('a.metadata').writeAsStringSync('{}'); - outputFile.parent.childFile('.packages').writeAsStringSync('\n'); final ResidentCompiler residentCompiler = MockResidentCompiler(); when(residentCompiler.recompile( @@ -739,14 +735,14 @@ void main() { BuildMode.debug, '', treeShakeIcons: false, - nullSafetyMode: NullSafetyMode.autodetect, + nullSafetyMode: NullSafetyMode.sound, ), enableDwds: false, entrypoint: Uri.base, testMode: true, expressionCompiler: null, chromiumLauncher: null, - nullSafetyMode: NullSafetyMode.autodetect, + nullSafetyMode: NullSafetyMode.sound, ); webDevFS.requireJS.createSync(recursive: true); webDevFS.stackTraceMapper.createSync(recursive: true); @@ -759,13 +755,13 @@ void main() { ..createSync(recursive: true) ..writeAsStringSync('GENERATED'); final String webPrecompiledSdk = globals.artifacts - .getArtifactPath(Artifact.webPrecompiledSdk); + .getArtifactPath(Artifact.webPrecompiledSoundSdk); final String webPrecompiledSdkSourcemaps = globals.artifacts - .getArtifactPath(Artifact.webPrecompiledSdkSourcemaps); + .getArtifactPath(Artifact.webPrecompiledSoundSdkSourcemaps); final String webPrecompiledCanvaskitSdk = globals.artifacts - .getArtifactPath(Artifact.webPrecompiledCanvaskitSdk); + .getArtifactPath(Artifact.webPrecompiledCanvaskitSoundSdk); final String webPrecompiledCanvaskitSdkSourcemaps = globals.artifacts - .getArtifactPath(Artifact.webPrecompiledCanvaskitSdkSourcemaps); + .getArtifactPath(Artifact.webPrecompiledCanvaskitSoundSdkSourcemaps); globals.fs.file(webPrecompiledSdk) ..createSync(recursive: true) ..writeAsStringSync('HELLO'); @@ -823,13 +819,11 @@ void main() { })); test('Can start web server with hostname any', () => testbed.run(() async { - globals.fs.file('.packages').writeAsStringSync('\n'); final File outputFile = globals.fs.file(globals.fs.path.join('lib', 'main.dart')) ..createSync(recursive: true); outputFile.parent.childFile('a.sources').writeAsStringSync(''); outputFile.parent.childFile('a.json').writeAsStringSync('{}'); outputFile.parent.childFile('a.map').writeAsStringSync('{}'); - outputFile.parent.childFile('.packages').writeAsStringSync('\n'); final ResidentCompiler residentCompiler = MockResidentCompiler(); when(residentCompiler.recompile( @@ -867,13 +861,11 @@ void main() { })); test('Can start web server with canvaskit enabled', () => testbed.run(() async { - globals.fs.file('.packages').writeAsStringSync('\n'); final File outputFile = globals.fs.file(globals.fs.path.join('lib', 'main.dart')) ..createSync(recursive: true); outputFile.parent.childFile('a.sources').writeAsStringSync(''); outputFile.parent.childFile('a.json').writeAsStringSync('{}'); outputFile.parent.childFile('a.map').writeAsStringSync('{}'); - outputFile.parent.childFile('.packages').writeAsStringSync('\n'); final ResidentCompiler residentCompiler = MockResidentCompiler(); when(residentCompiler.recompile( @@ -919,13 +911,11 @@ void main() { })); test('Can start web server with auto detect enabled', () => testbed.run(() async { - globals.fs.file('.packages').writeAsStringSync('\n'); final File outputFile = globals.fs.file(globals.fs.path.join('lib', 'main.dart')) ..createSync(recursive: true); outputFile.parent.childFile('a.sources').writeAsStringSync(''); outputFile.parent.childFile('a.json').writeAsStringSync('{}'); outputFile.parent.childFile('a.map').writeAsStringSync('{}'); - outputFile.parent.childFile('.packages').writeAsStringSync('\n'); final ResidentCompiler residentCompiler = MockResidentCompiler(); when(residentCompiler.recompile(