From 098ece522d41f25370d19f5ec09d93ce2e727019 Mon Sep 17 00:00:00 2001 From: Emmanuel Garcia Date: Tue, 23 Feb 2021 11:45:33 -0800 Subject: [PATCH] Disable warnings for the dart plugin registrant (#76561) --- packages/flutter_tools/lib/src/compile.dart | 2 + packages/flutter_tools/lib/src/plugins.dart | 59 +++++++++++-------- .../test/general.shard/plugins_test.dart | 32 ++++++++++ 3 files changed, 67 insertions(+), 26 deletions(-) diff --git a/packages/flutter_tools/lib/src/compile.dart b/packages/flutter_tools/lib/src/compile.dart index 1f9f584b9df..836bb125e81 100644 --- a/packages/flutter_tools/lib/src/compile.dart +++ b/packages/flutter_tools/lib/src/compile.dart @@ -250,6 +250,8 @@ class KernelCompiler { mainUri, newMainDart, mainFile, + // TODO(egarciad): Turn this on when the plugins are fixed. + throwOnPluginPubspecError: false, )) { mainUri = newMainDart.path; } diff --git a/packages/flutter_tools/lib/src/plugins.dart b/packages/flutter_tools/lib/src/plugins.dart index 81751a50a5a..a27359d18c2 100644 --- a/packages/flutter_tools/lib/src/plugins.dart +++ b/packages/flutter_tools/lib/src/plugins.dart @@ -539,22 +539,24 @@ List resolvePlatformImplementation( if (plugin.implementsPackage == null || plugin.implementsPackage.isEmpty) { final String defaultImplementation = plugin.defaultPackagePlatforms[platform]; if (defaultImplementation == null) { - globals.printError( - 'Plugin `${plugin.name}` doesn\'t implement a plugin interface, nor sets ' - 'a default implementation in pubspec.yaml.\n\n' - 'To set a default implementation, use:\n' - 'flutter:\n' - ' plugin:\n' - ' platforms:\n' - ' $platform:\n' - ' $kDefaultPackage: \n' - '\n' - 'To implement an interface, use:\n' - 'flutter:\n' - ' plugin:\n' - ' implements: ' - '\n' - ); + if (throwOnPluginPubspecError) { + globals.printError( + 'Plugin `${plugin.name}` doesn\'t implement a plugin interface, nor sets ' + 'a default implementation in pubspec.yaml.\n\n' + 'To set a default implementation, use:\n' + 'flutter:\n' + ' plugin:\n' + ' platforms:\n' + ' $platform:\n' + ' $kDefaultPackage: \n' + '\n' + 'To implement an interface, use:\n' + 'flutter:\n' + ' plugin:\n' + ' implements: ' + '\n' + ); + } didFindError = true; continue; } @@ -569,12 +571,14 @@ List resolvePlatformImplementation( if (directDependencyResolutions.containsKey(resolutionKey)) { final PluginInterfaceResolution currResolution = directDependencyResolutions[resolutionKey]; if (currResolution.plugin.isDirectDependency && plugin.isDirectDependency) { - globals.printError( - 'Plugin `${plugin.name}` implements an interface for `$platform`, which was already ' - 'implemented by plugin `${currResolution.plugin.name}`.\n' - 'To fix this issue, remove either dependency from pubspec.yaml.' - '\n\n' - ); + if (throwOnPluginPubspecError) { + globals.printError( + 'Plugin `${plugin.name}` implements an interface for `$platform`, which was already ' + 'implemented by plugin `${currResolution.plugin.name}`.\n' + 'To fix this issue, remove either dependency from pubspec.yaml.' + '\n\n' + ); + } didFindError = true; } if (currResolution.plugin.isDirectDependency) { @@ -931,19 +935,22 @@ Future _writeAndroidPluginRegistrant(FlutterProject project, List /// Returns [true] if it's necessary to create a plugin registrant, and /// if the new entrypoint was written to disk. /// +/// This method also validates each plugin's pubspec.yaml, but errors are only +/// reported if [throwOnPluginPubspecError] is [true]. +/// /// For more details, see https://flutter.dev/go/federated-plugins. Future generateMainDartWithPluginRegistrant( FlutterProject rootProject, PackageConfig packageConfig, String currentMainUri, File newMainDart, - File mainFile, -) async { + File mainFile, { + bool throwOnPluginPubspecError, +}) async { final List plugins = await findPlugins(rootProject); final List resolutions = resolvePlatformImplementation( plugins, - // TODO(egarciad): Turn this on after fixing the pubspec.yaml of the plugins used in tests. - throwOnPluginPubspecError: false, + throwOnPluginPubspecError: throwOnPluginPubspecError, ); final LanguageVersion entrypointVersion = determineLanguageVersion( mainFile, diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index 137c7b7dbe1..87f64b9c90d 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -1915,6 +1915,7 @@ void main() { 'package:app/main.dart', flutterBuild, mainFile, + throwOnPluginPubspecError: true, ); expect(didGenerate, isTrue); expect(flutterBuild.readAsStringSync(), @@ -2000,6 +2001,7 @@ void main() { 'package:app/main.dart', flutterBuild, mainFile, + throwOnPluginPubspecError: true, ), throwsToolExit(message: 'Invalid plugin specification url_launcher_macos.\n' 'Invalid "macos" plugin specification.' @@ -2055,6 +2057,7 @@ void main() { 'package:app/main.dart', flutterBuild, mainFile, + throwOnPluginPubspecError: true, ), throwsToolExit(message: 'Invalid plugin specification url_launcher_macos.\n' 'Cannot find the `flutter.plugin.platforms` key in the `pubspec.yaml` file. ' @@ -2066,6 +2069,35 @@ void main() { FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), }); + + testUsingContext('Does not show error messages if throwOnPluginPubspecError is false', () async { + final FileSystem fs = MemoryFileSystem(); + final Set directDependencies = { + 'url_launcher_windows', + }; + resolvePlatformImplementation([ + Plugin.fromYaml( + 'url_launcher_windows', + '', + YamlMap.wrap({ + 'platforms': { + 'windows': { + 'dartPluginClass': 'UrlLauncherPluginWindows', + }, + }, + }), + [], + fileSystem: fs, + appDependencies: directDependencies, + ), + ], + throwOnPluginPubspecError: false, + ); + expect(testLogger.errorText, ''); + }, overrides: { + FileSystem: () => fs, + ProcessManager: () => FakeProcessManager.any(), + }); }); group('pubspec', () {