diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index dea1af96901..85842f04611 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 22.6.0 + +* [swift] Adds `includeErrorClass` to `SwiftOptions`. + ## 22.5.0 * [swift] Adds implementation for `@ProxyApi`. diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index 37bce3f6402..cbec3e8da6f 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -14,7 +14,7 @@ import 'ast.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '22.5.0'; +const String pigeonVersion = '22.6.0'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 8b8a0506877..075049d9829 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -745,6 +745,7 @@ class SwiftGeneratorAdapter implements GeneratorAdapter { path.posix.join(options.basePath ?? '', options.copyrightHeader)) : null, errorClassName: swiftOptions.errorClassName, + includeErrorClass: swiftOptions.includeErrorClass, )); const SwiftGenerator generator = SwiftGenerator(); generator.generate( diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index bda343b8b6c..289c50dbd88 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -28,6 +28,7 @@ class SwiftOptions { this.copyrightHeader, this.fileSpecificClassNameComponent, this.errorClassName, + this.includeErrorClass = true, }); /// A copyright header that will get prepended to generated code. @@ -39,6 +40,12 @@ class SwiftOptions { /// The name of the error class used for passing custom error parameters. final String? errorClassName; + /// Whether to include the error class in generation. + /// + /// This should only ever be set to false if you have another generated + /// Swift file in the same directory. + final bool includeErrorClass; + /// Creates a [SwiftOptions] from a Map representation where: /// `x = SwiftOptions.fromList(x.toMap())`. static SwiftOptions fromList(Map map) { @@ -47,6 +54,7 @@ class SwiftOptions { fileSpecificClassNameComponent: map['fileSpecificClassNameComponent'] as String?, errorClassName: map['errorClassName'] as String?, + includeErrorClass: map['includeErrorClass'] as bool? ?? true, ); } @@ -58,6 +66,7 @@ class SwiftOptions { if (fileSpecificClassNameComponent != null) 'fileSpecificClassNameComponent': fileSpecificClassNameComponent!, if (errorClassName != null) 'errorClassName': errorClassName!, + 'includeErrorClass': includeErrorClass, }; return result; } @@ -1303,7 +1312,9 @@ private func nilOrValue(_ value: Any?) -> T? { .any((Api api) => api.methods.isNotEmpty); final bool hasProxyApi = root.apis.any((Api api) => api is AstProxyApi); - _writePigeonError(generatorOptions, indent); + if (generatorOptions.includeErrorClass) { + _writePigeonError(generatorOptions, indent); + } if (hasHostApi || hasProxyApi) { _writeWrapResult(indent); diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index df2a2009fec..cddaae51581 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,7 +2,7 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22 -version: 22.5.0 # This must match the version in lib/generator_tools.dart +version: 22.6.0 # This must match the version in lib/generator_tools.dart environment: sdk: ^3.3.0 diff --git a/packages/pigeon/tool/shared/generation.dart b/packages/pigeon/tool/shared/generation.dart index 695789fb626..4cee0d4de56 100644 --- a/packages/pigeon/tool/shared/generation.dart +++ b/packages/pigeon/tool/shared/generation.dart @@ -91,7 +91,8 @@ Future generateTestPigeons( ? 'FlutterError' : '${pascalCaseName}Error'; - final bool swiftErrorUseDefaultErrorName = input == 'core_tests'; + final bool swiftErrorUseDefaultErrorName = + input == 'core_tests' || input == 'background_platform_channels'; final String? swiftErrorClassName = swiftErrorUseDefaultErrorName ? null : '${pascalCaseName}Error'; @@ -117,6 +118,7 @@ Future generateTestPigeons( ? null : '$outputBase/ios/Classes/$pascalCaseName.gen.swift', swiftErrorClassName: swiftErrorClassName, + swiftIncludeErrorClass: input != 'core_tests', // Linux gobjectHeaderOut: skipLanguages.contains(GeneratorLanguage.gobject) ? null @@ -148,6 +150,7 @@ Future generateTestPigeons( ? null : '$outputBase/macos/Classes/$pascalCaseName.gen.swift', swiftErrorClassName: swiftErrorClassName, + swiftIncludeErrorClass: input != 'core_tests', suppressVersion: true, dartPackageName: 'pigeon_integration_tests', injectOverflowTypes: includeOverflow && input == 'core_tests', @@ -212,6 +215,7 @@ Future runPigeon({ String? kotlinPackage, String? kotlinErrorClassName, bool kotlinIncludeErrorClass = true, + bool swiftIncludeErrorClass = true, String? swiftOut, String? swiftErrorClassName, String? cppHeaderOut, @@ -272,6 +276,7 @@ Future runPigeon({ swiftOut: swiftOut, swiftOptions: SwiftOptions( errorClassName: swiftErrorClassName, + includeErrorClass: swiftIncludeErrorClass, ), basePath: basePath, dartPackageName: dartPackageName,