diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index abab950f5c1..0b055ca520a 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -1373,12 +1373,20 @@ ${_argParser.usage}'''; final List errors = []; errors.addAll(parseResults.errors); + // Helper to clean up non-Stdout sinks. + Future releaseSink(IOSink sink) async { + if (sink is! Stdout) { + await sink.close(); + } + } + for (final Generator generator in safeGenerators) { final IOSink? sink = generator.shouldGenerate(options); if (sink != null) { final List generatorErrors = generator.validate(options, parseResults.root); errors.addAll(generatorErrors); + await releaseSink(sink); } } @@ -1419,6 +1427,7 @@ ${_argParser.usage}'''; if (sink != null) { generator.generate(sink, options, parseResults.root); await sink.flush(); + await releaseSink(sink); } } diff --git a/packages/pigeon/tool/run_tests.dart b/packages/pigeon/tool/run_tests.dart index 3af6f082d7d..f4ddbfa05e8 100644 --- a/packages/pigeon/tool/run_tests.dart +++ b/packages/pigeon/tool/run_tests.dart @@ -158,8 +158,7 @@ Future _generateDart(Map jobs) async { for (final MapEntry job in jobs.entries) { // TODO(gaaclarke): Make this run the jobs in parallel. A bug in Dart // blocked this (https://github.com/dart-lang/pub/pull/3285). - final int result = await runPigeon( - input: job.key, dartOut: job.value, streamOutput: false); + final int result = await runPigeon(input: job.key, dartOut: job.value); if (result != 0) { return result; } diff --git a/packages/pigeon/tool/shared/generation.dart b/packages/pigeon/tool/shared/generation.dart index 0ed5c8cc078..9e58eb2c5b7 100644 --- a/packages/pigeon/tool/shared/generation.dart +++ b/packages/pigeon/tool/shared/generation.dart @@ -3,8 +3,7 @@ // found in the LICENSE file. import 'package:path/path.dart' as p; - -import 'process_utils.dart'; +import 'package:pigeon/pigeon.dart'; enum GeneratorLanguages { cpp, @@ -164,65 +163,24 @@ Future runPigeon({ String? javaPackage, String? objcHeaderOut, String? objcSourceOut, - bool streamOutput = true, }) async { - const bool hasDart = false; - final List args = [ - 'run', - 'pigeon', - '--input', - input, - '--copyright_header', - './copyright_header.txt', - ]; - if (kotlinOut != null) { - args.addAll(['--experimental_kotlin_out', kotlinOut]); - } - if (kotlinPackage != null) { - args.addAll(['--experimental_kotlin_package', kotlinPackage]); - } - if (swiftOut != null) { - args.addAll(['--experimental_swift_out', swiftOut]); - } - if (cppHeaderOut != null) { - args.addAll([ - '--experimental_cpp_header_out', - cppHeaderOut, - ]); - } - if (cppSourceOut != null) { - args.addAll([ - '--experimental_cpp_source_out', - cppSourceOut, - ]); - } - if (cppNamespace != null) { - args.addAll([ - '--cpp_namespace', - cppNamespace, - ]); - } - if (dartOut != null) { - args.addAll(['--dart_out', dartOut]); - } - if (dartTestOut != null) { - args.addAll(['--dart_test_out', dartTestOut]); - } - if (!hasDart) { - args.add('--one_language'); - } - if (javaOut != null) { - args.addAll(['--java_out', javaOut]); - } - if (javaPackage != null) { - args.addAll(['--java_package', javaPackage]); - } - if (objcHeaderOut != null) { - args.addAll(['--objc_header_out', objcHeaderOut]); - } - if (objcSourceOut != null) { - args.addAll(['--objc_source_out', objcSourceOut]); - } - return runProcess('dart', args, - streamOutput: streamOutput, logFailure: !streamOutput); + return Pigeon.runWithOptions(PigeonOptions( + input: input, + copyrightHeader: './copyright_header.txt', + dartOut: dartOut, + dartTestOut: dartTestOut, + dartOptions: const DartOptions(), + cppHeaderOut: cppHeaderOut, + cppSourceOut: cppSourceOut, + cppOptions: CppOptions(namespace: cppNamespace), + javaOut: javaOut, + javaOptions: JavaOptions(package: javaPackage), + kotlinOut: kotlinOut, + kotlinOptions: KotlinOptions(package: kotlinPackage), + objcHeaderOut: objcHeaderOut, + objcSourceOut: objcSourceOut, + objcOptions: const ObjcOptions(), + swiftOut: swiftOut, + swiftOptions: const SwiftOptions(), + )); }