From 891ae3bb51ce146b955da7278dd81ed2d7d95003 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 30 Nov 2022 23:45:02 -0500 Subject: [PATCH] [pigeon] Do generation for tests via the library (#2861) * [pigeon] Do generation for tests via the library For test output generation in the parts of the test script that have been converted to Dart, use the library entrypoint instead of shelling out to `pigeon` each time. * Analyzer fix * Add missing sink closes to fix Windows * Don't close output if it's stdout --- packages/pigeon/lib/pigeon_lib.dart | 9 +++ packages/pigeon/tool/run_tests.dart | 3 +- packages/pigeon/tool/shared/generation.dart | 82 +++++---------------- 3 files changed, 30 insertions(+), 64 deletions(-) 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(), + )); }