From df851d59441d8dec12456dc6aad1099cb8c77b69 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 20 Dec 2022 21:29:39 -0800 Subject: [PATCH 01/45] Rename generator class to Adapter --- packages/pigeon/lib/pigeon_lib.dart | 143 ++++++++++++++-------------- 1 file changed, 72 insertions(+), 71 deletions(-) diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 5da91c4a7c5..a8348ea7474 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -355,18 +355,19 @@ IOSink? _openSink(String? output) { return sink; } -/// A generator that will write code to a sink based on the contents of [PigeonOptions]. -abstract class Generator { - /// Returns an [IOSink] instance to be written to if the [Generator] should - /// generate. If it returns `null`, the [Generator] will be skipped. +/// An adapter that will call a generator to write code to a sink +/// based on the contents of [PigeonOptions]. +abstract class Adapter { + /// Returns an [IOSink] instance to be written to if the [Adapter] should + /// generate. If it returns `null`, the [Adapter] will be skipped. IOSink? shouldGenerate(PigeonOptions options); /// Write the generated code described in [root] to [sink] using the /// [options]. void generate(StringSink sink, PigeonOptions options, Root root); - /// Generates errors that would only be appropriate for this [Generator]. For - /// example, maybe a certain feature isn't implemented in a [Generator] yet. + /// Generates errors that would only be appropriate for this [Adapter]. For + /// example, maybe a certain feature isn't implemented in a [Adapter] yet. List validate(PigeonOptions options, Root root); } @@ -378,10 +379,10 @@ DartOptions _dartOptionsWithCopyrightHeader( copyrightHeader != null ? _lineReader(copyrightHeader) : null)); } -/// A [Generator] that generates the AST. -class AstGenerator implements Generator { - /// Constructor for [AstGenerator]. - const AstGenerator(); +/// A [Adapter] that generates the AST. +class AstAdapter implements Adapter { + /// Constructor for [AstAdapter]. + const AstAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -395,10 +396,10 @@ class AstGenerator implements Generator { List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates Dart source code. -class DartGenerator implements Generator { - /// Constructor for [DartGenerator]. - const DartGenerator(); +/// A [Adapter] that generates Dart source code. +class DartAdapter implements Adapter { + /// Constructor for [DartAdapter]. + const DartAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -414,10 +415,10 @@ class DartGenerator implements Generator { List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates Dart test source code. -class DartTestGenerator implements Generator { - /// Constructor for [DartTestGenerator]. - const DartTestGenerator(); +/// A [Adapter] that generates Dart test source code. +class DartTestAdapter implements Adapter { + /// Constructor for [DartTestAdapter]. + const DartTestAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -445,10 +446,10 @@ class DartTestGenerator implements Generator { List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates Objective-C header code. -class ObjcHeaderGenerator implements Generator { - /// Constructor for [ObjcHeaderGenerator]. - const ObjcHeaderGenerator(); +/// A [Adapter] that generates Objective-C header code. +class ObjcHeaderAdapter implements Adapter { + /// Constructor for [ObjcHeaderAdapter]. + const ObjcHeaderAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -469,10 +470,10 @@ class ObjcHeaderGenerator implements Generator { validateObjc(options.objcOptions!, root); } -/// A [Generator] that generates Objective-C source code. -class ObjcSourceGenerator implements Generator { - /// Constructor for [ObjcSourceGenerator]. - const ObjcSourceGenerator(); +/// A [Adapter] that generates Objective-C source code. +class ObjcSourceAdapter implements Adapter { + /// Constructor for [ObjcSourceAdapter]. + const ObjcSourceAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -492,10 +493,10 @@ class ObjcSourceGenerator implements Generator { List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates Java source code. -class JavaGenerator implements Generator { - /// Constructor for [JavaGenerator]. - const JavaGenerator(); +/// A [Adapter] that generates Java source code. +class JavaAdapter implements Adapter { + /// Constructor for [JavaAdapter]. + const JavaAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -516,10 +517,10 @@ class JavaGenerator implements Generator { List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates Swift source code. -class SwiftGenerator implements Generator { - /// Constructor for [SwiftGenerator]. - const SwiftGenerator(); +/// A [Adapter] that generates Swift source code. +class SwiftAdapter implements Adapter { + /// Constructor for [SwiftAdapter]. + const SwiftAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -538,10 +539,10 @@ class SwiftGenerator implements Generator { List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates C++ header code. -class CppHeaderGenerator implements Generator { - /// Constructor for [CppHeaderGenerator]. - const CppHeaderGenerator(); +/// A [Adapter] that generates C++ header code. +class CppHeaderAdapter implements Adapter { + /// Constructor for [CppHeaderAdapter]. + const CppHeaderAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -563,10 +564,10 @@ class CppHeaderGenerator implements Generator { validateCpp(options.cppOptions!, root); } -/// A [Generator] that generates C++ source code. -class CppSourceGenerator implements Generator { - /// Constructor for [CppSourceGenerator]. - const CppSourceGenerator(); +/// A [Adapter] that generates C++ source code. +class CppSourceAdapter implements Adapter { + /// Constructor for [CppSourceAdapter]. + const CppSourceAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -586,10 +587,10 @@ class CppSourceGenerator implements Generator { List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates Kotlin source code. -class KotlinGenerator implements Generator { - /// Constructor for [KotlinGenerator]. - const KotlinGenerator(); +/// A [Adapter] that generates Kotlin source code. +class KotlinAdapter implements Adapter { + /// Constructor for [KotlinAdapter]. + const KotlinAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -1331,37 +1332,37 @@ ${_argParser.usage}'''; } /// The 'main' entrypoint used by the command-line tool. [args] are the - /// command-line arguments. The optional parameter [generators] allows you to + /// command-line arguments. The optional parameter [adapters] allows you to /// customize the generators that pigeon will use. The optional parameter /// [sdkPath] allows you to specify the Dart SDK path. static Future run(List args, - {List? generators, String? sdkPath}) { + {List? adapters, String? sdkPath}) { final PigeonOptions options = Pigeon.parseArgs(args); - return runWithOptions(options, generators: generators, sdkPath: sdkPath); + return runWithOptions(options, adapters: adapters, sdkPath: sdkPath); } /// The 'main' entrypoint used by external packages. [options] is - /// used when running the code generator. The optional parameter [generators] allows you to + /// used when running the code generator. The optional parameter [adapters] allows you to /// customize the generators that pigeon will use. The optional parameter /// [sdkPath] allows you to specify the Dart SDK path. static Future runWithOptions(PigeonOptions options, - {List? generators, String? sdkPath}) async { + {List? adapters, String? sdkPath}) async { final Pigeon pigeon = Pigeon.setup(); if (options.debugGenerators ?? false) { generator_tools.debugGenerators = true; } - final List safeGenerators = generators ?? - [ - const DartGenerator(), - const JavaGenerator(), - const SwiftGenerator(), - const KotlinGenerator(), - const CppHeaderGenerator(), - const CppSourceGenerator(), - const DartTestGenerator(), - const ObjcHeaderGenerator(), - const ObjcSourceGenerator(), - const AstGenerator(), + final List safeAdapters = adapters ?? + [ + const DartAdapter(), + const JavaAdapter(), + const SwiftAdapter(), + const KotlinAdapter(), + const CppHeaderAdapter(), + const CppSourceAdapter(), + const DartTestAdapter(), + const ObjcHeaderAdapter(), + const ObjcSourceAdapter(), + const AstAdapter(), ]; _executeConfigurePigeon(options); @@ -1383,12 +1384,12 @@ ${_argParser.usage}'''; } } - for (final Generator generator in safeGenerators) { - final IOSink? sink = generator.shouldGenerate(options); + for (final Adapter adapter in safeAdapters) { + final IOSink? sink = adapter.shouldGenerate(options); if (sink != null) { - final List generatorErrors = - generator.validate(options, parseResults.root); - errors.addAll(generatorErrors); + final List adapterErrors = + adapter.validate(options, parseResults.root); + errors.addAll(adapterErrors); await releaseSink(sink); } } @@ -1425,10 +1426,10 @@ ${_argParser.usage}'''; CppOptions(header: path.basename(options.cppHeaderOut!))))); } - for (final Generator generator in safeGenerators) { - final IOSink? sink = generator.shouldGenerate(options); + for (final Adapter adapter in safeAdapters) { + final IOSink? sink = adapter.shouldGenerate(options); if (sink != null) { - generator.generate(sink, options, parseResults.root); + adapter.generate(sink, options, parseResults.root); await sink.flush(); await releaseSink(sink); } From e40d679b8bacd7af8b6d913d3c5e5d96462be2da Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 20 Dec 2022 21:30:01 -0800 Subject: [PATCH 02/45] create new generator class and dart subclass --- packages/pigeon/lib/dart_generator.dart | 17 +++++++++++++++ packages/pigeon/lib/generator.dart | 29 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 packages/pigeon/lib/generator.dart diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 85956ced69e..c9c672a661d 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -9,6 +9,7 @@ import 'package:yaml/yaml.dart' as yaml; import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; /// Documentation comment open symbol. @@ -55,6 +56,22 @@ class DartOptions { } } +/// Class that manages all coe generation. +class DartGenerator extends Generator { + /// Instantiates a Generator. + DartGenerator({ + required DartOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates files for specified language with specified [languageOptions] + @override + void generate() { + // + } +} + String _escapeForDartSingleQuotedString(String raw) { return raw .replaceAll(r'\', r'\\') diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart new file mode 100644 index 00000000000..f45c113a7b6 --- /dev/null +++ b/packages/pigeon/lib/generator.dart @@ -0,0 +1,29 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'ast.dart'; + +/// A Super class of generator classes. +/// +/// This is meant to provide structure and direction for future generator work. +abstract class Generator { + /// Instantiates a Generator. + const Generator({ + required this.languageOptions, + required this.root, + required this.sink, + }); + + /// + final T languageOptions; + + /// + final Root root; + + /// + final StringSink sink; + + /// Generates files for specified language with specified [languageOptions] + void generate(); +} From 8c4e2a0a2b888f924638ba65d6e0a581836ee604 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 11:57:23 -0800 Subject: [PATCH 03/45] cpp and dart test gen --- packages/pigeon/lib/dart_generator.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index c9c672a661d..f9042b148ac 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -56,16 +56,16 @@ class DartOptions { } } -/// Class that manages all coe generation. +/// Class that manages all Dart code generation. class DartGenerator extends Generator { - /// Instantiates a Generator. + /// Instantiates a Dart Generator. DartGenerator({ required DartOptions languageOptions, required Root root, required StringSink sink, }) : super(languageOptions: languageOptions, root: root, sink: sink); - /// Generates files for specified language with specified [languageOptions] + /// Generates Dart files with specified [DartOptions] @override void generate() { // From bcdbdbcaf089550dac5c14b1c66e6ef5b6838b69 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 11:58:03 -0800 Subject: [PATCH 04/45] added files --- packages/pigeon/lib/cpp_generator.dart | 33 +++++++++++++++++++++++++ packages/pigeon/lib/dart_generator.dart | 16 ++++++++++++ packages/pigeon/lib/pigeon_lib.dart | 20 +++++++-------- 3 files changed, 59 insertions(+), 10 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 744f6e9ffce..584d4792ff2 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -4,6 +4,7 @@ import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; import 'pigeon_lib.dart' show Error; @@ -64,6 +65,38 @@ class CppOptions { } } +/// Class that manages all Cpp header code generation. +class CppHeaderGenerator extends Generator { + /// Instantiates a Cpp Generator. + CppHeaderGenerator({ + required CppOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates Cpp header files with specified [CppOptions] + @override + void generate() { + // + } +} + +/// Class that manages all Cpp code generation. +class CppSourceGenerator extends Generator { + /// Instantiates a Cpp Generator. + CppSourceGenerator({ + required CppOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates Cpp files with specified [CppOptions] + @override + void generate() { + // + } +} + String _getCodecSerializerName(Api api) => '${api.name}CodecSerializer'; const String _pointerPrefix = 'pointer'; diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index f9042b148ac..4ddbe9056ef 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -72,6 +72,22 @@ class DartGenerator extends Generator { } } +/// Class that manages all Dart code generation. +class DartTestGenerator extends Generator { + /// Instantiates a Dart Generator. + DartTestGenerator({ + required DartOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates Dart files with specified [DartOptions] + @override + void generate() { + // + } +} + String _escapeForDartSingleQuotedString(String raw) { return raw .replaceAll(r'\', r'\\') diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index a8348ea7474..5bab11a01bb 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -379,7 +379,7 @@ DartOptions _dartOptionsWithCopyrightHeader( copyrightHeader != null ? _lineReader(copyrightHeader) : null)); } -/// A [Adapter] that generates the AST. +/// An [Adapter] that generates the AST. class AstAdapter implements Adapter { /// Constructor for [AstAdapter]. const AstAdapter(); @@ -396,7 +396,7 @@ class AstAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// A [Adapter] that generates Dart source code. +/// An [Adapter] that generates Dart source code. class DartAdapter implements Adapter { /// Constructor for [DartAdapter]. const DartAdapter(); @@ -415,7 +415,7 @@ class DartAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// A [Adapter] that generates Dart test source code. +/// An [Adapter] that generates Dart test source code. class DartTestAdapter implements Adapter { /// Constructor for [DartTestAdapter]. const DartTestAdapter(); @@ -446,7 +446,7 @@ class DartTestAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// A [Adapter] that generates Objective-C header code. +/// An [Adapter] that generates Objective-C header code. class ObjcHeaderAdapter implements Adapter { /// Constructor for [ObjcHeaderAdapter]. const ObjcHeaderAdapter(); @@ -470,7 +470,7 @@ class ObjcHeaderAdapter implements Adapter { validateObjc(options.objcOptions!, root); } -/// A [Adapter] that generates Objective-C source code. +/// An [Adapter] that generates Objective-C source code. class ObjcSourceAdapter implements Adapter { /// Constructor for [ObjcSourceAdapter]. const ObjcSourceAdapter(); @@ -493,7 +493,7 @@ class ObjcSourceAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// A [Adapter] that generates Java source code. +/// An [Adapter] that generates Java source code. class JavaAdapter implements Adapter { /// Constructor for [JavaAdapter]. const JavaAdapter(); @@ -517,7 +517,7 @@ class JavaAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// A [Adapter] that generates Swift source code. +/// An [Adapter] that generates Swift source code. class SwiftAdapter implements Adapter { /// Constructor for [SwiftAdapter]. const SwiftAdapter(); @@ -539,7 +539,7 @@ class SwiftAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// A [Adapter] that generates C++ header code. +/// An [Adapter] that generates C++ header code. class CppHeaderAdapter implements Adapter { /// Constructor for [CppHeaderAdapter]. const CppHeaderAdapter(); @@ -564,7 +564,7 @@ class CppHeaderAdapter implements Adapter { validateCpp(options.cppOptions!, root); } -/// A [Adapter] that generates C++ source code. +/// An [Adapter] that generates C++ source code. class CppSourceAdapter implements Adapter { /// Constructor for [CppSourceAdapter]. const CppSourceAdapter(); @@ -587,7 +587,7 @@ class CppSourceAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// A [Adapter] that generates Kotlin source code. +/// An [Adapter] that generates Kotlin source code. class KotlinAdapter implements Adapter { /// Constructor for [KotlinAdapter]. const KotlinAdapter(); From 31bb7019a1065d505ee4ab34dca147cf2c7e0df7 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 12:09:44 -0800 Subject: [PATCH 05/45] Adds Generator class to all generators --- packages/pigeon/lib/java_generator.dart | 17 ++++++++++++ packages/pigeon/lib/kotlin_generator.dart | 17 ++++++++++++ packages/pigeon/lib/objc_generator.dart | 33 +++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index c52d976cfdf..e77c11da941 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -4,6 +4,7 @@ import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; import 'pigeon_lib.dart' show TaskQueueType; @@ -84,6 +85,22 @@ class JavaOptions { } } +/// Class that manages all Java code generation. +class JavaGenerator extends Generator { + /// Instantiates a Java Generator. + JavaGenerator({ + required JavaOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates Java files with specified [JavaOptions] + @override + void generate() { + // + } +} + /// Calculates the name of the codec that will be generated for [api]. String _getCodecName(Api api) => '${api.name}Codec'; diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index 1f52d3d22c3..371987d70af 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -4,6 +4,7 @@ import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; import 'pigeon_lib.dart' show TaskQueueType; @@ -64,6 +65,22 @@ class KotlinOptions { } } +/// Class that manages all Kotlin code generation. +class KotlinGenerator extends Generator { + /// Instantiates a Kotlin Generator. + KotlinGenerator({ + required KotlinOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates Kotlin files with specified [KotlinOptions] + @override + void generate() { + // + } +} + /// Calculates the name of the codec that will be generated for [api]. String _getCodecName(Api api) => '${api.name}Codec'; diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index e8de7c1154c..e1e5815bcaa 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -4,6 +4,7 @@ import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; import 'pigeon_lib.dart' show Error, TaskQueueType; @@ -63,6 +64,38 @@ class ObjcOptions { } } +/// Class that manages all Objc header code generation. +class ObjcHeaderGenerator extends Generator { + /// Instantiates a Objc Generator. + ObjcHeaderGenerator({ + required ObjcOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates Objc header files with specified [ObjcOptions] + @override + void generate() { + // + } +} + +/// Class that manages all Objc code generation. +class ObjcSourceGenerator extends Generator { + /// Instantiates a Objc Generator. + ObjcSourceGenerator({ + required ObjcOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates Objc files with specified [ObjcOptions] + @override + void generate() { + // + } +} + /// Calculates the ObjC class name, possibly prefixed. String _className(String? prefix, String className) { if (prefix != null) { From 06315ce0c5c32aa4a9ae948014669e06c040c1e6 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 12:16:34 -0800 Subject: [PATCH 06/45] adds swift --- packages/pigeon/lib/swift_generator.dart | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 3736506c1e7..8db09cf96bc 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -4,6 +4,7 @@ import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; /// Documentation comment open symbol. @@ -47,6 +48,22 @@ class SwiftOptions { } } +/// Class that manages all Swift code generation. +class SwiftGenerator extends Generator { + /// Instantiates a Swift Generator. + SwiftGenerator({ + required SwiftOptions languageOptions, + required Root root, + required StringSink sink, + }) : super(languageOptions: languageOptions, root: root, sink: sink); + + /// Generates Swift files with specified [SwiftOptions] + @override + void generate() { + // + } +} + /// Calculates the name of the codec that will be generated for [api]. String _getCodecName(Api api) => '${api.name}Codec'; From 5675c646717296c9a0444f8714c5fb258ce39d06 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 12:25:11 -0800 Subject: [PATCH 07/45] Updates tests to use new Adapter naming scheme --- packages/pigeon/test/pigeon_lib_test.dart | 48 +++++++++++------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 4a121e7e9e0..411643f679f 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -9,8 +9,8 @@ import 'package:pigeon/ast.dart'; import 'package:pigeon/pigeon_lib.dart'; import 'package:test/test.dart'; -class _ValidatorGenerator implements Generator { - _ValidatorGenerator(this.sink); +class _ValidatorAdapter implements Adapter { + _ValidatorAdapter(this.sink); bool didCallValidate = false; final IOSink? sink; @@ -397,9 +397,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const DartGenerator dartGenerator = DartGenerator(); + const DartAdapter dartAdapter = DartAdapter(); final StringBuffer buffer = StringBuffer(); - dartGenerator.generate(buffer, options, root); + dartAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -407,9 +407,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( javaOut: 'Foo.java', copyrightHeader: './copyright_header.txt'); - const JavaGenerator javaGenerator = JavaGenerator(); + const JavaAdapter javaAdapter = JavaAdapter(); final StringBuffer buffer = StringBuffer(); - javaGenerator.generate(buffer, options, root); + javaAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -417,9 +417,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const ObjcHeaderGenerator objcHeaderGenerator = ObjcHeaderGenerator(); + const ObjcHeaderAdapter objcHeaderAdapter = ObjcHeaderAdapter(); final StringBuffer buffer = StringBuffer(); - objcHeaderGenerator.generate(buffer, options, root); + objcHeaderAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -427,9 +427,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const ObjcSourceGenerator objcSourceGenerator = ObjcSourceGenerator(); + const ObjcSourceAdapter objcSourceAdapter = ObjcSourceAdapter(); final StringBuffer buffer = StringBuffer(); - objcSourceGenerator.generate(buffer, options, root); + objcSourceAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -437,9 +437,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( swiftOut: 'Foo.swift', copyrightHeader: './copyright_header.txt'); - const SwiftGenerator swiftGenerator = SwiftGenerator(); + const SwiftAdapter swiftAdapter = SwiftAdapter(); final StringBuffer buffer = StringBuffer(); - swiftGenerator.generate(buffer, options, root); + swiftAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -447,9 +447,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( cppHeaderOut: 'Foo.h', copyrightHeader: './copyright_header.txt'); - const CppHeaderGenerator cppHeaderGenerator = CppHeaderGenerator(); + const CppHeaderAdapter cppHeaderAdapter = CppHeaderAdapter(); final StringBuffer buffer = StringBuffer(); - cppHeaderGenerator.generate(buffer, options, root); + cppHeaderAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -457,9 +457,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const CppSourceGenerator cppSourceGenerator = CppSourceGenerator(); + const CppSourceAdapter cppSourceAdapter = CppSourceAdapter(); final StringBuffer buffer = StringBuffer(); - cppSourceGenerator.generate(buffer, options, root); + cppSourceAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -929,9 +929,9 @@ abstract class Api { dartTestOut: 'stdout', dartOut: 'stdout', ); - const DartTestGenerator dartGenerator = DartTestGenerator(); + const DartTestAdapter dartAdapter = DartTestAdapter(); final StringBuffer buffer = StringBuffer(); - dartGenerator.generate(buffer, options, root); + dartAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -1187,9 +1187,9 @@ abstract class Api { test('generator validation', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorGenerator generator = _ValidatorGenerator(stdout); + final _ValidatorAdapter generator = _ValidatorAdapter(stdout); final int result = await Pigeon.run(['--input', input.path], - generators: [generator]); + adapters: [generator]); expect(generator.didCallValidate, isTrue); expect(result, isNot(0)); completer.complete(); @@ -1200,10 +1200,10 @@ abstract class Api { test('generator validation skipped', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorGenerator generator = _ValidatorGenerator(null); + final _ValidatorAdapter generator = _ValidatorAdapter(null); final int result = await Pigeon.run( ['--input', input.path, '--dart_out', 'foo.dart'], - generators: [generator]); + adapters: [generator]); expect(generator.didCallValidate, isFalse); expect(result, equals(0)); completer.complete(); @@ -1214,10 +1214,10 @@ abstract class Api { test('run with PigeonOptions', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorGenerator generator = _ValidatorGenerator(null); + final _ValidatorAdapter generator = _ValidatorAdapter(null); final int result = await Pigeon.runWithOptions( PigeonOptions(input: input.path, dartOut: 'foo.dart'), - generators: [generator]); + adapters: [generator]); expect(generator.didCallValidate, isFalse); expect(result, equals(0)); completer.complete(); From a319b481ddd797f22e49ac04f434e3153cf36627 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 12:55:30 -0800 Subject: [PATCH 08/45] Dart generate methods --- packages/pigeon/lib/dart_generator.dart | 18 ++++++++++++++++-- packages/pigeon/lib/pigeon_lib.dart | 18 ++++++++++-------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 4ddbe9056ef..0a5f310d233 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -68,7 +68,7 @@ class DartGenerator extends Generator { /// Generates Dart files with specified [DartOptions] @override void generate() { - // + generateDart(languageOptions, root, sink); } } @@ -79,12 +79,26 @@ class DartTestGenerator extends Generator { required DartOptions languageOptions, required Root root, required StringSink sink, + required this.dartOutPath, + required this.testOutPath, }) : super(languageOptions: languageOptions, root: root, sink: sink); + /// Path to output generated Dart file. + String dartOutPath; + + /// Path to output generated Test file. + String testOutPath; + /// Generates Dart files with specified [DartOptions] @override void generate() { - // + generateTestDart( + languageOptions, + root, + sink, + dartOutPath: dartOutPath, + testOutPath: testOutPath, + ); } } diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 5bab11a01bb..0bb11c18d43 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -405,7 +405,9 @@ class DartAdapter implements Adapter { void generate(StringSink sink, PigeonOptions options, Root root) { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader); - generateDart(dartOptionsWithHeader, root, sink); + final DartGenerator generator = DartGenerator( + languageOptions: dartOptionsWithHeader, root: root, sink: sink); + generator.generate(); } @override @@ -424,13 +426,13 @@ class DartTestAdapter implements Adapter { void generate(StringSink sink, PigeonOptions options, Root root) { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader); - generateTestDart( - dartOptionsWithHeader, - root, - sink, - dartOutPath: options.dartOut!, - testOutPath: options.dartTestOut!, - ); + final DartTestGenerator testGenerator = DartTestGenerator( + languageOptions: dartOptionsWithHeader, + root: root, + sink: sink, + dartOutPath: options.dartOut!, + testOutPath: options.dartTestOut!); + testGenerator.generate(); } @override From 6d7405d7a118bb687bcf02ce7cbc9b83488a3226 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 13:07:37 -0800 Subject: [PATCH 09/45] convert all generate functions to use new method --- packages/pigeon/lib/cpp_generator.dart | 8 ++++-- packages/pigeon/lib/java_generator.dart | 2 +- packages/pigeon/lib/kotlin_generator.dart | 2 +- packages/pigeon/lib/objc_generator.dart | 4 +-- packages/pigeon/lib/pigeon_lib.dart | 32 +++++++++++++++++------ packages/pigeon/lib/swift_generator.dart | 2 +- 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 584d4792ff2..dccb6d8602d 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -72,12 +72,16 @@ class CppHeaderGenerator extends Generator { required CppOptions languageOptions, required Root root, required StringSink sink, + required this.path, }) : super(languageOptions: languageOptions, root: root, sink: sink); + /// Path to output generated Cpp Header file. + String path; + /// Generates Cpp header files with specified [CppOptions] @override void generate() { - // + generateCppHeader(path, languageOptions, root, sink); } } @@ -93,7 +97,7 @@ class CppSourceGenerator extends Generator { /// Generates Cpp files with specified [CppOptions] @override void generate() { - // + generateCppSource(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index e77c11da941..5bc65d32a8a 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -97,7 +97,7 @@ class JavaGenerator extends Generator { /// Generates Java files with specified [JavaOptions] @override void generate() { - // + generateJava(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index 371987d70af..584b45a8535 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -77,7 +77,7 @@ class KotlinGenerator extends Generator { /// Generates Kotlin files with specified [KotlinOptions] @override void generate() { - // + generateKotlin(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index e1e5815bcaa..417189d7a60 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -76,7 +76,7 @@ class ObjcHeaderGenerator extends Generator { /// Generates Objc header files with specified [ObjcOptions] @override void generate() { - // + generateObjcHeader(languageOptions, root, sink); } } @@ -92,7 +92,7 @@ class ObjcSourceGenerator extends Generator { /// Generates Objc files with specified [ObjcOptions] @override void generate() { - // + generateObjcSource(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 0bb11c18d43..45bb47009c5 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -460,7 +460,9 @@ class ObjcHeaderAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateObjcHeader(objcOptionsWithHeader, root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator( + languageOptions: objcOptionsWithHeader, root: root, sink: sink); + generator.generate(); } @override @@ -484,7 +486,9 @@ class ObjcSourceAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateObjcSource(objcOptionsWithHeader, root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator( + languageOptions: objcOptionsWithHeader, root: root, sink: sink); + generator.generate(); } @override @@ -509,7 +513,9 @@ class JavaAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = + JavaGenerator(languageOptions: javaOptions, root: root, sink: sink); + generator.generate(); } @override @@ -531,7 +537,9 @@ class SwiftAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = + SwiftGenerator(languageOptions: swiftOptions, root: root, sink: sink); + generator.generate(); } @override @@ -553,8 +561,12 @@ class CppHeaderAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateCppHeader(path.basenameWithoutExtension(options.cppHeaderOut!), - cppOptionsWithHeader, root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator( + languageOptions: cppOptionsWithHeader, + root: root, + sink: sink, + path: path.basenameWithoutExtension(options.cppHeaderOut!)); + generator.generate(); } @override @@ -578,7 +590,9 @@ class CppSourceAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateCppSource(cppOptionsWithHeader, root, sink); + final CppSourceGenerator generator = CppSourceGenerator( + languageOptions: cppOptionsWithHeader, root: root, sink: sink); + generator.generate(); } @override @@ -602,7 +616,9 @@ class KotlinAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = + KotlinGenerator(languageOptions: kotlinOptions, root: root, sink: sink); + generator.generate(); } @override diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 8db09cf96bc..3853d87b686 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -60,7 +60,7 @@ class SwiftGenerator extends Generator { /// Generates Swift files with specified [SwiftOptions] @override void generate() { - // + generateSwift(languageOptions, root, sink); } } From 1e59fef259017c0e4f113cd8adbd63511febff89 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 13:14:45 -0800 Subject: [PATCH 10/45] chagngelog --- packages/pigeon/CHANGELOG.md | 4 ++++ packages/pigeon/lib/generator_tools.dart | 2 +- packages/pigeon/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index e0278c5731d..6e6688e0d85 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.2.16 + +* Creates new Generator classes for each language. + ## 4.2.15 * Relocates generator classes. (Reverted) diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index 6624a1dc8ec..ea522eaa04d 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -9,7 +9,7 @@ import 'dart:mirrors'; import 'ast.dart'; /// The current version of pigeon. This must match the version in pubspec.yaml. -const String pigeonVersion = '4.2.15'; +const String pigeonVersion = '4.2.16'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index e9c9d6b4901..886f56a6ea0 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%3Apigeon -version: 4.2.15 # This must match the version in lib/generator_tools.dart +version: 4.2.16 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.12.0 <3.0.0" From 0964cd32dedc3b3208f5280e64658d635215936e Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 14:23:38 -0800 Subject: [PATCH 11/45] remove Generator class fields --- packages/pigeon/lib/cpp_generator.dart | 15 ++----- packages/pigeon/lib/dart_generator.dart | 15 ++----- packages/pigeon/lib/generator.dart | 17 +------- packages/pigeon/lib/java_generator.dart | 8 +--- packages/pigeon/lib/kotlin_generator.dart | 8 +--- packages/pigeon/lib/objc_generator.dart | 16 ++----- packages/pigeon/lib/pigeon_lib.dart | 52 +++++++++-------------- packages/pigeon/lib/swift_generator.dart | 8 +--- 8 files changed, 41 insertions(+), 98 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index d46028a279c..cb3c23e21bc 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -69,18 +69,15 @@ class CppOptions { class CppHeaderGenerator extends Generator { /// Instantiates a Cpp Generator. CppHeaderGenerator({ - required CppOptions languageOptions, - required Root root, - required StringSink sink, required this.path, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + }); /// Path to output generated Cpp Header file. String path; /// Generates Cpp header files with specified [CppOptions] @override - void generate() { + void generate(CppOptions languageOptions, Root root, StringSink sink) { generateCppHeader(path, languageOptions, root, sink); } } @@ -88,15 +85,11 @@ class CppHeaderGenerator extends Generator { /// Class that manages all Cpp code generation. class CppSourceGenerator extends Generator { /// Instantiates a Cpp Generator. - CppSourceGenerator({ - required CppOptions languageOptions, - required Root root, - required StringSink sink, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + CppSourceGenerator(); /// Generates Cpp files with specified [CppOptions] @override - void generate() { + void generate(CppOptions languageOptions, Root root, StringSink sink) { generateCppSource(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 0a5f310d233..13cfb1ecff2 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -59,15 +59,11 @@ class DartOptions { /// Class that manages all Dart code generation. class DartGenerator extends Generator { /// Instantiates a Dart Generator. - DartGenerator({ - required DartOptions languageOptions, - required Root root, - required StringSink sink, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + DartGenerator(); /// Generates Dart files with specified [DartOptions] @override - void generate() { + void generate(DartOptions languageOptions, Root root, StringSink sink) { generateDart(languageOptions, root, sink); } } @@ -76,12 +72,9 @@ class DartGenerator extends Generator { class DartTestGenerator extends Generator { /// Instantiates a Dart Generator. DartTestGenerator({ - required DartOptions languageOptions, - required Root root, - required StringSink sink, required this.dartOutPath, required this.testOutPath, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + }); /// Path to output generated Dart file. String dartOutPath; @@ -91,7 +84,7 @@ class DartTestGenerator extends Generator { /// Generates Dart files with specified [DartOptions] @override - void generate() { + void generate(DartOptions languageOptions, Root root, StringSink sink) { generateTestDart( languageOptions, root, diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index f45c113a7b6..0979627b3ac 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -9,21 +9,8 @@ import 'ast.dart'; /// This is meant to provide structure and direction for future generator work. abstract class Generator { /// Instantiates a Generator. - const Generator({ - required this.languageOptions, - required this.root, - required this.sink, - }); - - /// - final T languageOptions; - - /// - final Root root; - - /// - final StringSink sink; + const Generator(); /// Generates files for specified language with specified [languageOptions] - void generate(); + void generate(T languageOptions, Root root, StringSink sink); } diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index 5bc65d32a8a..00293bfc0e8 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -88,15 +88,11 @@ class JavaOptions { /// Class that manages all Java code generation. class JavaGenerator extends Generator { /// Instantiates a Java Generator. - JavaGenerator({ - required JavaOptions languageOptions, - required Root root, - required StringSink sink, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + JavaGenerator(); /// Generates Java files with specified [JavaOptions] @override - void generate() { + void generate(JavaOptions languageOptions, Root root, StringSink sink) { generateJava(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index 584b45a8535..99690a4ac92 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -68,15 +68,11 @@ class KotlinOptions { /// Class that manages all Kotlin code generation. class KotlinGenerator extends Generator { /// Instantiates a Kotlin Generator. - KotlinGenerator({ - required KotlinOptions languageOptions, - required Root root, - required StringSink sink, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + KotlinGenerator(); /// Generates Kotlin files with specified [KotlinOptions] @override - void generate() { + void generate(KotlinOptions languageOptions, Root root, StringSink sink) { generateKotlin(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 417189d7a60..0d376e1a582 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -67,15 +67,11 @@ class ObjcOptions { /// Class that manages all Objc header code generation. class ObjcHeaderGenerator extends Generator { /// Instantiates a Objc Generator. - ObjcHeaderGenerator({ - required ObjcOptions languageOptions, - required Root root, - required StringSink sink, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + ObjcHeaderGenerator(); /// Generates Objc header files with specified [ObjcOptions] @override - void generate() { + void generate(ObjcOptions languageOptions, Root root, StringSink sink) { generateObjcHeader(languageOptions, root, sink); } } @@ -83,15 +79,11 @@ class ObjcHeaderGenerator extends Generator { /// Class that manages all Objc code generation. class ObjcSourceGenerator extends Generator { /// Instantiates a Objc Generator. - ObjcSourceGenerator({ - required ObjcOptions languageOptions, - required Root root, - required StringSink sink, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + ObjcSourceGenerator(); /// Generates Objc files with specified [ObjcOptions] @override - void generate() { + void generate(ObjcOptions languageOptions, Root root, StringSink sink) { generateObjcSource(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 45bb47009c5..65718a4ff46 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -405,9 +405,8 @@ class DartAdapter implements Adapter { void generate(StringSink sink, PigeonOptions options, Root root) { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader); - final DartGenerator generator = DartGenerator( - languageOptions: dartOptionsWithHeader, root: root, sink: sink); - generator.generate(); + final DartGenerator generator = DartGenerator(); + generator.generate(dartOptionsWithHeader, root, sink); } @override @@ -427,12 +426,12 @@ class DartTestAdapter implements Adapter { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader); final DartTestGenerator testGenerator = DartTestGenerator( - languageOptions: dartOptionsWithHeader, - root: root, - sink: sink, - dartOutPath: options.dartOut!, - testOutPath: options.dartTestOut!); - testGenerator.generate(); + dartOutPath: options.dartOut!, testOutPath: options.dartTestOut!); + testGenerator.generate( + dartOptionsWithHeader, + root, + sink, + ); } @override @@ -460,9 +459,8 @@ class ObjcHeaderAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator( - languageOptions: objcOptionsWithHeader, root: root, sink: sink); - generator.generate(); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(objcOptionsWithHeader, root, sink); } @override @@ -486,9 +484,8 @@ class ObjcSourceAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final ObjcSourceGenerator generator = ObjcSourceGenerator( - languageOptions: objcOptionsWithHeader, root: root, sink: sink); - generator.generate(); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(objcOptionsWithHeader, root, sink); } @override @@ -513,9 +510,8 @@ class JavaAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final JavaGenerator generator = - JavaGenerator(languageOptions: javaOptions, root: root, sink: sink); - generator.generate(); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); } @override @@ -537,9 +533,8 @@ class SwiftAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final SwiftGenerator generator = - SwiftGenerator(languageOptions: swiftOptions, root: root, sink: sink); - generator.generate(); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); } @override @@ -562,11 +557,8 @@ class CppHeaderAdapter implements Adapter { ? _lineReader(options.copyrightHeader!) : null)); final CppHeaderGenerator generator = CppHeaderGenerator( - languageOptions: cppOptionsWithHeader, - root: root, - sink: sink, path: path.basenameWithoutExtension(options.cppHeaderOut!)); - generator.generate(); + generator.generate(cppOptionsWithHeader, root, sink); } @override @@ -590,9 +582,8 @@ class CppSourceAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final CppSourceGenerator generator = CppSourceGenerator( - languageOptions: cppOptionsWithHeader, root: root, sink: sink); - generator.generate(); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(cppOptionsWithHeader, root, sink); } @override @@ -616,9 +607,8 @@ class KotlinAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final KotlinGenerator generator = - KotlinGenerator(languageOptions: kotlinOptions, root: root, sink: sink); - generator.generate(); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); } @override diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 3853d87b686..b25931c03e3 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -51,15 +51,11 @@ class SwiftOptions { /// Class that manages all Swift code generation. class SwiftGenerator extends Generator { /// Instantiates a Swift Generator. - SwiftGenerator({ - required SwiftOptions languageOptions, - required Root root, - required StringSink sink, - }) : super(languageOptions: languageOptions, root: root, sink: sink); + SwiftGenerator(); /// Generates Swift files with specified [SwiftOptions] @override - void generate() { + void generate(SwiftOptions languageOptions, Root root, StringSink sink) { generateSwift(languageOptions, root, sink); } } From f589da4c3f875040a59713e2e86b6955ab3c06a1 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 21 Dec 2022 23:01:58 -0800 Subject: [PATCH 12/45] move paths to options --- packages/pigeon/lib/cpp_generator.dart | 28 ++++------ packages/pigeon/lib/dart_generator.dart | 73 ++++++++++++++++++++----- packages/pigeon/lib/pigeon_lib.dart | 29 ++++++++-- 3 files changed, 93 insertions(+), 37 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index cb3c23e21bc..6bc120bc2d3 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -21,11 +21,8 @@ const String _defaultCodecSerializer = 'flutter::StandardCodecSerializer'; /// Options that control how C++ code will be generated. class CppOptions { /// Creates a [CppOptions] object - const CppOptions({ - this.header, - this.namespace, - this.copyrightHeader, - }); + const CppOptions( + {this.header, this.namespace, this.copyrightHeader, this.cppHeaderOut}); /// The path to the header that will get placed in the source filed (example: /// "foo.h"). @@ -37,14 +34,17 @@ class CppOptions { /// A copyright header that will get prepended to generated code. final Iterable? copyrightHeader; + /// + final String? cppHeaderOut; + /// Creates a [CppOptions] from a Map representation where: /// `x = CppOptions.fromMap(x.toMap())`. static CppOptions fromMap(Map map) { return CppOptions( - header: map['header'] as String?, - namespace: map['namespace'] as String?, - copyrightHeader: map['copyrightHeader'] as Iterable?, - ); + header: map['header'] as String?, + namespace: map['namespace'] as String?, + copyrightHeader: map['copyrightHeader'] as Iterable?, + cppHeaderOut: map['cppHeaderOut'] as String?); } /// Converts a [CppOptions] to a Map representation where: @@ -68,17 +68,13 @@ class CppOptions { /// Class that manages all Cpp header code generation. class CppHeaderGenerator extends Generator { /// Instantiates a Cpp Generator. - CppHeaderGenerator({ - required this.path, - }); - - /// Path to output generated Cpp Header file. - String path; + CppHeaderGenerator(); /// Generates Cpp header files with specified [CppOptions] @override void generate(CppOptions languageOptions, Root root, StringSink sink) { - generateCppHeader(path, languageOptions, root, sink); + generateCppHeader( + languageOptions.cppHeaderOut, languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 13cfb1ecff2..64ef93b2f21 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -56,6 +56,57 @@ class DartOptions { } } +/// Options that control how Dart test code will be generated. +class DartTestOptions { + /// Constructor for DartOptions. + DartTestOptions({ + this.copyrightHeader, + required this.dartOutPath, + required this.testOutPath, + }); + + /// A copyright header that will get prepended to generated code. + final Iterable? copyrightHeader; + + /// Path to output generated Dart file. + String dartOutPath; + + /// Path to output generated Test file. + String testOutPath; + + /// Creates a [DartOptions] from a Map representation where: + /// `x = DartOptions.fromMap(x.toMap())`. + static DartTestOptions fromMap(Map map) { + final Iterable? copyrightHeader = + map['copyrightHeader'] as Iterable?; + return DartTestOptions( + dartOutPath: map['dartOutPath']! as String, + testOutPath: map['testOutPath']! as String, + copyrightHeader: copyrightHeader?.cast(), + ); + } + + /// Converts a [DartOptions] to a Map representation where: + /// `x = DartOptions.fromMap(x.toMap())`. + Map toMap() { + final Map result = { + if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!, + }; + return result; + } + + /// Overrides any non-null parameters from [options] into this to make a new + /// [DartOptions]. + DartTestOptions merge(DartTestOptions options) { + return DartTestOptions.fromMap(mergeMaps(toMap(), options.toMap())); + } + + /// Converts DartTestOptions to DartOptions and returns it. + DartOptions toDartOptions() { + return DartOptions(copyrightHeader: copyrightHeader); + } +} + /// Class that manages all Dart code generation. class DartGenerator extends Generator { /// Instantiates a Dart Generator. @@ -69,28 +120,20 @@ class DartGenerator extends Generator { } /// Class that manages all Dart code generation. -class DartTestGenerator extends Generator { +class DartTestGenerator extends Generator { /// Instantiates a Dart Generator. - DartTestGenerator({ - required this.dartOutPath, - required this.testOutPath, - }); - - /// Path to output generated Dart file. - String dartOutPath; - - /// Path to output generated Test file. - String testOutPath; + DartTestGenerator(); /// Generates Dart files with specified [DartOptions] @override - void generate(DartOptions languageOptions, Root root, StringSink sink) { + void generate(DartTestOptions languageOptions, Root root, StringSink sink) { + final DartOptions dartOptions = languageOptions.toDartOptions(); generateTestDart( - languageOptions, + dartOptions, root, sink, - dartOutPath: dartOutPath, - testOutPath: testOutPath, + dartOutPath: languageOptions.dartOutPath, + testOutPath: languageOptions.testOutPath, ); } } diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 65718a4ff46..94cfd55f2ff 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -379,6 +379,19 @@ DartOptions _dartOptionsWithCopyrightHeader( copyrightHeader != null ? _lineReader(copyrightHeader) : null)); } +DartTestOptions _dartTestOptionsWithCopyrightHeader(DartOptions? dartOptions, + String? copyrightHeader, String dartOutPath, String testOutPath) { + final Iterable? parsedCopyrightHeader = dartOptions != null + ? dartOptions.copyrightHeader + : copyrightHeader != null + ? _lineReader(copyrightHeader) + : null; + return DartTestOptions( + dartOutPath: dartOutPath, + testOutPath: testOutPath, + copyrightHeader: parsedCopyrightHeader); +} + /// An [Adapter] that generates the AST. class AstAdapter implements Adapter { /// Constructor for [AstAdapter]. @@ -423,10 +436,14 @@ class DartTestAdapter implements Adapter { @override void generate(StringSink sink, PigeonOptions options, Root root) { - final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( - options.dartOptions, options.copyrightHeader); - final DartTestGenerator testGenerator = DartTestGenerator( - dartOutPath: options.dartOut!, testOutPath: options.dartTestOut!); + final DartTestOptions dartOptionsWithHeader = + _dartTestOptionsWithCopyrightHeader( + options.dartOptions, + options.copyrightHeader, + options.dartOut!, + options.dartTestOut!, + ); + final DartTestGenerator testGenerator = DartTestGenerator(); testGenerator.generate( dartOptionsWithHeader, root, @@ -553,11 +570,11 @@ class CppHeaderAdapter implements Adapter { void generate(StringSink sink, PigeonOptions options, Root root) { final CppOptions cppOptions = options.cppOptions ?? const CppOptions(); final CppOptions cppOptionsWithHeader = cppOptions.merge(CppOptions( + cppHeaderOut: path.basenameWithoutExtension(options.cppHeaderOut!), copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final CppHeaderGenerator generator = CppHeaderGenerator( - path: path.basenameWithoutExtension(options.cppHeaderOut!)); + final CppHeaderGenerator generator = CppHeaderGenerator(); generator.generate(cppOptionsWithHeader, root, sink); } From 637679dc0c02c7078deee8d5ce9ff2a58713efcd Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 08:24:58 -0800 Subject: [PATCH 13/45] remove dartTestOptions --- packages/pigeon/lib/dart_generator.dart | 80 +++++-------------- packages/pigeon/lib/pigeon_lib.dart | 20 ++--- packages/pigeon/test/dart_generator_test.dart | 80 +++++++++---------- packages/pigeon/tool/shared/generation.dart | 2 +- 4 files changed, 69 insertions(+), 113 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 64ef93b2f21..604becc9c30 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -25,64 +25,30 @@ const String _standardMessageCodec = 'StandardMessageCodec'; /// Options that control how Dart code will be generated. class DartOptions { /// Constructor for DartOptions. - const DartOptions({this.copyrightHeader}); - - /// A copyright header that will get prepended to generated code. - final Iterable? copyrightHeader; - - /// Creates a [DartOptions] from a Map representation where: - /// `x = DartOptions.fromMap(x.toMap())`. - static DartOptions fromMap(Map map) { - final Iterable? copyrightHeader = - map['copyrightHeader'] as Iterable?; - return DartOptions( - copyrightHeader: copyrightHeader?.cast(), - ); - } - - /// Converts a [DartOptions] to a Map representation where: - /// `x = DartOptions.fromMap(x.toMap())`. - Map toMap() { - final Map result = { - if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!, - }; - return result; - } - - /// Overrides any non-null parameters from [options] into this to make a new - /// [DartOptions]. - DartOptions merge(DartOptions options) { - return DartOptions.fromMap(mergeMaps(toMap(), options.toMap())); - } -} - -/// Options that control how Dart test code will be generated. -class DartTestOptions { - /// Constructor for DartOptions. - DartTestOptions({ + DartOptions({ this.copyrightHeader, - required this.dartOutPath, - required this.testOutPath, + this.dartOutPath, + this.testOutPath, }); /// A copyright header that will get prepended to generated code. final Iterable? copyrightHeader; - /// Path to output generated Dart file. - String dartOutPath; + /// Path to output generated Dart file for tests. + String? dartOutPath; - /// Path to output generated Test file. - String testOutPath; + /// Path to output generated Test file for tests. + String? testOutPath; /// Creates a [DartOptions] from a Map representation where: /// `x = DartOptions.fromMap(x.toMap())`. - static DartTestOptions fromMap(Map map) { + static DartOptions fromMap(Map map) { final Iterable? copyrightHeader = map['copyrightHeader'] as Iterable?; - return DartTestOptions( - dartOutPath: map['dartOutPath']! as String, - testOutPath: map['testOutPath']! as String, + return DartOptions( copyrightHeader: copyrightHeader?.cast(), + dartOutPath: map['dartOutPath'] as String?, + testOutPath: map['testOutPath'] as String?, ); } @@ -91,19 +57,16 @@ class DartTestOptions { Map toMap() { final Map result = { if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!, + if (dartOutPath != null) 'dartOutPath': dartOutPath!, + if (testOutPath != null) 'testOutPath': testOutPath!, }; return result; } /// Overrides any non-null parameters from [options] into this to make a new /// [DartOptions]. - DartTestOptions merge(DartTestOptions options) { - return DartTestOptions.fromMap(mergeMaps(toMap(), options.toMap())); - } - - /// Converts DartTestOptions to DartOptions and returns it. - DartOptions toDartOptions() { - return DartOptions(copyrightHeader: copyrightHeader); + DartOptions merge(DartOptions options) { + return DartOptions.fromMap(mergeMaps(toMap(), options.toMap())); } } @@ -120,20 +83,21 @@ class DartGenerator extends Generator { } /// Class that manages all Dart code generation. -class DartTestGenerator extends Generator { +class DartTestGenerator extends Generator { /// Instantiates a Dart Generator. DartTestGenerator(); /// Generates Dart files with specified [DartOptions] @override - void generate(DartTestOptions languageOptions, Root root, StringSink sink) { - final DartOptions dartOptions = languageOptions.toDartOptions(); + void generate(DartOptions languageOptions, Root root, StringSink sink) { + final String dartOutPath = languageOptions.dartOutPath ?? ''; + final String testOutPath = languageOptions.testOutPath ?? ''; generateTestDart( - dartOptions, + languageOptions, root, sink, - dartOutPath: languageOptions.dartOutPath, - testOutPath: languageOptions.testOutPath, + dartOutPath: dartOutPath, + testOutPath: testOutPath, ); } } diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 94cfd55f2ff..e630a09c438 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -372,21 +372,14 @@ abstract class Adapter { } DartOptions _dartOptionsWithCopyrightHeader( - DartOptions? dartOptions, String? copyrightHeader) { - dartOptions = dartOptions ?? const DartOptions(); - return dartOptions.merge(DartOptions( - copyrightHeader: - copyrightHeader != null ? _lineReader(copyrightHeader) : null)); -} - -DartTestOptions _dartTestOptionsWithCopyrightHeader(DartOptions? dartOptions, - String? copyrightHeader, String dartOutPath, String testOutPath) { + DartOptions? dartOptions, String? copyrightHeader, + [String? dartOutPath, String? testOutPath]) { final Iterable? parsedCopyrightHeader = dartOptions != null ? dartOptions.copyrightHeader : copyrightHeader != null ? _lineReader(copyrightHeader) : null; - return DartTestOptions( + return DartOptions( dartOutPath: dartOutPath, testOutPath: testOutPath, copyrightHeader: parsedCopyrightHeader); @@ -436,12 +429,11 @@ class DartTestAdapter implements Adapter { @override void generate(StringSink sink, PigeonOptions options, Root root) { - final DartTestOptions dartOptionsWithHeader = - _dartTestOptionsWithCopyrightHeader( + final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader, - options.dartOut!, - options.dartTestOut!, + options.dartOut, + options.dartTestOut, ); final DartTestGenerator testGenerator = DartTestGenerator(); testGenerator.generate( diff --git a/packages/pigeon/test/dart_generator_test.dart b/packages/pigeon/test/dart_generator_test.dart index bf359ddfe43..38442ccd358 100644 --- a/packages/pigeon/test/dart_generator_test.dart +++ b/packages/pigeon/test/dart_generator_test.dart @@ -29,7 +29,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' dataType1? field1;')); @@ -49,7 +49,7 @@ void main() { enums: [anEnum], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum Foobar')); expect(code, contains(' one,')); @@ -92,7 +92,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('Future doSomething(Input arg_input)')); @@ -118,7 +118,7 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('Future add(int arg_x, int arg_y)')); @@ -145,7 +145,7 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('int add(int x, int y)')); @@ -182,7 +182,7 @@ void main() { ) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -224,7 +224,7 @@ void main() { ) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -276,7 +276,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('abstract class Api')); expect(code, contains('static void setup(Api')); @@ -310,7 +310,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doSomething')); expect(code, contains('return;')); @@ -343,7 +343,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); // The next line verifies that we're not setting a variable to the value of "doSomething", but // ignores the line where we assert the value of the argument isn't null, since on that line @@ -373,7 +373,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('output.*=.*doSomething[(][)]')); expect(code, contains('Output doSomething();')); @@ -415,7 +415,7 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum1?.index,')); expect(code, contains('? Enum.values[result[0]! as int]')); @@ -442,7 +442,7 @@ void main() { ]) ]); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum Foo {')); expect(code, contains('Future bar(Foo? arg_foo) async')); @@ -485,7 +485,7 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum1.index,')); expect(code, contains('enum1: Enum.values[result[0]! as int]')); @@ -512,7 +512,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('channel.send[(]null[)]')); }); @@ -570,7 +570,7 @@ void main() { ], enums: []); final StringBuffer mainCodeSink = StringBuffer(); final StringBuffer testCodeSink = StringBuffer(); - generateDart(const DartOptions(), root, mainCodeSink); + generateDart(DartOptions(), root, mainCodeSink); final String mainCode = mainCodeSink.toString(); expect(mainCode, isNot(contains(r"import 'fo\'o.dart';"))); expect(mainCode, contains('class Api {')); @@ -579,7 +579,7 @@ void main() { expect(mainCode, isNot(contains("'${Keys.result}': output"))); expect(mainCode, isNot(contains('return [];'))); generateTestDart( - const DartOptions(), + DartOptions(), root, testCodeSink, dartOutPath: "fo'o.dart", @@ -631,7 +631,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('abstract class Api')); expect(code, contains('Future doSomething(Input arg0);')); @@ -675,7 +675,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(matches('=.s*doSomething'))); expect(code, contains('await api.doSomething(')); @@ -719,7 +719,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, matches('Output.*doSomething.*Input')); @@ -747,7 +747,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('channel.send[(]null[)]')); }); @@ -788,7 +788,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' List? field1;')); @@ -815,7 +815,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' Map? field1;')); @@ -844,7 +844,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doit(List arg')); }); @@ -872,7 +872,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doit(List arg')); }); @@ -896,7 +896,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future> doit(')); expect(code, @@ -931,7 +931,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('List doit(')); expect( @@ -958,7 +958,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit()')); expect(code, contains('return (replyList[0] as int?);')); @@ -983,7 +983,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future?> doit()')); expect(code, @@ -1008,7 +1008,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit()')); expect(code, contains('return (replyList[0] as int?);')); @@ -1031,7 +1031,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('int? doit();')); expect(code, contains('final int? output = api.doit();')); @@ -1055,7 +1055,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit();')); expect(code, contains('final int? output = await api.doit();')); @@ -1078,7 +1078,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -1107,7 +1107,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit(int? arg_foo) async {')); }); @@ -1133,7 +1133,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('void doit(int? foo);')); }); @@ -1151,7 +1151,7 @@ name: foobar Root(classes: [], apis: [], enums: []); final StringBuffer sink = StringBuffer(); generateTestDart( - const DartOptions(), + DartOptions(), root, sink, dartOutPath: path.join(foo.path, 'bar.dart'), @@ -1238,7 +1238,7 @@ name: foobar ], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('///$comment')); @@ -1273,7 +1273,7 @@ name: foobar enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('extends StandardMessageCodec'))); expect(code, contains('StandardMessageCodec')); @@ -1316,7 +1316,7 @@ name: foobar ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(const DartOptions(), root, sink); + generateDart(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('extends StandardMessageCodec')); }); @@ -1355,7 +1355,7 @@ name: foobar ); final StringBuffer sink = StringBuffer(); generateTestDart( - const DartOptions(), + DartOptions(), root, sink, dartOutPath: 'code.dart', diff --git a/packages/pigeon/tool/shared/generation.dart b/packages/pigeon/tool/shared/generation.dart index 01efa09c8f5..3e6ced166f8 100644 --- a/packages/pigeon/tool/shared/generation.dart +++ b/packages/pigeon/tool/shared/generation.dart @@ -168,7 +168,7 @@ Future runPigeon({ copyrightHeader: './copyright_header.txt', dartOut: dartOut, dartTestOut: dartTestOut, - dartOptions: const DartOptions(), + dartOptions: DartOptions(), cppHeaderOut: cppHeaderOut, cppSourceOut: cppSourceOut, cppOptions: CppOptions(namespace: cppNamespace), From af5e0e63da9f2e8e39d2a0a6873fb467e1d9dfde Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 09:56:36 -0800 Subject: [PATCH 14/45] Moves write header to generator class method --- packages/pigeon/lib/cpp_generator.dart | 49 ++++++++++++---- packages/pigeon/lib/dart_generator.dart | 53 +++++++++++------ packages/pigeon/lib/generator.dart | 20 ++++++- packages/pigeon/lib/java_generator.dart | 34 +++++++---- packages/pigeon/lib/kotlin_generator.dart | 34 +++++++---- packages/pigeon/lib/objc_generator.dart | 69 +++++++++++++++-------- packages/pigeon/lib/swift_generator.dart | 33 +++++++---- 7 files changed, 202 insertions(+), 90 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 6bc120bc2d3..689dbfed950 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -73,8 +73,17 @@ class CppHeaderGenerator extends Generator { /// Generates Cpp header files with specified [CppOptions] @override void generate(CppOptions languageOptions, Root root, StringSink sink) { + final Indent indent = Indent(sink); + + writeFileHeaders(languageOptions, root, sink, indent); generateCppHeader( - languageOptions.cppHeaderOut, languageOptions, root, sink); + languageOptions.cppHeaderOut, languageOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + CppOptions languageOptions, Root root, StringSink sink, Indent indent) { + writeCppHeaderHeader(languageOptions, root, sink, indent); } } @@ -86,7 +95,16 @@ class CppSourceGenerator extends Generator { /// Generates Cpp files with specified [CppOptions] @override void generate(CppOptions languageOptions, Root root, StringSink sink) { - generateCppSource(languageOptions, root, sink); + final Indent indent = Indent(sink); + + writeFileHeaders(languageOptions, root, sink, indent); + generateCppSource(languageOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + CppOptions languageOptions, Root root, StringSink sink, Indent indent) { + writeCppSourceHeader(languageOptions, root, sink, indent); } } @@ -1035,14 +1053,18 @@ void _writeSystemHeaderIncludeBlock(Indent indent, List headers) { } } -/// Generates the ".h" file for the AST represented by [root] to [sink] with the -/// provided [options] and [headerFileName]. -void generateCppHeader( - String? headerFileName, CppOptions options, Root root, StringSink sink) { - final Indent indent = Indent(sink); +/// Writes Cpp header file header to sink. +void writeCppHeaderHeader( + CppOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); } +} + +/// Generates the ".h" file for the AST represented by [root] to [sink] with the +/// provided [options] and [headerFileName]. +void generateCppHeader(String? headerFileName, CppOptions options, Root root, + StringSink sink, Indent indent) { indent.writeln('$_commentPrefix $generatedCodeWarning'); indent.writeln('$_commentPrefix $seeAlsoWarning'); indent.addln(''); @@ -1126,13 +1148,18 @@ void generateCppHeader( indent.writeln('#endif // $guardName'); } -/// Generates the ".cpp" file for the AST represented by [root] to [sink] with the -/// provided [options]. -void generateCppSource(CppOptions options, Root root, StringSink sink) { - final Indent indent = Indent(sink); +/// Writes Cpp source file header to sink. +void writeCppSourceHeader( + CppOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); } +} + +/// Generates the ".cpp" file for the AST represented by [root] to [sink] with the +/// provided [options]. +void generateCppSource( + CppOptions options, Root root, StringSink sink, Indent indent) { indent.writeln('$_commentPrefix $generatedCodeWarning'); indent.writeln('$_commentPrefix $seeAlsoWarning'); indent.addln(''); diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 604becc9c30..90b31c7b419 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -78,7 +78,16 @@ class DartGenerator extends Generator { /// Generates Dart files with specified [DartOptions] @override void generate(DartOptions languageOptions, Root root, StringSink sink) { - generateDart(languageOptions, root, sink); + final Indent indent = Indent(sink); + + writeFileHeaders(languageOptions, root, sink, indent); + generateDart(languageOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + DartOptions languageOptions, Root root, StringSink sink, Indent indent) { + writeHeader(languageOptions, root, sink, indent); } } @@ -90,16 +99,27 @@ class DartTestGenerator extends Generator { /// Generates Dart files with specified [DartOptions] @override void generate(DartOptions languageOptions, Root root, StringSink sink) { + final Indent indent = Indent(sink); + final String dartOutPath = languageOptions.dartOutPath ?? ''; final String testOutPath = languageOptions.testOutPath ?? ''; + + writeFileHeaders(languageOptions, root, sink, indent); generateTestDart( languageOptions, root, sink, + indent, dartOutPath: dartOutPath, testOutPath: testOutPath, ); } + + @override + void writeFileHeaders( + DartOptions languageOptions, Root root, StringSink sink, Indent indent) { + writeHeader(languageOptions, root, sink, indent); + } } String _escapeForDartSingleQuotedString(String raw) { @@ -502,25 +522,25 @@ String _addGenericTypesNullable(TypeDeclaration type) { return type.isNullable ? '$genericdType?' : genericdType; } +/// Writes file header to sink. +void writeHeader(DartOptions opt, Root root, StringSink sink, Indent indent) { + if (opt.copyrightHeader != null) { + addLines(indent, opt.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); + indent.writeln( + '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import', + ); +} + /// Generates Dart source code for the given AST represented by [root], /// outputting the code to [sink]. -void generateDart(DartOptions opt, Root root, StringSink sink) { +void generateDart(DartOptions opt, Root root, StringSink sink, Indent indent) { final List customClassNames = root.classes.map((Class x) => x.name).toList(); final List customEnumNames = root.enums.map((Enum x) => x.name).toList(); - final Indent indent = Indent(sink); - - void writeHeader() { - if (opt.copyrightHeader != null) { - addLines(indent, opt.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - indent.writeln( - '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import', - ); - } void writeEnums() { for (final Enum anEnum in root.enums) { @@ -679,7 +699,6 @@ $resultAt != null } } - writeHeader(); writeImports(); writeEnums(); for (final Class klass in root.classes) { @@ -748,11 +767,11 @@ String _posixify(String inputPath) { void generateTestDart( DartOptions opt, Root root, - StringSink sink, { + StringSink sink, + Indent indent, { required String dartOutPath, required String testOutPath, }) { - final Indent indent = Indent(sink); if (opt.copyrightHeader != null) { addLines(indent, opt.copyrightHeader!, linePrefix: '// '); } diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index 0979627b3ac..61b3587c3cf 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'ast.dart'; +import 'generator_tools.dart'; /// A Super class of generator classes. /// @@ -12,5 +13,22 @@ abstract class Generator { const Generator(); /// Generates files for specified language with specified [languageOptions] - void generate(T languageOptions, Root root, StringSink sink); + /// + /// This method, when overridden, should follow a generic structure that is currently: + /// 1. Create Indent + /// 2. Write File Headers + /// 3. Generate File + void generate( + T languageOptions, + Root root, + StringSink sink, + ); + + /// Adds specified file headers. + void writeFileHeaders( + T languageOptions, + Root root, + StringSink sink, + Indent indent, + ); } diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index 00293bfc0e8..310125937da 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -93,7 +93,16 @@ class JavaGenerator extends Generator { /// Generates Java files with specified [JavaOptions] @override void generate(JavaOptions languageOptions, Root root, StringSink sink) { - generateJava(languageOptions, root, sink); + final Indent indent = Indent(sink); + + writeFileHeaders(languageOptions, root, sink, indent); + generateJava(languageOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + JavaOptions languageOptions, Root root, StringSink sink, Indent indent) { + writeHeader(languageOptions, root, sink, indent); } } @@ -534,22 +543,24 @@ String _castObject( } } +/// Writes file header to sink. +void writeHeader( + JavaOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); +} + /// Generates the ".java" file for the AST represented by [root] to [sink] with the /// provided [options]. -void generateJava(JavaOptions options, Root root, StringSink sink) { +void generateJava( + JavaOptions options, Root root, StringSink sink, Indent indent) { final Set rootClassNameSet = root.classes.map((Class x) => x.name).toSet(); final Set rootEnumNameSet = root.enums.map((Enum x) => x.name).toSet(); - final Indent indent = Indent(sink); - - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - } void writeImports() { indent.writeln('import android.util.Log;'); @@ -764,7 +775,6 @@ void generateJava(JavaOptions options, Root root, StringSink sink) { }'''); } - writeHeader(); indent.addln(''); if (options.package != null) { indent.writeln('package ${options.package};'); diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index 99690a4ac92..abdf83aa74f 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -73,7 +73,16 @@ class KotlinGenerator extends Generator { /// Generates Kotlin files with specified [KotlinOptions] @override void generate(KotlinOptions languageOptions, Root root, StringSink sink) { - generateKotlin(languageOptions, root, sink); + final Indent indent = Indent(sink); + + writeFileHeaders(languageOptions, root, sink, indent); + generateKotlin(languageOptions, root, sink, indent); + } + + @override + void writeFileHeaders(KotlinOptions languageOptions, Root root, + StringSink sink, Indent indent) { + writeHeader(languageOptions, root, sink, indent); } } @@ -447,28 +456,30 @@ String _nullsafeKotlinTypeForDartType(TypeDeclaration type) { return '${_kotlinTypeForDartType(type)}$nullSafe'; } +/// Writes file header to sink. +void writeHeader( + KotlinOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); +} + /// Generates the ".kotlin" file for the AST represented by [root] to [sink] with the /// provided [options]. -void generateKotlin(KotlinOptions options, Root root, StringSink sink) { +void generateKotlin( + KotlinOptions options, Root root, StringSink sink, Indent indent) { final Set rootClassNameSet = root.classes.map((Class x) => x.name).toSet(); final Set rootEnumNameSet = root.enums.map((Enum x) => x.name).toSet(); - final Indent indent = Indent(sink); HostDatatype getHostDatatype(NamedType field) { return getFieldHostDatatype(field, root.classes, root.enums, (TypeDeclaration x) => _kotlinTypeForBuiltinDartType(x)); } - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - } - void writeImports() { indent.writeln('import android.util.Log'); indent.writeln('import io.flutter.plugin.common.BasicMessageChannel'); @@ -663,7 +674,6 @@ void generateKotlin(KotlinOptions options, Root root, StringSink sink) { }); } - writeHeader(); indent.addln(''); if (options.package != null) { indent.writeln('package ${options.package}'); diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 0d376e1a582..5b59377a8dd 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -72,7 +72,16 @@ class ObjcHeaderGenerator extends Generator { /// Generates Objc header files with specified [ObjcOptions] @override void generate(ObjcOptions languageOptions, Root root, StringSink sink) { - generateObjcHeader(languageOptions, root, sink); + final Indent indent = Indent(sink); + + writeFileHeaders(languageOptions, root, sink, indent); + generateObjcHeader(languageOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + ObjcOptions languageOptions, Root root, StringSink sink, Indent indent) { + writeObjcHeaderHeader(languageOptions, root, sink, indent); } } @@ -84,7 +93,16 @@ class ObjcSourceGenerator extends Generator { /// Generates Objc files with specified [ObjcOptions] @override void generate(ObjcOptions languageOptions, Root root, StringSink sink) { - generateObjcSource(languageOptions, root, sink); + final Indent indent = Indent(sink); + + writeObjcSourceHeader(languageOptions, root, sink, indent); + generateObjcSource(languageOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + ObjcOptions languageOptions, Root root, StringSink sink, Indent indent) { + writeObjcSourceHeader(languageOptions, root, sink, indent); } } @@ -555,19 +573,20 @@ void _writeFlutterApiDeclaration( indent.writeln('@end'); } -/// Generates the ".h" file for the AST represented by [root] to [sink] with the -/// provided [options]. -void generateObjcHeader(ObjcOptions options, Root root, StringSink sink) { - final Indent indent = Indent(sink); - - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); +/// Writes Objc header file header to sink. +void writeObjcHeaderHeader( + ObjcOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); +} +/// Generates the ".h" file for the AST represented by [root] to [sink] with the +/// provided [options]. +void generateObjcHeader( + ObjcOptions options, Root root, StringSink sink, Indent indent) { void writeImports() { indent.writeln('#import '); } @@ -596,7 +615,6 @@ void generateObjcHeader(ObjcOptions options, Root root, StringSink sink) { }); } - writeHeader(); writeImports(); writeForwardDeclarations(); indent.writeln(''); @@ -898,22 +916,24 @@ void _writeFlutterApiSource( indent.writeln('@end'); } +/// Writes Objc Source file header to sink. +void writeObjcSourceHeader( + ObjcOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); +} + /// Generates the ".m" file for the AST represented by [root] to [sink] with the /// provided [options]. -void generateObjcSource(ObjcOptions options, Root root, StringSink sink) { - final Indent indent = Indent(sink); +void generateObjcSource( + ObjcOptions options, Root root, StringSink sink, Indent indent) { final List classNames = root.classes.map((Class x) => x.name).toList(); final List enumNames = root.enums.map((Enum x) => x.name).toList(); - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - } - void writeImports() { indent.writeln('#import "${options.header}"'); indent.writeln('#import '); @@ -1030,7 +1050,6 @@ static id GetNullableObjectAtIndex(NSArray* array, NSInteger key) { } } - writeHeader(); writeImports(); indent.writeln(''); writeArcEnforcer(); diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index b25931c03e3..8ea5ed88065 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -56,7 +56,15 @@ class SwiftGenerator extends Generator { /// Generates Swift files with specified [SwiftOptions] @override void generate(SwiftOptions languageOptions, Root root, StringSink sink) { - generateSwift(languageOptions, root, sink); + final Indent indent = Indent(sink); + writeFileHeaders(languageOptions, root, sink, indent); + generateSwift(languageOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + SwiftOptions languageOptions, Root root, StringSink sink, Indent indent) { + writeHeader(languageOptions, root, sink, indent); } } @@ -442,28 +450,30 @@ String _nullsafeSwiftTypeForDartType(TypeDeclaration type) { return '${_swiftTypeForDartType(type)}$nullSafe'; } +/// Writes file header to sink. +void writeHeader( + SwiftOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); +} + /// Generates the ".swift" file for the AST represented by [root] to [sink] with the /// provided [options]. -void generateSwift(SwiftOptions options, Root root, StringSink sink) { +void generateSwift( + SwiftOptions options, Root root, StringSink sink, Indent indent) { final Set rootClassNameSet = root.classes.map((Class x) => x.name).toSet(); final Set rootEnumNameSet = root.enums.map((Enum x) => x.name).toSet(); - final Indent indent = Indent(sink); HostDatatype getHostDatatype(NamedType field) { return getFieldHostDatatype(field, root.classes, root.enums, (TypeDeclaration x) => _swiftTypeForBuiltinDartType(x)); } - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - } - void writeImports() { indent.writeln('import Foundation'); indent.format(''' @@ -632,7 +642,6 @@ import FlutterMacOS }); } - writeHeader(); indent.addln(''); writeImports(); indent.addln(''); From ae817ad221d8f05293e97536904ae24816466cf8 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 09:56:48 -0800 Subject: [PATCH 15/45] Updates tests to use new generator class --- packages/pigeon/test/cpp_generator_test.dart | 81 ++++-- packages/pigeon/test/dart_generator_test.dart | 153 ++++++---- packages/pigeon/test/java_generator_test.dart | 117 +++++--- .../pigeon/test/kotlin_generator_test.dart | 99 ++++--- packages/pigeon/test/objc_generator_test.dart | 261 +++++++++++------- .../pigeon/test/swift_generator_test.dart | 99 ++++--- 6 files changed, 528 insertions(+), 282 deletions(-) diff --git a/packages/pigeon/test/cpp_generator_test.dart b/packages/pigeon/test/cpp_generator_test.dart index d089b0a4480..4e4a3a1a354 100644 --- a/packages/pigeon/test/cpp_generator_test.dart +++ b/packages/pigeon/test/cpp_generator_test.dart @@ -45,7 +45,8 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Input')); expect(code, contains('class Output')); @@ -53,7 +54,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Input::Input()')); expect(code, contains('Output::Output')); @@ -101,7 +103,8 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Method name and argument names should be adjusted. expect(code, contains(' DoSomething(const Input& some_input)')); @@ -116,7 +119,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('pointer_input_field')); expect(code, contains('Output::output_field()')); @@ -144,7 +148,8 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect( @@ -184,7 +189,8 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect( @@ -238,14 +244,16 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('){'))); expect(code, isNot(contains('const{'))); } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('){'))); expect(code, isNot(contains('const{'))); @@ -271,7 +279,8 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains(''' #include @@ -286,7 +295,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(header: 'a_header.h'), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(header: 'a_header.h'), root, sink); final String code = sink.toString(); expect(code, contains(''' #include "a_header.h" @@ -322,14 +332,16 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(namespace: 'foo'), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(namespace: 'foo'), root, sink); final String code = sink.toString(); expect(code, contains('namespace foo {')); expect(code, contains('} // namespace foo')); } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(namespace: 'foo'), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(namespace: 'foo'), root, sink); final String code = sink.toString(); expect(code, contains('namespace foo {')); expect(code, contains('} // namespace foo')); @@ -390,7 +402,8 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Getters should return const pointers. expect(code, contains('const bool* nullable_bool()')); @@ -422,7 +435,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Getters extract optionals. expect(code, @@ -521,7 +535,8 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // POD getters should return copies references. expect(code, contains('bool non_nullable_bool()')); @@ -546,7 +561,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Getters just return the value. expect(code, contains('return non_nullable_bool_;')); @@ -644,7 +660,8 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect( code, contains('ErrorOr> ReturnNullableBool()')); @@ -749,7 +766,8 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('ErrorOr ReturnBool()')); expect(code, contains('ErrorOr ReturnInt()')); @@ -825,7 +843,8 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -838,7 +857,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Most types should just use get_if, since the parameter is a pointer, // and get_if will automatically handle null values (since a null @@ -943,7 +963,8 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -956,7 +977,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Most types should extract references. Since the type is non-nullable, // there's only one possible type. @@ -1010,7 +1032,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // A bare 'auto' here would create a copy, not a reference, which is // ineffecient. @@ -1122,7 +1145,8 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateCppHeader('foo', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(cppHeaderOut: 'foo'), root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('//$comment')); @@ -1157,7 +1181,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : public flutter::StandardCodecSerializer'))); }); @@ -1199,7 +1224,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + final CppHeaderGenerator generator = CppHeaderGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains(' : public flutter::StandardCodecSerializer')); }); @@ -1268,7 +1294,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppSourceGenerator generator = CppSourceGenerator(); + generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('reply(wrap'))); expect(code, contains('reply(flutter::EncodableValue(')); diff --git a/packages/pigeon/test/dart_generator_test.dart b/packages/pigeon/test/dart_generator_test.dart index 38442ccd358..5eb9bdd9fc6 100644 --- a/packages/pigeon/test/dart_generator_test.dart +++ b/packages/pigeon/test/dart_generator_test.dart @@ -29,7 +29,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' dataType1? field1;')); @@ -49,7 +50,8 @@ void main() { enums: [anEnum], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum Foobar')); expect(code, contains(' one,')); @@ -92,7 +94,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('Future doSomething(Input arg_input)')); @@ -118,7 +121,8 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('Future add(int arg_x, int arg_y)')); @@ -145,7 +149,8 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('int add(int x, int y)')); @@ -182,7 +187,8 @@ void main() { ) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -224,7 +230,8 @@ void main() { ) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -276,7 +283,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('abstract class Api')); expect(code, contains('static void setup(Api')); @@ -310,7 +318,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doSomething')); expect(code, contains('return;')); @@ -343,7 +352,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); // The next line verifies that we're not setting a variable to the value of "doSomething", but // ignores the line where we assert the value of the argument isn't null, since on that line @@ -373,7 +383,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('output.*=.*doSomething[(][)]')); expect(code, contains('Output doSomething();')); @@ -415,7 +426,8 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum1?.index,')); expect(code, contains('? Enum.values[result[0]! as int]')); @@ -442,7 +454,8 @@ void main() { ]) ]); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum Foo {')); expect(code, contains('Future bar(Foo? arg_foo) async')); @@ -485,7 +498,8 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum1.index,')); expect(code, contains('enum1: Enum.values[result[0]! as int]')); @@ -512,7 +526,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('channel.send[(]null[)]')); }); @@ -570,7 +585,8 @@ void main() { ], enums: []); final StringBuffer mainCodeSink = StringBuffer(); final StringBuffer testCodeSink = StringBuffer(); - generateDart(DartOptions(), root, mainCodeSink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, mainCodeSink); final String mainCode = mainCodeSink.toString(); expect(mainCode, isNot(contains(r"import 'fo\'o.dart';"))); expect(mainCode, contains('class Api {')); @@ -578,12 +594,15 @@ void main() { expect(mainCode, isNot(contains('.ApiMock.doSomething'))); expect(mainCode, isNot(contains("'${Keys.result}': output"))); expect(mainCode, isNot(contains('return [];'))); - generateTestDart( - DartOptions(), + + final DartTestGenerator testGenerator = DartTestGenerator(); + testGenerator.generate( + DartOptions( + dartOutPath: "fo'o.dart", + testOutPath: 'test.dart', + ), root, testCodeSink, - dartOutPath: "fo'o.dart", - testOutPath: 'test.dart', ); final String testCode = testCodeSink.toString(); expect(testCode, contains(r"import 'fo\'o.dart';")); @@ -631,7 +650,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('abstract class Api')); expect(code, contains('Future doSomething(Input arg0);')); @@ -675,7 +695,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(matches('=.s*doSomething'))); expect(code, contains('await api.doSomething(')); @@ -719,7 +740,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, matches('Output.*doSomething.*Input')); @@ -747,7 +769,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('channel.send[(]null[)]')); }); @@ -759,11 +782,10 @@ void main() { test('header', () { final Root root = Root(apis: [], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateDart( - DartOptions(copyrightHeader: makeIterable('hello world')), - root, - sink, - ); + + final DartGenerator generator = DartGenerator(); + generator.generate( + DartOptions(copyrightHeader: makeIterable('hello world')), root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -788,7 +810,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' List? field1;')); @@ -815,7 +838,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' Map? field1;')); @@ -844,7 +868,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doit(List arg')); }); @@ -872,7 +897,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doit(List arg')); }); @@ -896,7 +922,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future> doit(')); expect(code, @@ -931,7 +958,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('List doit(')); expect( @@ -958,7 +986,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit()')); expect(code, contains('return (replyList[0] as int?);')); @@ -983,7 +1012,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future?> doit()')); expect(code, @@ -1008,7 +1038,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit()')); expect(code, contains('return (replyList[0] as int?);')); @@ -1031,7 +1062,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('int? doit();')); expect(code, contains('final int? output = api.doit();')); @@ -1055,7 +1087,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit();')); expect(code, contains('final int? output = await api.doit();')); @@ -1078,7 +1111,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -1107,7 +1141,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit(int? arg_foo) async {')); }); @@ -1133,7 +1168,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('void doit(int? foo);')); }); @@ -1150,12 +1186,14 @@ name: foobar final Root root = Root(classes: [], apis: [], enums: []); final StringBuffer sink = StringBuffer(); - generateTestDart( - DartOptions(), + final DartTestGenerator testGenerator = DartTestGenerator(); + testGenerator.generate( + DartOptions( + dartOutPath: path.join(foo.path, 'bar.dart'), + testOutPath: path.join(tempDir.path, 'test', 'bar_test.dart'), + ), root, sink, - dartOutPath: path.join(foo.path, 'bar.dart'), - testOutPath: path.join(tempDir.path, 'test', 'bar_test.dart'), ); final String code = sink.toString(); expect(code, contains("import 'package:foobar/foo/bar.dart';")); @@ -1238,7 +1276,8 @@ name: foobar ], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('///$comment')); @@ -1273,7 +1312,8 @@ name: foobar enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('extends StandardMessageCodec'))); expect(code, contains('StandardMessageCodec')); @@ -1316,7 +1356,8 @@ name: foobar ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('extends StandardMessageCodec')); }); @@ -1354,13 +1395,17 @@ name: foobar ], ); final StringBuffer sink = StringBuffer(); - generateTestDart( - DartOptions(), + + final DartTestGenerator testGenerator = DartTestGenerator(); + testGenerator.generate( + DartOptions( + dartOutPath: 'code.dart', + testOutPath: 'test.dart', + ), root, sink, - dartOutPath: 'code.dart', - testOutPath: 'test.dart', ); + final String testCode = sink.toString(); expect( testCode, diff --git a/packages/pigeon/test/java_generator_test.dart b/packages/pigeon/test/java_generator_test.dart index bfcea98cfe2..f2a25288754 100644 --- a/packages/pigeon/test/java_generator_test.dart +++ b/packages/pigeon/test/java_generator_test.dart @@ -27,7 +27,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public class Messages')); expect(code, contains('public static class Foobar')); @@ -55,7 +56,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public enum Foobar')); expect(code, contains(' ONE(0),')); @@ -86,7 +88,8 @@ void main() { final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages', package: 'com.google.foobar'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('package com.google.foobar;')); expect(code, contains('ArrayList toList()')); @@ -129,7 +132,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public interface Api')); expect(code, matches('Output.*doSomething.*Input')); @@ -200,7 +204,8 @@ void main() { final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('private @Nullable Boolean aBool;')); expect(code, contains('private @Nullable Long aInt;')); @@ -249,7 +254,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public static class Api')); expect(code, matches('doSomething.*Input.*Output')); @@ -283,7 +289,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, isNot(matches('=.*doSomething'))); expect(code, contains('doSomething(')); @@ -317,7 +324,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('Reply')); expect(code, contains('callback.reply(null)')); @@ -345,7 +353,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('Output doSomething()')); expect(code, contains('api.doSomething()')); @@ -373,7 +382,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doSomething(Reply')); expect(code, contains('channel.send(null')); @@ -392,7 +402,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public static class Foobar')); expect(code, contains('private @Nullable List field1;')); @@ -411,7 +422,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public static class Foobar')); expect(code, contains('private @Nullable Map field1;')); @@ -447,7 +459,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public class Messages')); expect(code, contains('public static class Outer')); @@ -498,7 +511,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public interface Api')); expect(code, contains('public interface Result {')); @@ -549,7 +563,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public static class Api')); expect(code, matches('doSomething.*Input.*Output')); @@ -582,7 +597,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public enum Enum1')); expect(code, contains(' ONE(0),')); @@ -621,7 +637,8 @@ void main() { ]); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public enum Foo')); expect( @@ -641,7 +658,8 @@ void main() { className: 'Messages', copyrightHeader: makeIterable('hello world'), ); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -667,7 +685,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains('List field1;')); @@ -695,7 +714,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains('Map field1;')); @@ -725,7 +745,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doit(@NonNull List arg')); }); @@ -754,7 +775,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doit(@NonNull List arg')); }); @@ -779,7 +801,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('List doit(')); expect(code, contains('List output =')); @@ -805,7 +828,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doit(Reply> callback)')); expect(code, contains('List output =')); @@ -828,7 +852,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doit(Reply callback)')); expect( @@ -858,7 +883,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Messages')); expect(code, contains('Long add(@NonNull Long x, @NonNull Long y)')); @@ -889,7 +915,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Api'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('Object xArg = args.get(0)')); }); @@ -915,7 +942,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Messages')); expect(code, contains('BasicMessageChannel channel')); @@ -947,7 +975,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect( code, @@ -973,7 +1002,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('@Nullable Long doit();')); }); @@ -997,7 +1027,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); // Java doesn't accept nullability annotations in type arguments. expect(code, contains('Result')); @@ -1025,7 +1056,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains(' void doit(@Nullable Long foo);')); }); @@ -1052,7 +1084,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1083,7 +1116,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1108,7 +1142,8 @@ void main() { final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages', useGeneratedAnnotation: true); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('@javax.annotation.Generated("dev.flutter.pigeon")')); }); @@ -1125,7 +1160,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains('@javax.annotation.Generated("dev.flutter.pigeon")'))); @@ -1207,7 +1243,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); for (final String comment in comments) { // This regex finds the comment only between the open and close comment block @@ -1247,7 +1284,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains(' extends StandardMessageCodec'))); expect(code, contains('StandardMessageCodec')); @@ -1291,7 +1329,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains(' extends StandardMessageCodec')); }); diff --git a/packages/pigeon/test/kotlin_generator_test.dart b/packages/pigeon/test/kotlin_generator_test.dart index 4653410837e..96056c1b1b1 100644 --- a/packages/pigeon/test/kotlin_generator_test.dart +++ b/packages/pigeon/test/kotlin_generator_test.dart @@ -27,7 +27,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar (')); expect(code, contains('val field1: Long? = null')); @@ -50,7 +51,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum class Foobar(val raw: Int) {')); expect(code, contains('ONE(0)')); @@ -78,7 +80,8 @@ void main() { ]); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum class Foo(val raw: Int) {')); expect(code, contains('val fooArg = Foo.ofRaw(args[0] as Int)')); @@ -124,7 +127,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('interface Api')); expect(code, contains('fun doSomething(input: Input): Output')); @@ -213,7 +217,8 @@ void main() { final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('val aBool: Boolean? = null')); expect(code, contains('val aInt: Long? = null')); @@ -265,7 +270,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Api(private val binaryMessenger: BinaryMessenger)')); @@ -302,7 +308,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, isNot(matches('.*doSomething(.*) ->'))); expect(code, matches('doSomething(.*)')); @@ -338,7 +345,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('callback: () -> Unit')); expect(code, contains('callback()')); @@ -367,7 +375,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doSomething(): Output')); expect(code, contains('wrapped = listOf(api.doSomething())')); @@ -398,7 +407,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doSomething(callback: (Output) -> Unit)')); expect(code, contains('channel.send(null)')); @@ -418,7 +428,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar')); expect(code, contains('val field1: List? = null')); @@ -438,7 +449,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar')); expect(code, contains('val field1: Map? = null')); @@ -476,7 +488,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Outer')); expect(code, contains('data class Nested')); @@ -529,7 +542,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('interface Api')); expect(code, contains('api.doSomething(argArg) {')); @@ -577,7 +591,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, matches('fun doSomething.*Input.*callback.*Output.*Unit')); @@ -610,7 +625,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum class Enum1(val raw: Int)')); expect(code, contains('ONE(0)')); @@ -627,7 +643,8 @@ void main() { final KotlinOptions kotlinOptions = KotlinOptions( copyrightHeader: makeIterable('hello world'), ); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -654,7 +671,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar')); expect(code, contains('val field1: List')); @@ -683,7 +701,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar')); expect(code, contains('val field1: Map')); @@ -714,7 +733,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(arg: List')); }); @@ -744,7 +764,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(argArg: List')); }); @@ -769,7 +790,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(): List')); expect(code, contains('wrapped = listOf(api.doit())')); @@ -796,7 +818,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(callback: (List) -> Unit')); expect(code, contains('val result = it as List')); @@ -824,7 +847,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun add(x: Long, y: Long): Long')); expect(code, contains('val args = message as List')); @@ -861,7 +885,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('val channel = BasicMessageChannel')); expect(code, contains('val result = it as Long')); @@ -889,7 +914,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(): Long?')); }); @@ -913,7 +939,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(callback: (Long?) -> Unit')); }); @@ -940,7 +967,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect( code, @@ -970,7 +998,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(fooArg: Long?, callback: () -> Unit')); }); @@ -1005,7 +1034,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('val input: String\n')); }); @@ -1086,7 +1116,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); for (final String comment in comments) { // This regex finds the comment only between the open and close comment block @@ -1126,7 +1157,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : StandardMessageCodec() '))); expect(code, contains('StandardMessageCodec')); @@ -1170,7 +1202,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains(' : StandardMessageCodec() ')); }); diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index cf83029338e..cc33903df77 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -17,7 +17,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, matches('@property.*NSString.*field1')); @@ -32,7 +33,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Foobar')); @@ -49,7 +51,8 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, Enum1) {')); expect(code, contains(' Enum1One = 0,')); @@ -67,7 +70,8 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(prefix: 'PREFIX'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(header: 'PREFIX'), root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, PREFIXEnum1) {')); expect(code, contains(' PREFIXEnum1One = 0,')); @@ -103,7 +107,8 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Foobar')); @@ -135,13 +140,15 @@ void main() { final StringBuffer sink = StringBuffer(); const ObjcOptions options = ObjcOptions(header: 'foo.h', prefix: 'AC'); { - generateObjcHeader(options, root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(options, root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, ACFoo)')); expect(code, contains(':(ACFoo)foo error:')); } { - generateObjcSource(options, root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -204,7 +211,8 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@property(nonatomic, assign) Enum1 enum1')); }); @@ -236,7 +244,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Input')); expect(code, contains('@interface Output')); @@ -275,7 +284,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Input')); @@ -322,7 +332,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, contains('@class FlutterStandardTypedData;')); @@ -350,7 +361,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@implementation Foobar')); expect(code, @@ -371,7 +383,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@property(nonatomic, strong, nullable) Input * nested;')); @@ -391,7 +404,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect( code, @@ -410,7 +424,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(prefix: 'ABC'), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('@interface ABCFoobar')); }); @@ -424,7 +439,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(prefix: 'ABC'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('@implementation ABCFoobar')); }); @@ -458,7 +474,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(prefix: 'ABC'), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, matches('property.*ABCInput')); expect(code, matches('ABCNested.*doSomething.*ABCInput')); @@ -494,7 +511,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(prefix: 'ABC'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('ABCInput fromList')); expect(code, matches(r'ABCInput.*=.*args.*0.*\;')); @@ -530,7 +548,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@interface Api : NSObject')); expect( @@ -569,7 +588,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@implementation Api')); expect(code, matches('void.*doSomething.*Input.*Output.*{')); @@ -598,8 +618,10 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + final String code = sink.toString(); expect(code, contains('(void)doSomething:')); }); @@ -627,7 +649,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, isNot(matches('=.*doSomething'))); @@ -658,7 +681,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('completion:(void(^)(NSError *_Nullable))')); @@ -687,7 +711,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('completion:(void(^)(NSError *_Nullable))')); @@ -711,7 +736,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, matches('ABCOutput.*doSomethingWithError:[(]FlutterError')); @@ -734,7 +760,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, matches('output.*=.*api doSomethingWithError:&error')); @@ -757,7 +784,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -783,7 +811,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -802,7 +831,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, matches('@property.*NSArray.*field1')); @@ -817,7 +847,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, matches('@property.*NSDictionary.*field1')); @@ -838,7 +869,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect( @@ -867,7 +899,8 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('(NSDictionary *)foo')); }); @@ -901,7 +934,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -940,7 +974,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -967,7 +1002,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -987,7 +1023,8 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1026,7 +1063,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1064,7 +1102,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1084,7 +1123,8 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1111,7 +1151,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1127,14 +1168,14 @@ void main() { test('source copyright', () { final Root root = Root(apis: [], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - ObjcOptions( - header: 'foo.h', - prefix: 'ABC', - copyrightHeader: makeIterable('hello world')), - root, - sink, - ); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( + ObjcOptions( + header: 'foo.h', + prefix: 'ABC', + copyrightHeader: makeIterable('hello world')), + root, + sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -1142,14 +1183,14 @@ void main() { test('header copyright', () { final Root root = Root(apis: [], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - ObjcOptions( - header: 'foo.h', - prefix: 'ABC', - copyrightHeader: makeIterable('hello world')), - root, - sink, - ); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( + ObjcOptions( + header: 'foo.h', + prefix: 'ABC', + copyrightHeader: makeIterable('hello world')), + root, + sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -1174,7 +1215,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('NSArray * field1')); @@ -1204,14 +1246,16 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1245,14 +1289,16 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); @@ -1289,7 +1335,8 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *> *)arg')); @@ -1316,7 +1363,8 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1324,7 +1372,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('NSArray *output =')); @@ -1351,7 +1400,8 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1359,7 +1409,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1388,7 +1439,8 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1398,7 +1450,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('NSArray *args = message;')); @@ -1433,7 +1486,8 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1443,7 +1497,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('NSArray *args = message;')); @@ -1476,7 +1531,8 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1486,7 +1542,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); expect( @@ -1530,15 +1587,18 @@ void main() { final Root divideRoot = getDivideRoot(ApiLocation.host); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*error.*;')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); + final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*error.*;')); } @@ -1548,21 +1608,18 @@ void main() { final Root divideRoot = getDivideRoot(ApiLocation.flutter); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), - divideRoot, - sink, - ); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate( + const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*completion.*;')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), - divideRoot, - sink, - ); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate( + const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); + final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*completion.*{')); } @@ -1577,7 +1634,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, contains('@property(nonatomic, copy) NSString * field1')); @@ -1600,7 +1658,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -1625,7 +1684,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, matches(r'doitWithCompletion.*NSNumber \*_Nullable')); }); @@ -1647,7 +1707,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, matches(r'nullable NSNumber.*doitWithError')); }); @@ -1674,13 +1735,15 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doitFoo:(nullable NSNumber *)foo')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('NSNumber *arg_foo = GetNullableObjectAtIndex(args, 0);')); @@ -1709,13 +1772,15 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doitFoo:(nullable NSNumber *)foo')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('- (void)doitFoo:(nullable NSNumber *)arg_foo')); } @@ -1739,7 +1804,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -1823,7 +1889,8 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('///$comment')); @@ -1858,7 +1925,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : FlutterStandardReader'))); }); @@ -1900,7 +1968,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); + generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains(' : FlutterStandardReader')); }); diff --git a/packages/pigeon/test/swift_generator_test.dart b/packages/pigeon/test/swift_generator_test.dart index 74c8aad15ca..305ca203fe7 100644 --- a/packages/pigeon/test/swift_generator_test.dart +++ b/packages/pigeon/test/swift_generator_test.dart @@ -26,7 +26,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: Int32? = nil')); @@ -49,7 +50,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum Foobar: Int')); expect(code, contains(' case one = 0')); @@ -77,7 +79,8 @@ void main() { ]); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum Foo: Int')); expect(code, contains('let fooArg = Foo(rawValue: args[0] as! Int)!')); @@ -120,7 +123,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('protocol Api')); expect(code, matches('func doSomething.*Input.*Output')); @@ -183,7 +187,8 @@ void main() { final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('var aBool: Bool? = nil')); expect(code, contains('var aInt: Int32? = nil')); @@ -232,7 +237,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('init(binaryMessenger: FlutterBinaryMessenger)')); @@ -267,7 +273,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, isNot(matches('.*doSomething(.*) ->'))); expect(code, matches('doSomething(.*)')); @@ -301,7 +308,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('completion: @escaping () -> Void')); expect(code, contains('completion()')); @@ -329,7 +337,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doSomething() -> Output')); expect(code, contains('let result = api.doSomething()')); @@ -358,7 +367,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doSomething(completion: @escaping (Output) -> Void)')); @@ -378,7 +388,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: [Any?]? = nil')); @@ -397,7 +408,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: [AnyHashable: Any?]? = nil')); @@ -433,7 +445,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Outer')); expect(code, contains('struct Nested')); @@ -481,7 +494,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('protocol Api')); expect(code, contains('api.doSomething(arg: argArg) { result in')); @@ -526,7 +540,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, matches('func doSomething.*Input.*completion.*Output.*Void')); @@ -558,7 +573,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum Enum1: Int')); expect(code, contains('case one = 0')); @@ -575,7 +591,8 @@ void main() { final SwiftOptions swiftOptions = SwiftOptions( copyrightHeader: makeIterable('hello world'), ); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -601,7 +618,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: [Int32?]')); @@ -629,7 +647,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: [String?: String?]')); @@ -659,7 +678,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit(arg: [Int32?]')); }); @@ -688,7 +708,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit(arg argArg: [Int32?]')); }); @@ -713,7 +734,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit() -> [Int32?]')); expect(code, contains('let result = api.doit()')); @@ -740,7 +762,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect( code, contains('func doit(completion: @escaping ([Int32?]) -> Void')); @@ -769,7 +792,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func add(x: Int32, y: Int32) -> Int32')); expect(code, contains('let args = message as! [Any?]')); @@ -800,7 +824,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('let channel = FlutterBasicMessageChannel')); expect(code, contains('let result = response as! Int32')); @@ -830,7 +855,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit() -> Int32?')); }); @@ -854,7 +880,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit(completion: @escaping (Int32?) -> Void')); }); @@ -881,7 +908,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('let fooArg = args[0] as? Int32')); }); @@ -908,7 +936,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect( code, @@ -944,7 +973,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('var input: String\n')); }); @@ -1025,7 +1055,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('///$comment')); @@ -1061,7 +1092,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains(': FlutterStandardReader '))); }); @@ -1104,7 +1136,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains(': FlutterStandardReader ')); }); From 5cecc211da254395eaa37c8f93af91da617a3626 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 10:16:00 -0800 Subject: [PATCH 16/45] source -> header --- packages/pigeon/test/objc_generator_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index cc33903df77..7b01154ce82 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -107,7 +107,7 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); From 99f25b5e0f57db7a29c24749a83815987eac471c Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 10:16:30 -0800 Subject: [PATCH 17/45] correct options --- packages/pigeon/test/objc_generator_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index 7b01154ce82..480fe2deff6 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -148,7 +148,7 @@ void main() { } { final ObjcSourceGenerator generator = ObjcSourceGenerator(); - generator.generate(const ObjcOptions(), root, sink); + generator.generate(options, root, sink); final String code = sink.toString(); expect( code, From 16df2079a618b4bbdc1076d741fe9ddcb3dbecbc Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 10:19:50 -0800 Subject: [PATCH 18/45] header -> source --- packages/pigeon/test/objc_generator_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index 480fe2deff6..d447000b4f7 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -107,7 +107,7 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcSourceGenerator generator = ObjcSourceGenerator(); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); From 049c6be959d2c0403515b8e1b58d27c6ae41f30b Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 10:23:37 -0800 Subject: [PATCH 19/45] header -> prefix, source -> header --- packages/pigeon/test/objc_generator_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index d447000b4f7..981b5fb6c29 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -70,8 +70,8 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); - generator.generate(const ObjcOptions(header: 'PREFIX'), root, sink); + final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + generator.generate(const ObjcOptions(prefix: 'PREFIX'), root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, PREFIXEnum1) {')); expect(code, contains(' PREFIXEnum1One = 0,')); From a2dcb1c1c0cdee8761199abb6264d1b005623c92 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 10:27:28 -0800 Subject: [PATCH 20/45] remove headers from generateTestDart --- packages/pigeon/lib/dart_generator.dart | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 90b31c7b419..76092aa759d 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -118,7 +118,7 @@ class DartTestGenerator extends Generator { @override void writeFileHeaders( DartOptions languageOptions, Root root, StringSink sink, Indent indent) { - writeHeader(languageOptions, root, sink, indent); + writeTestHeader(languageOptions, root, sink, indent); } } @@ -760,6 +760,20 @@ String _posixify(String inputPath) { return context.fromUri(path.toUri(path.absolute(inputPath))); } +/// Writes file header to sink. +void writeTestHeader( + DartOptions opt, Root root, StringSink sink, Indent indent) { + if (opt.copyrightHeader != null) { + addLines(indent, opt.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); + indent.writeln( + '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import', + ); + indent.writeln('// ignore_for_file: avoid_relative_lib_imports'); +} + /// Generates Dart source code for test support libraries based on the given AST /// represented by [root], outputting the code to [sink]. [dartOutPath] is the /// path of the generated dart code to be tested. [testOutPath] is where the @@ -772,15 +786,6 @@ void generateTestDart( required String dartOutPath, required String testOutPath, }) { - if (opt.copyrightHeader != null) { - addLines(indent, opt.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - indent.writeln( - '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import', - ); - indent.writeln('// ignore_for_file: avoid_relative_lib_imports'); indent.writeln("import 'dart:async';"); indent.writeln( "import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;", From e4c78f58dc71b2a6708680f5efc9ebc1e66f75cc Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 22 Dec 2022 10:33:42 -0800 Subject: [PATCH 21/45] changelog --- packages/pigeon/CHANGELOG.md | 4 ++++ packages/pigeon/lib/generator_tools.dart | 2 +- packages/pigeon/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 6e6688e0d85..2ea828e27ff 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.2.17 + +* Adds writeHeaders method to Generator classes and updates tests to use new Generators. + ## 4.2.16 * Creates new Generator classes for each language. diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index ea522eaa04d..ef503c869b8 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -9,7 +9,7 @@ import 'dart:mirrors'; import 'ast.dart'; /// The current version of pigeon. This must match the version in pubspec.yaml. -const String pigeonVersion = '4.2.16'; +const String pigeonVersion = '4.2.17'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 886f56a6ea0..f77ac58c371 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%3Apigeon -version: 4.2.16 # This must match the version in lib/generator_tools.dart +version: 4.2.17 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.12.0 <3.0.0" From 68a23e20dcb2392a57cf706fba61c688c6bce9e9 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 09:12:28 -0800 Subject: [PATCH 22/45] Nits and combines source and header generators --- packages/pigeon/lib/cpp_generator.dart | 35 ++++++++++++------------ packages/pigeon/lib/generator.dart | 7 ++--- packages/pigeon/lib/generator_tools.dart | 9 ++++++ packages/pigeon/lib/objc_generator.dart | 23 ++++++---------- packages/pigeon/lib/pigeon_lib.dart | 8 +++--- 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 6bc120bc2d3..5912f6e98ed 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -21,8 +21,12 @@ const String _defaultCodecSerializer = 'flutter::StandardCodecSerializer'; /// Options that control how C++ code will be generated. class CppOptions { /// Creates a [CppOptions] object - const CppOptions( - {this.header, this.namespace, this.copyrightHeader, this.cppHeaderOut}); + const CppOptions({ + this.header, + this.namespace, + this.copyrightHeader, + this.cppHeaderOut, + }); /// The path to the header that will get placed in the source filed (example: /// "foo.h"). @@ -34,7 +38,7 @@ class CppOptions { /// A copyright header that will get prepended to generated code. final Iterable? copyrightHeader; - /// + /// The path to the output header file location. final String? cppHeaderOut; /// Creates a [CppOptions] from a Map representation where: @@ -66,27 +70,22 @@ class CppOptions { } /// Class that manages all Cpp header code generation. -class CppHeaderGenerator extends Generator { +class CppGenerator extends Generator { /// Instantiates a Cpp Generator. - CppHeaderGenerator(); + CppGenerator(this.fileType); - /// Generates Cpp header files with specified [CppOptions] - @override - void generate(CppOptions languageOptions, Root root, StringSink sink) { - generateCppHeader( - languageOptions.cppHeaderOut, languageOptions, root, sink); - } -} - -/// Class that manages all Cpp code generation. -class CppSourceGenerator extends Generator { - /// Instantiates a Cpp Generator. - CppSourceGenerator(); + /// Specifies which file type (header or source) will be generated. + FileType fileType; /// Generates Cpp files with specified [CppOptions] @override void generate(CppOptions languageOptions, Root root, StringSink sink) { - generateCppSource(languageOptions, root, sink); + if (fileType == FileType.header) { + generateCppHeader( + languageOptions.cppHeaderOut, languageOptions, root, sink); + } else { + generateCppSource(languageOptions, root, sink); + } } } diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index 0979627b3ac..02667e4a5c9 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -4,13 +4,10 @@ import 'ast.dart'; -/// A Super class of generator classes. +/// A superclass of generator classes. /// -/// This is meant to provide structure and direction for future generator work. +/// This provides the structure that is common across generators for different languages. abstract class Generator { - /// Instantiates a Generator. - const Generator(); - /// Generates files for specified language with specified [languageOptions] void generate(T languageOptions, Root root, StringSink sink); } diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index ea522eaa04d..65f9c4b7a42 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -497,3 +497,12 @@ Iterable getFieldsInSerializationOrder(Class klass) { // This returns the fields in the order they are declared in the pigeon file. return klass.fields; } + +/// Enum to specify which file will be generated for multi-file generators +enum FileType { + /// header file. + header, + + /// source file. + source, +} diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 0d376e1a582..2ef59abdf4a 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -65,26 +65,21 @@ class ObjcOptions { } /// Class that manages all Objc header code generation. -class ObjcHeaderGenerator extends Generator { +class ObjcGenerator extends Generator { /// Instantiates a Objc Generator. - ObjcHeaderGenerator(); + ObjcGenerator(this.fileType); - /// Generates Objc header files with specified [ObjcOptions] - @override - void generate(ObjcOptions languageOptions, Root root, StringSink sink) { - generateObjcHeader(languageOptions, root, sink); - } -} - -/// Class that manages all Objc code generation. -class ObjcSourceGenerator extends Generator { - /// Instantiates a Objc Generator. - ObjcSourceGenerator(); + /// Specifies which file type (header or source) will be generated. + FileType fileType; /// Generates Objc files with specified [ObjcOptions] @override void generate(ObjcOptions languageOptions, Root root, StringSink sink) { - generateObjcSource(languageOptions, root, sink); + if (fileType == FileType.header) { + generateObjcHeader(languageOptions, root, sink); + } else { + generateObjcSource(languageOptions, root, sink); + } } } diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index e630a09c438..c5fa3264bc6 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -468,7 +468,7 @@ class ObjcHeaderAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(objcOptionsWithHeader, root, sink); } @@ -493,7 +493,7 @@ class ObjcSourceAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(objcOptionsWithHeader, root, sink); } @@ -566,7 +566,7 @@ class CppHeaderAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(cppOptionsWithHeader, root, sink); } @@ -591,7 +591,7 @@ class CppSourceAdapter implements Adapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(cppOptionsWithHeader, root, sink); } From 67282cf045f5ee0b565de848373e0280dad0ea13 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 09:14:27 -0800 Subject: [PATCH 23/45] renames Adapter to GeneratorAdapter --- packages/pigeon/lib/pigeon_lib.dart | 122 +++++++++++----------- packages/pigeon/test/pigeon_lib_test.dart | 56 +++++----- 2 files changed, 93 insertions(+), 85 deletions(-) diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index c5fa3264bc6..7ad64df5e0c 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -357,17 +357,17 @@ IOSink? _openSink(String? output) { /// An adapter that will call a generator to write code to a sink /// based on the contents of [PigeonOptions]. -abstract class Adapter { - /// Returns an [IOSink] instance to be written to if the [Adapter] should - /// generate. If it returns `null`, the [Adapter] will be skipped. +abstract class GeneratorAdapter { + /// Returns an [IOSink] instance to be written to if the [GeneratorAdapter] should + /// generate. If it returns `null`, the [GeneratorAdapter] will be skipped. IOSink? shouldGenerate(PigeonOptions options); /// Write the generated code described in [root] to [sink] using the /// [options]. void generate(StringSink sink, PigeonOptions options, Root root); - /// Generates errors that would only be appropriate for this [Adapter]. For - /// example, maybe a certain feature isn't implemented in a [Adapter] yet. + /// Generates errors that would only be appropriate for this [GeneratorAdapter]. For + /// example, maybe a certain feature isn't implemented in a [GeneratorAdapter] yet. List validate(PigeonOptions options, Root root); } @@ -385,10 +385,10 @@ DartOptions _dartOptionsWithCopyrightHeader( copyrightHeader: parsedCopyrightHeader); } -/// An [Adapter] that generates the AST. -class AstAdapter implements Adapter { - /// Constructor for [AstAdapter]. - const AstAdapter(); +/// An [GeneratorAdapter] that generates the AST. +class AstGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [AstGeneratorAdapter]. + const AstGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -402,10 +402,10 @@ class AstAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// An [Adapter] that generates Dart source code. -class DartAdapter implements Adapter { - /// Constructor for [DartAdapter]. - const DartAdapter(); +/// An [GeneratorAdapter] that generates Dart source code. +class DartGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [DartGeneratorAdapter]. + const DartGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -422,10 +422,10 @@ class DartAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// An [Adapter] that generates Dart test source code. -class DartTestAdapter implements Adapter { - /// Constructor for [DartTestAdapter]. - const DartTestAdapter(); +/// An [GeneratorAdapter] that generates Dart test source code. +class DartTestGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [DartTestGeneratorAdapter]. + const DartTestGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -456,10 +456,10 @@ class DartTestAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// An [Adapter] that generates Objective-C header code. -class ObjcHeaderAdapter implements Adapter { - /// Constructor for [ObjcHeaderAdapter]. - const ObjcHeaderAdapter(); +/// An [GeneratorAdapter] that generates Objective-C header code. +class ObjcHeaderGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [ObjcHeaderGeneratorAdapter]. + const ObjcHeaderGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -481,10 +481,10 @@ class ObjcHeaderAdapter implements Adapter { validateObjc(options.objcOptions!, root); } -/// An [Adapter] that generates Objective-C source code. -class ObjcSourceAdapter implements Adapter { - /// Constructor for [ObjcSourceAdapter]. - const ObjcSourceAdapter(); +/// An [GeneratorAdapter] that generates Objective-C source code. +class ObjcSourceGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [ObjcSourceGeneratorAdapter]. + const ObjcSourceGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -505,10 +505,10 @@ class ObjcSourceAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// An [Adapter] that generates Java source code. -class JavaAdapter implements Adapter { - /// Constructor for [JavaAdapter]. - const JavaAdapter(); +/// An [GeneratorAdapter] that generates Java source code. +class JavaGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [JavaGeneratorAdapter]. + const JavaGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -530,10 +530,10 @@ class JavaAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// An [Adapter] that generates Swift source code. -class SwiftAdapter implements Adapter { - /// Constructor for [SwiftAdapter]. - const SwiftAdapter(); +/// An [GeneratorAdapter] that generates Swift source code. +class SwiftGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [SwiftGeneratorAdapter]. + const SwiftGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -553,10 +553,10 @@ class SwiftAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// An [Adapter] that generates C++ header code. -class CppHeaderAdapter implements Adapter { - /// Constructor for [CppHeaderAdapter]. - const CppHeaderAdapter(); +/// An [GeneratorAdapter] that generates C++ header code. +class CppHeaderGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [CppHeaderGeneratorAdapter]. + const CppHeaderGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -579,10 +579,10 @@ class CppHeaderAdapter implements Adapter { validateCpp(options.cppOptions!, root); } -/// An [Adapter] that generates C++ source code. -class CppSourceAdapter implements Adapter { - /// Constructor for [CppSourceAdapter]. - const CppSourceAdapter(); +/// An [GeneratorAdapter] that generates C++ source code. +class CppSourceGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [CppSourceGeneratorAdapter]. + const CppSourceGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -603,10 +603,10 @@ class CppSourceAdapter implements Adapter { List validate(PigeonOptions options, Root root) => []; } -/// An [Adapter] that generates Kotlin source code. -class KotlinAdapter implements Adapter { - /// Constructor for [KotlinAdapter]. - const KotlinAdapter(); +/// An [GeneratorAdapter] that generates Kotlin source code. +class KotlinGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [KotlinGeneratorAdapter]. + const KotlinGeneratorAdapter(); @override void generate(StringSink sink, PigeonOptions options, Root root) { @@ -1353,7 +1353,7 @@ ${_argParser.usage}'''; /// customize the generators that pigeon will use. The optional parameter /// [sdkPath] allows you to specify the Dart SDK path. static Future run(List args, - {List? adapters, String? sdkPath}) { + {List? adapters, String? sdkPath}) { final PigeonOptions options = Pigeon.parseArgs(args); return runWithOptions(options, adapters: adapters, sdkPath: sdkPath); } @@ -1363,23 +1363,23 @@ ${_argParser.usage}'''; /// customize the generators that pigeon will use. The optional parameter /// [sdkPath] allows you to specify the Dart SDK path. static Future runWithOptions(PigeonOptions options, - {List? adapters, String? sdkPath}) async { + {List? adapters, String? sdkPath}) async { final Pigeon pigeon = Pigeon.setup(); if (options.debugGenerators ?? false) { generator_tools.debugGenerators = true; } - final List safeAdapters = adapters ?? - [ - const DartAdapter(), - const JavaAdapter(), - const SwiftAdapter(), - const KotlinAdapter(), - const CppHeaderAdapter(), - const CppSourceAdapter(), - const DartTestAdapter(), - const ObjcHeaderAdapter(), - const ObjcSourceAdapter(), - const AstAdapter(), + final List safeGeneratorAdapters = adapters ?? + [ + const DartGeneratorAdapter(), + const JavaGeneratorAdapter(), + const SwiftGeneratorAdapter(), + const KotlinGeneratorAdapter(), + const CppHeaderGeneratorAdapter(), + const CppSourceGeneratorAdapter(), + const DartTestGeneratorAdapter(), + const ObjcHeaderGeneratorAdapter(), + const ObjcSourceGeneratorAdapter(), + const AstGeneratorAdapter(), ]; _executeConfigurePigeon(options); @@ -1401,7 +1401,7 @@ ${_argParser.usage}'''; } } - for (final Adapter adapter in safeAdapters) { + for (final GeneratorAdapter adapter in safeGeneratorAdapters) { final IOSink? sink = adapter.shouldGenerate(options); if (sink != null) { final List adapterErrors = @@ -1443,7 +1443,7 @@ ${_argParser.usage}'''; CppOptions(header: path.basename(options.cppHeaderOut!))))); } - for (final Adapter adapter in safeAdapters) { + for (final GeneratorAdapter adapter in safeGeneratorAdapters) { final IOSink? sink = adapter.shouldGenerate(options); if (sink != null) { adapter.generate(sink, options, parseResults.root); diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 411643f679f..8d06f78cecc 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -9,8 +9,8 @@ import 'package:pigeon/ast.dart'; import 'package:pigeon/pigeon_lib.dart'; import 'package:test/test.dart'; -class _ValidatorAdapter implements Adapter { - _ValidatorAdapter(this.sink); +class _ValidatorGeneratorAdapter implements GeneratorAdapter { + _ValidatorGeneratorAdapter(this.sink); bool didCallValidate = false; final IOSink? sink; @@ -397,9 +397,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const DartAdapter dartAdapter = DartAdapter(); + const DartGeneratorAdapter dartGeneratorAdapter = DartGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - dartAdapter.generate(buffer, options, root); + dartGeneratorAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -407,9 +407,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( javaOut: 'Foo.java', copyrightHeader: './copyright_header.txt'); - const JavaAdapter javaAdapter = JavaAdapter(); + const JavaGeneratorAdapter javaGeneratorAdapter = JavaGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - javaAdapter.generate(buffer, options, root); + javaGeneratorAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -417,9 +417,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const ObjcHeaderAdapter objcHeaderAdapter = ObjcHeaderAdapter(); + const ObjcHeaderGeneratorAdapter objcHeaderGeneratorAdapter = + ObjcHeaderGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - objcHeaderAdapter.generate(buffer, options, root); + objcHeaderGeneratorAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -427,9 +428,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const ObjcSourceAdapter objcSourceAdapter = ObjcSourceAdapter(); + const ObjcSourceGeneratorAdapter objcSourceGeneratorAdapter = + ObjcSourceGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - objcSourceAdapter.generate(buffer, options, root); + objcSourceGeneratorAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -437,9 +439,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( swiftOut: 'Foo.swift', copyrightHeader: './copyright_header.txt'); - const SwiftAdapter swiftAdapter = SwiftAdapter(); + const SwiftGeneratorAdapter swiftGeneratorAdapter = SwiftGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - swiftAdapter.generate(buffer, options, root); + swiftGeneratorAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -447,9 +449,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( cppHeaderOut: 'Foo.h', copyrightHeader: './copyright_header.txt'); - const CppHeaderAdapter cppHeaderAdapter = CppHeaderAdapter(); + const CppHeaderGeneratorAdapter cppHeaderGeneratorAdapter = + CppHeaderGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - cppHeaderAdapter.generate(buffer, options, root); + cppHeaderGeneratorAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -457,9 +460,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const CppSourceAdapter cppSourceAdapter = CppSourceAdapter(); + const CppSourceGeneratorAdapter cppSourceGeneratorAdapter = + CppSourceGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - cppSourceAdapter.generate(buffer, options, root); + cppSourceGeneratorAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -929,9 +933,10 @@ abstract class Api { dartTestOut: 'stdout', dartOut: 'stdout', ); - const DartTestAdapter dartAdapter = DartTestAdapter(); + const DartTestGeneratorAdapter dartGeneratorAdapter = + DartTestGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - dartAdapter.generate(buffer, options, root); + dartGeneratorAdapter.generate(buffer, options, root); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -1187,9 +1192,10 @@ abstract class Api { test('generator validation', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorAdapter generator = _ValidatorAdapter(stdout); + final _ValidatorGeneratorAdapter generator = + _ValidatorGeneratorAdapter(stdout); final int result = await Pigeon.run(['--input', input.path], - adapters: [generator]); + adapters: [generator]); expect(generator.didCallValidate, isTrue); expect(result, isNot(0)); completer.complete(); @@ -1200,10 +1206,11 @@ abstract class Api { test('generator validation skipped', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorAdapter generator = _ValidatorAdapter(null); + final _ValidatorGeneratorAdapter generator = + _ValidatorGeneratorAdapter(null); final int result = await Pigeon.run( ['--input', input.path, '--dart_out', 'foo.dart'], - adapters: [generator]); + adapters: [generator]); expect(generator.didCallValidate, isFalse); expect(result, equals(0)); completer.complete(); @@ -1214,10 +1221,11 @@ abstract class Api { test('run with PigeonOptions', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorAdapter generator = _ValidatorAdapter(null); + final _ValidatorGeneratorAdapter generator = + _ValidatorGeneratorAdapter(null); final int result = await Pigeon.runWithOptions( PigeonOptions(input: input.path, dartOut: 'foo.dart'), - adapters: [generator]); + adapters: [generator]); expect(generator.didCallValidate, isFalse); expect(result, equals(0)); completer.complete(); From d08606caca00e0bc2b48f08a8d820493e6e8b2dc Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 09:17:15 -0800 Subject: [PATCH 24/45] Update version number for breaking changes --- packages/pigeon/CHANGELOG.md | 2 +- packages/pigeon/lib/generator_tools.dart | 2 +- packages/pigeon/pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 6e6688e0d85..30a5cbfe6df 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,4 +1,4 @@ -## 4.2.16 +## 5.0.0 * Creates new Generator classes for each language. diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index 65f9c4b7a42..89188846af9 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -9,7 +9,7 @@ import 'dart:mirrors'; import 'ast.dart'; /// The current version of pigeon. This must match the version in pubspec.yaml. -const String pigeonVersion = '4.2.16'; +const String pigeonVersion = '5.0.0'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 886f56a6ea0..e4ada89edd1 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%3Apigeon -version: 4.2.16 # This must match the version in lib/generator_tools.dart +version: 5.0.0 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.12.0 <3.0.0" From 90fcb67c67e15222e8fca60d8c7598674c04a6dd Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 09:24:36 -0800 Subject: [PATCH 25/45] nits --- packages/pigeon/lib/cpp_generator.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 5912f6e98ed..632de008f0e 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -45,10 +45,11 @@ class CppOptions { /// `x = CppOptions.fromMap(x.toMap())`. static CppOptions fromMap(Map map) { return CppOptions( - header: map['header'] as String?, - namespace: map['namespace'] as String?, - copyrightHeader: map['copyrightHeader'] as Iterable?, - cppHeaderOut: map['cppHeaderOut'] as String?); + header: map['header'] as String?, + namespace: map['namespace'] as String?, + copyrightHeader: map['copyrightHeader'] as Iterable?, + cppHeaderOut: map['cppHeaderOut'] as String?, + ); } /// Converts a [CppOptions] to a Map representation where: From ea0ec6c702e1b2b8b1685d4568bd47970dc68ddf Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 09:29:55 -0800 Subject: [PATCH 26/45] more personal nits --- packages/pigeon/lib/cpp_generator.dart | 2 +- packages/pigeon/lib/objc_generator.dart | 2 +- packages/pigeon/lib/pigeon_lib.dart | 27 +++++++++++++------------ 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 632de008f0e..4bf5f0c868b 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -72,7 +72,7 @@ class CppOptions { /// Class that manages all Cpp header code generation. class CppGenerator extends Generator { - /// Instantiates a Cpp Generator. + /// Instantiates a Cpp Generator for the specified file type. CppGenerator(this.fileType); /// Specifies which file type (header or source) will be generated. diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 2ef59abdf4a..48d512d65c1 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -66,7 +66,7 @@ class ObjcOptions { /// Class that manages all Objc header code generation. class ObjcGenerator extends Generator { - /// Instantiates a Objc Generator. + /// Instantiates a Objc Generator for the specified file type. ObjcGenerator(this.fileType); /// Specifies which file type (header or source) will be generated. diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 7ad64df5e0c..8871fe1f732 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -380,12 +380,13 @@ DartOptions _dartOptionsWithCopyrightHeader( ? _lineReader(copyrightHeader) : null; return DartOptions( - dartOutPath: dartOutPath, - testOutPath: testOutPath, - copyrightHeader: parsedCopyrightHeader); + dartOutPath: dartOutPath, + testOutPath: testOutPath, + copyrightHeader: parsedCopyrightHeader, + ); } -/// An [GeneratorAdapter] that generates the AST. +/// A [GeneratorAdapter] that generates the AST. class AstGeneratorAdapter implements GeneratorAdapter { /// Constructor for [AstGeneratorAdapter]. const AstGeneratorAdapter(); @@ -402,7 +403,7 @@ class AstGeneratorAdapter implements GeneratorAdapter { List validate(PigeonOptions options, Root root) => []; } -/// An [GeneratorAdapter] that generates Dart source code. +/// A [GeneratorAdapter] that generates Dart source code. class DartGeneratorAdapter implements GeneratorAdapter { /// Constructor for [DartGeneratorAdapter]. const DartGeneratorAdapter(); @@ -422,7 +423,7 @@ class DartGeneratorAdapter implements GeneratorAdapter { List validate(PigeonOptions options, Root root) => []; } -/// An [GeneratorAdapter] that generates Dart test source code. +/// A [GeneratorAdapter] that generates Dart test source code. class DartTestGeneratorAdapter implements GeneratorAdapter { /// Constructor for [DartTestGeneratorAdapter]. const DartTestGeneratorAdapter(); @@ -456,7 +457,7 @@ class DartTestGeneratorAdapter implements GeneratorAdapter { List validate(PigeonOptions options, Root root) => []; } -/// An [GeneratorAdapter] that generates Objective-C header code. +/// A [GeneratorAdapter] that generates Objective-C header code. class ObjcHeaderGeneratorAdapter implements GeneratorAdapter { /// Constructor for [ObjcHeaderGeneratorAdapter]. const ObjcHeaderGeneratorAdapter(); @@ -481,7 +482,7 @@ class ObjcHeaderGeneratorAdapter implements GeneratorAdapter { validateObjc(options.objcOptions!, root); } -/// An [GeneratorAdapter] that generates Objective-C source code. +/// A [GeneratorAdapter] that generates Objective-C source code. class ObjcSourceGeneratorAdapter implements GeneratorAdapter { /// Constructor for [ObjcSourceGeneratorAdapter]. const ObjcSourceGeneratorAdapter(); @@ -505,7 +506,7 @@ class ObjcSourceGeneratorAdapter implements GeneratorAdapter { List validate(PigeonOptions options, Root root) => []; } -/// An [GeneratorAdapter] that generates Java source code. +/// A [GeneratorAdapter] that generates Java source code. class JavaGeneratorAdapter implements GeneratorAdapter { /// Constructor for [JavaGeneratorAdapter]. const JavaGeneratorAdapter(); @@ -530,7 +531,7 @@ class JavaGeneratorAdapter implements GeneratorAdapter { List validate(PigeonOptions options, Root root) => []; } -/// An [GeneratorAdapter] that generates Swift source code. +/// A [GeneratorAdapter] that generates Swift source code. class SwiftGeneratorAdapter implements GeneratorAdapter { /// Constructor for [SwiftGeneratorAdapter]. const SwiftGeneratorAdapter(); @@ -553,7 +554,7 @@ class SwiftGeneratorAdapter implements GeneratorAdapter { List validate(PigeonOptions options, Root root) => []; } -/// An [GeneratorAdapter] that generates C++ header code. +/// A [GeneratorAdapter] that generates C++ header code. class CppHeaderGeneratorAdapter implements GeneratorAdapter { /// Constructor for [CppHeaderGeneratorAdapter]. const CppHeaderGeneratorAdapter(); @@ -579,7 +580,7 @@ class CppHeaderGeneratorAdapter implements GeneratorAdapter { validateCpp(options.cppOptions!, root); } -/// An [GeneratorAdapter] that generates C++ source code. +/// A [GeneratorAdapter] that generates C++ source code. class CppSourceGeneratorAdapter implements GeneratorAdapter { /// Constructor for [CppSourceGeneratorAdapter]. const CppSourceGeneratorAdapter(); @@ -603,7 +604,7 @@ class CppSourceGeneratorAdapter implements GeneratorAdapter { List validate(PigeonOptions options, Root root) => []; } -/// An [GeneratorAdapter] that generates Kotlin source code. +/// A [GeneratorAdapter] that generates Kotlin source code. class KotlinGeneratorAdapter implements GeneratorAdapter { /// Constructor for [KotlinGeneratorAdapter]. const KotlinGeneratorAdapter(); From d5c5f1fca7d22e806251877b1fd974c248352edc Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 09:48:50 -0800 Subject: [PATCH 27/45] update tests to match new merged generators --- packages/pigeon/test/cpp_generator_test.dart | 55 +++---- packages/pigeon/test/objc_generator_test.dart | 149 +++++++++--------- 2 files changed, 103 insertions(+), 101 deletions(-) diff --git a/packages/pigeon/test/cpp_generator_test.dart b/packages/pigeon/test/cpp_generator_test.dart index 4e4a3a1a354..ead8b73e202 100644 --- a/packages/pigeon/test/cpp_generator_test.dart +++ b/packages/pigeon/test/cpp_generator_test.dart @@ -4,6 +4,7 @@ import 'package:pigeon/ast.dart'; import 'package:pigeon/cpp_generator.dart'; +import 'package:pigeon/generator_tools.dart'; import 'package:pigeon/pigeon.dart' show Error; import 'package:test/test.dart'; @@ -45,7 +46,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Input')); @@ -54,7 +55,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Input::Input()')); @@ -103,7 +104,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Method name and argument names should be adjusted. @@ -119,7 +120,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('pointer_input_field')); @@ -148,7 +149,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); @@ -189,7 +190,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); @@ -244,7 +245,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('){'))); @@ -252,7 +253,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('){'))); @@ -279,7 +280,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains(''' @@ -295,7 +296,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(header: 'a_header.h'), root, sink); final String code = sink.toString(); expect(code, contains(''' @@ -332,7 +333,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(namespace: 'foo'), root, sink); final String code = sink.toString(); expect(code, contains('namespace foo {')); @@ -340,7 +341,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(namespace: 'foo'), root, sink); final String code = sink.toString(); expect(code, contains('namespace foo {')); @@ -402,7 +403,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Getters should return const pointers. @@ -435,7 +436,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Getters extract optionals. @@ -535,7 +536,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // POD getters should return copies references. @@ -561,7 +562,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Getters just return the value. @@ -660,7 +661,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect( @@ -766,7 +767,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('ErrorOr ReturnBool()')); @@ -843,7 +844,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect( @@ -857,7 +858,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Most types should just use get_if, since the parameter is a pointer, @@ -963,7 +964,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect( @@ -977,7 +978,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // Most types should extract references. Since the type is non-nullable, @@ -1032,7 +1033,7 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); // A bare 'auto' here would create a copy, not a reference, which is @@ -1145,7 +1146,7 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(cppHeaderOut: 'foo'), root, sink); final String code = sink.toString(); for (final String comment in comments) { @@ -1181,7 +1182,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : public flutter::StandardCodecSerializer'))); @@ -1224,7 +1225,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final CppHeaderGenerator generator = CppHeaderGenerator(); + final CppGenerator generator = CppGenerator(FileType.header); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains(' : public flutter::StandardCodecSerializer')); @@ -1294,7 +1295,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final CppSourceGenerator generator = CppSourceGenerator(); + final CppGenerator generator = CppGenerator(FileType.source); generator.generate(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('reply(wrap'))); diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index 981b5fb6c29..d978f477051 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:pigeon/ast.dart'; +import 'package:pigeon/generator_tools.dart'; import 'package:pigeon/objc_generator.dart'; import 'package:pigeon/pigeon_lib.dart'; import 'package:test/test.dart'; @@ -17,7 +18,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); @@ -33,7 +34,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); @@ -51,7 +52,7 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, Enum1) {')); @@ -70,7 +71,7 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(prefix: 'PREFIX'), root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, PREFIXEnum1) {')); @@ -107,7 +108,7 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); @@ -140,14 +141,14 @@ void main() { final StringBuffer sink = StringBuffer(); const ObjcOptions options = ObjcOptions(header: 'foo.h', prefix: 'AC'); { - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(options, root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, ACFoo)')); expect(code, contains(':(ACFoo)foo error:')); } { - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(options, root, sink); final String code = sink.toString(); expect( @@ -211,7 +212,7 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@property(nonatomic, assign) Enum1 enum1')); @@ -244,7 +245,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Input')); @@ -284,7 +285,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); @@ -332,7 +333,7 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); @@ -361,7 +362,7 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@implementation Foobar')); @@ -383,7 +384,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, @@ -404,7 +405,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect( @@ -424,7 +425,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('@interface ABCFoobar')); @@ -439,7 +440,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('@implementation ABCFoobar')); @@ -474,7 +475,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, matches('property.*ABCInput')); @@ -511,7 +512,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(prefix: 'ABC'), root, sink); final String code = sink.toString(); expect(code, contains('ABCInput fromList')); @@ -548,7 +549,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@interface Api : NSObject')); @@ -588,7 +589,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(header: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@implementation Api')); @@ -618,7 +619,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); @@ -649,7 +650,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -681,7 +682,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -711,7 +712,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -736,7 +737,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -760,7 +761,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -784,7 +785,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -811,7 +812,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -831,7 +832,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); @@ -847,7 +848,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); @@ -869,7 +870,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); @@ -899,7 +900,7 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('(NSDictionary *)foo')); @@ -934,7 +935,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -974,7 +975,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1002,7 +1003,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1023,7 +1024,7 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1063,7 +1064,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1102,7 +1103,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1123,7 +1124,7 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1151,7 +1152,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1168,7 +1169,7 @@ void main() { test('source copyright', () { final Root root = Root(apis: [], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( ObjcOptions( header: 'foo.h', @@ -1183,7 +1184,7 @@ void main() { test('header copyright', () { final Root root = Root(apis: [], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( ObjcOptions( header: 'foo.h', @@ -1215,7 +1216,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1246,7 +1247,7 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1254,7 +1255,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1289,7 +1290,7 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1297,7 +1298,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1335,7 +1336,7 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1363,7 +1364,7 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1372,7 +1373,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1400,7 +1401,7 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1409,7 +1410,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1439,7 +1440,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1450,7 +1451,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1486,7 +1487,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1497,7 +1498,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1531,7 +1532,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1542,7 +1543,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); final String code = sink.toString(); @@ -1587,7 +1588,7 @@ void main() { final Root divideRoot = getDivideRoot(ApiLocation.host); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); final String code = sink.toString(); @@ -1595,7 +1596,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); @@ -1608,7 +1609,7 @@ void main() { final Root divideRoot = getDivideRoot(ApiLocation.flutter); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); final String code = sink.toString(); @@ -1616,7 +1617,7 @@ void main() { } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate( const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); @@ -1634,7 +1635,7 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); @@ -1658,7 +1659,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect( @@ -1684,7 +1685,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, matches(r'doitWithCompletion.*NSNumber \*_Nullable')); @@ -1707,7 +1708,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, matches(r'nullable NSNumber.*doitWithError')); @@ -1735,14 +1736,14 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doitFoo:(nullable NSNumber *)foo')); } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, @@ -1772,14 +1773,14 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doitFoo:(nullable NSNumber *)foo')); } { final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains('- (void)doitFoo:(nullable NSNumber *)arg_foo')); @@ -1804,7 +1805,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect( @@ -1889,7 +1890,7 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - final ObjcHeaderGenerator generator = ObjcHeaderGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.header); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); for (final String comment in comments) { @@ -1925,7 +1926,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : FlutterStandardReader'))); @@ -1968,7 +1969,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - final ObjcSourceGenerator generator = ObjcSourceGenerator(); + final ObjcGenerator generator = ObjcGenerator(FileType.source); generator.generate(const ObjcOptions(), root, sink); final String code = sink.toString(); expect(code, contains(' : FlutterStandardReader')); From 6856812a09573e40884d27c72cb6abe1db9eca8d Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 14:29:27 -0800 Subject: [PATCH 28/45] cleaner header methods --- packages/pigeon/lib/cpp_generator.dart | 17 ++++++++--------- packages/pigeon/lib/dart_generator.dart | 1 + packages/pigeon/lib/java_generator.dart | 2 +- packages/pigeon/lib/kotlin_generator.dart | 2 +- packages/pigeon/lib/objc_generator.dart | 2 ++ packages/pigeon/lib/swift_generator.dart | 2 +- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 1c339726915..df0a188e573 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -1054,15 +1054,15 @@ void writeCppHeaderHeader( if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); } + indent.writeln('$_commentPrefix $generatedCodeWarning'); + indent.writeln('$_commentPrefix $seeAlsoWarning'); + indent.addln(''); } /// Generates the ".h" file for the AST represented by [root] to [sink] with the /// provided [options] and [headerFileName]. void generateCppHeader(String? headerFileName, CppOptions options, Root root, StringSink sink, Indent indent) { - indent.writeln('$_commentPrefix $generatedCodeWarning'); - indent.writeln('$_commentPrefix $seeAlsoWarning'); - indent.addln(''); final String guardName = _getGuardName(headerFileName, options.namespace); indent.writeln('#ifndef $guardName'); indent.writeln('#define $guardName'); @@ -1149,18 +1149,17 @@ void writeCppSourceHeader( if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); } -} - -/// Generates the ".cpp" file for the AST represented by [root] to [sink] with the -/// provided [options]. -void generateCppSource( - CppOptions options, Root root, StringSink sink, Indent indent) { indent.writeln('$_commentPrefix $generatedCodeWarning'); indent.writeln('$_commentPrefix $seeAlsoWarning'); indent.addln(''); indent.addln('#undef _HAS_EXCEPTIONS'); indent.addln(''); +} +/// Generates the ".cpp" file for the AST represented by [root] to [sink] with the +/// provided [options]. +void generateCppSource( + CppOptions options, Root root, StringSink sink, Indent indent) { indent.writeln('#include "${options.header}"'); indent.addln(''); _writeSystemHeaderIncludeBlock(indent, [ diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 76092aa759d..e0ce71c3830 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -532,6 +532,7 @@ void writeHeader(DartOptions opt, Root root, StringSink sink, Indent indent) { indent.writeln( '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import', ); + indent.addln(''); } /// Generates Dart source code for the given AST represented by [root], diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index 310125937da..2feb511a846 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -551,6 +551,7 @@ void writeHeader( } indent.writeln('// $generatedCodeWarning'); indent.writeln('// $seeAlsoWarning'); + indent.addln(''); } /// Generates the ".java" file for the AST represented by [root] to [sink] with the @@ -775,7 +776,6 @@ void generateJava( }'''); } - indent.addln(''); if (options.package != null) { indent.writeln('package ${options.package};'); } diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index abdf83aa74f..9cb43bc295f 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -464,6 +464,7 @@ void writeHeader( } indent.writeln('// $generatedCodeWarning'); indent.writeln('// $seeAlsoWarning'); + indent.addln(''); } /// Generates the ".kotlin" file for the AST represented by [root] to [sink] with the @@ -674,7 +675,6 @@ void generateKotlin( }); } - indent.addln(''); if (options.package != null) { indent.writeln('package ${options.package}'); } diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 56a19a52cdf..9866b4ce910 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -572,6 +572,7 @@ void writeObjcHeaderHeader( } indent.writeln('// $generatedCodeWarning'); indent.writeln('// $seeAlsoWarning'); + indent.addln(''); } /// Generates the ".h" file for the AST represented by [root] to [sink] with the @@ -915,6 +916,7 @@ void writeObjcSourceHeader( } indent.writeln('// $generatedCodeWarning'); indent.writeln('// $seeAlsoWarning'); + indent.addln(''); } /// Generates the ".m" file for the AST represented by [root] to [sink] with the diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 8ea5ed88065..489f44b660f 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -458,6 +458,7 @@ void writeHeader( } indent.writeln('// $generatedCodeWarning'); indent.writeln('// $seeAlsoWarning'); + indent.addln(''); } /// Generates the ".swift" file for the AST represented by [root] to [sink] with the @@ -642,7 +643,6 @@ import FlutterMacOS }); } - indent.addln(''); writeImports(); indent.addln(''); indent.writeln('$_docCommentPrefix Generated class from Pigeon.'); From 6206bad51e327c8fde4354d97a3bdb36127cf935 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 14:41:13 -0800 Subject: [PATCH 29/45] Fixes dart header bug --- packages/pigeon/lib/pigeon_lib.dart | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 8871fe1f732..467ade2bd0c 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -374,16 +374,12 @@ abstract class GeneratorAdapter { DartOptions _dartOptionsWithCopyrightHeader( DartOptions? dartOptions, String? copyrightHeader, [String? dartOutPath, String? testOutPath]) { - final Iterable? parsedCopyrightHeader = dartOptions != null - ? dartOptions.copyrightHeader - : copyrightHeader != null - ? _lineReader(copyrightHeader) - : null; - return DartOptions( - dartOutPath: dartOutPath, - testOutPath: testOutPath, - copyrightHeader: parsedCopyrightHeader, - ); + dartOptions = dartOptions ?? DartOptions(); + return dartOptions.merge(DartOptions( + dartOutPath: dartOutPath, + testOutPath: testOutPath, + copyrightHeader: + copyrightHeader != null ? _lineReader(copyrightHeader) : null)); } /// A [GeneratorAdapter] that generates the AST. From 7c3d35cf1f974ab2c815492cb505f1de79d37a60 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 14:49:05 -0800 Subject: [PATCH 30/45] add gen files for clarity --- .../mock_handler_tester/test/message.dart | 2 +- .../pigeon/mock_handler_tester/test/test.dart | 2 +- .../CoreTests.java | 2 +- .../ios/Classes/CoreTests.gen.h | 2 +- .../ios/Classes/CoreTests.gen.m | 2 +- .../lib/core_tests.gen.dart | 2 +- .../lib/multiple_arity.gen.dart | 2 +- .../lib/non_null_fields.gen.dart | 2 +- .../lib/null_fields.gen.dart | 2 +- .../lib/null_safe_pigeon.dart | 2 +- .../lib/nullable_returns.gen.dart | 2 +- .../lib/primitive.dart | 2 +- .../lib/src/generated/core_tests.gen.dart | 2 +- .../com/example/test_plugin/CoreTests.gen.kt | 2 +- .../ios/Classes/CoreTests.gen.swift | 2 +- .../macos/Classes/CoreTests.gen.swift | 2 +- .../windows/pigeon/core_tests.gen.cpp | 81 ++++++++++--------- .../windows/pigeon/core_tests.gen.h | 8 +- 18 files changed, 65 insertions(+), 56 deletions(-) diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart index f64aa5dc142..4f6c9d14457 100644 --- a/packages/pigeon/mock_handler_tester/test/message.dart +++ b/packages/pigeon/mock_handler_tester/test/message.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.11), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/mock_handler_tester/test/test.dart b/packages/pigeon/mock_handler_tester/test/test.dart index d0ecdc5d205..9b97826b605 100644 --- a/packages/pigeon/mock_handler_tester/test/test.dart +++ b/packages/pigeon/mock_handler_tester/test/test.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.11), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java index 9c0256252ea..2d81d4b59f1 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon package com.example.alternate_language_test_plugin; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h index 80a40d52c85..dcdee87c5d9 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon #import @protocol FlutterBinaryMessenger; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m index adb33d0bdf9..bcdd86394a6 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon #import "CoreTests.gen.h" #import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart index 4ff2bc07562..ee79a4b1a27 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart index a3145679319..e92ab29cebd 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.11), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart index 0dafa689085..1ff71bfa346 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.11), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart index 94c9b86a8a5..88f4611e746 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.11), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart index f376a13a932..13fe926bcf1 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.11), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart index e88028363d8..be1979c8adf 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.11), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart index 178e3154578..36a569e4f46 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.11), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart index 4ff2bc07562..ee79a4b1a27 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import import 'dart:async'; diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt index bcd41b05492..c1add054eaf 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon package com.example.test_plugin diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift index 385b507191a..c9850b70d36 100644 --- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift index 385b507191a..c9850b70d36 100644 --- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp index 990732ca635..f0d5929ce4a 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon #undef _HAS_EXCEPTIONS @@ -576,7 +576,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -597,7 +597,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); if (encodable_everything_arg.IsNull()) { - reply(WrapError("everything_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("everything_arg unexpectedly null."))); return; } const auto& everything_arg = std::any_cast( @@ -613,7 +614,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -653,7 +654,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -680,7 +681,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -700,7 +701,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_an_int_arg = args.at(0); if (encodable_an_int_arg.IsNull()) { - reply(WrapError("an_int_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("an_int_arg unexpectedly null."))); return; } const int64_t an_int_arg = encodable_an_int_arg.LongValue(); @@ -714,7 +716,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -735,7 +737,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_a_double_arg = args.at(0); if (encodable_a_double_arg.IsNull()) { - reply(WrapError("a_double_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("a_double_arg unexpectedly null."))); return; } const auto& a_double_arg = @@ -750,7 +753,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -770,7 +773,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_a_bool_arg = args.at(0); if (encodable_a_bool_arg.IsNull()) { - reply(WrapError("a_bool_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("a_bool_arg unexpectedly null."))); return; } const auto& a_bool_arg = std::get(encodable_a_bool_arg); @@ -784,7 +788,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -805,7 +809,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); if (encodable_a_string_arg.IsNull()) { - reply(WrapError("a_string_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("a_string_arg unexpectedly null."))); return; } const auto& a_string_arg = @@ -820,7 +825,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -841,7 +846,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_a_uint8_list_arg = args.at(0); if (encodable_a_uint8_list_arg.IsNull()) { - reply(WrapError("a_uint8_list_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("a_uint8_list_arg unexpectedly null."))); return; } const auto& a_uint8_list_arg = @@ -857,7 +863,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -878,7 +884,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_wrapper_arg = args.at(0); if (encodable_wrapper_arg.IsNull()) { - reply(WrapError("wrapper_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("wrapper_arg unexpectedly null."))); return; } const auto& wrapper_arg = @@ -901,7 +908,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -934,7 +941,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -980,7 +987,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -1024,7 +1031,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -1062,7 +1069,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -1100,7 +1107,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -1138,7 +1145,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -1177,7 +1184,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); @@ -1201,11 +1208,11 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } else { wrapped.push_back(flutter::EncodableValue()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); } }); } else { @@ -1227,7 +1234,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); if (encodable_a_string_arg.IsNull()) { - reply(WrapError("a_string_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("a_string_arg unexpectedly null."))); return; } const auto& a_string_arg = @@ -1241,11 +1249,11 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, wrapped.push_back(flutter::EncodableValue( std::move(output).TakeValue())); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); } }); } else { @@ -1271,11 +1279,11 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, } else { wrapped.push_back(flutter::EncodableValue()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); } }); } else { @@ -1297,7 +1305,8 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); if (encodable_a_string_arg.IsNull()) { - reply(WrapError("a_string_arg unexpectedly null.")); + reply(flutter::EncodableValue( + WrapError("a_string_arg unexpectedly null."))); return; } const auto& a_string_arg = @@ -1311,11 +1320,11 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, wrapped.push_back(flutter::EncodableValue( std::move(output).TakeValue())); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); } }); } else { @@ -1500,7 +1509,7 @@ void HostTrivialApi::SetUp(flutter::BinaryMessenger* binary_messenger, } catch (const std::exception& exception) { wrapped = WrapError(exception.what()); } - reply(wrapped); + reply(flutter::EncodableValue(std::move(wrapped))); }); } else { channel->SetMessageHandler(nullptr); diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h index 5100fdb753d..a2ea204b578 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v4.2.12), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon -#ifndef PIGEON_CORE_TESTS_GEN_CORE_TESTS_PIGEONTEST_H_ -#define PIGEON_CORE_TESTS_GEN_CORE_TESTS_PIGEONTEST_H_ +#ifndef PIGEON_CORE_TESTS_PIGEONTEST_H_ +#define PIGEON_CORE_TESTS_PIGEONTEST_H_ #include #include #include @@ -406,4 +406,4 @@ class HostTrivialApi { HostTrivialApi() = default; }; } // namespace core_tests_pigeontest -#endif // PIGEON_CORE_TESTS_GEN_CORE_TESTS_PIGEONTEST_H_ +#endif // PIGEON_CORE_TESTS_PIGEONTEST_H_ From 8bf2dfbd484af7718d7d0621da2995ecc5cc9ece Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 16:09:57 -0800 Subject: [PATCH 31/45] better field naming --- packages/pigeon/lib/cpp_generator.dart | 23 ++++++------ packages/pigeon/lib/dart_generator.dart | 20 +++++------ packages/pigeon/lib/pigeon_lib.dart | 8 ++--- packages/pigeon/test/cpp_generator_test.dart | 35 ++++++++++--------- packages/pigeon/test/dart_generator_test.dart | 6 ++-- 5 files changed, 46 insertions(+), 46 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 4bf5f0c868b..225b8e9ca7b 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -22,15 +22,15 @@ const String _defaultCodecSerializer = 'flutter::StandardCodecSerializer'; class CppOptions { /// Creates a [CppOptions] object const CppOptions({ - this.header, + this.headerIncludePath, this.namespace, this.copyrightHeader, - this.cppHeaderOut, + this.headerOutPath, }); /// The path to the header that will get placed in the source filed (example: /// "foo.h"). - final String? header; + final String? headerIncludePath; /// The namespace where the generated class will live. final String? namespace; @@ -39,16 +39,16 @@ class CppOptions { final Iterable? copyrightHeader; /// The path to the output header file location. - final String? cppHeaderOut; + final String? headerOutPath; /// Creates a [CppOptions] from a Map representation where: /// `x = CppOptions.fromMap(x.toMap())`. static CppOptions fromMap(Map map) { return CppOptions( - header: map['header'] as String?, + headerIncludePath: map['header'] as String?, namespace: map['namespace'] as String?, copyrightHeader: map['copyrightHeader'] as Iterable?, - cppHeaderOut: map['cppHeaderOut'] as String?, + headerOutPath: map['cppHeaderOut'] as String?, ); } @@ -56,7 +56,7 @@ class CppOptions { /// `x = CppOptions.fromMap(x.toMap())`. Map toMap() { final Map result = { - if (header != null) 'header': header!, + if (headerIncludePath != null) 'header': headerIncludePath!, if (namespace != null) 'namespace': namespace!, if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!, }; @@ -82,8 +82,7 @@ class CppGenerator extends Generator { @override void generate(CppOptions languageOptions, Root root, StringSink sink) { if (fileType == FileType.header) { - generateCppHeader( - languageOptions.cppHeaderOut, languageOptions, root, sink); + generateCppHeader(languageOptions, root, sink); } else { generateCppSource(languageOptions, root, sink); } @@ -1037,8 +1036,8 @@ void _writeSystemHeaderIncludeBlock(Indent indent, List headers) { /// Generates the ".h" file for the AST represented by [root] to [sink] with the /// provided [options] and [headerFileName]. -void generateCppHeader( - String? headerFileName, CppOptions options, Root root, StringSink sink) { +void generateCppHeader(CppOptions options, Root root, StringSink sink) { + final String? headerFileName = options.headerOutPath; final Indent indent = Indent(sink); if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); @@ -1139,7 +1138,7 @@ void generateCppSource(CppOptions options, Root root, StringSink sink) { indent.addln('#undef _HAS_EXCEPTIONS'); indent.addln(''); - indent.writeln('#include "${options.header}"'); + indent.writeln('#include "${options.headerIncludePath}"'); indent.addln(''); _writeSystemHeaderIncludeBlock(indent, [ 'flutter/basic_message_channel.h', diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 604becc9c30..6d4b005d764 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -27,7 +27,7 @@ class DartOptions { /// Constructor for DartOptions. DartOptions({ this.copyrightHeader, - this.dartOutPath, + this.sourceOutPath, this.testOutPath, }); @@ -35,7 +35,7 @@ class DartOptions { final Iterable? copyrightHeader; /// Path to output generated Dart file for tests. - String? dartOutPath; + String? sourceOutPath; /// Path to output generated Test file for tests. String? testOutPath; @@ -47,7 +47,7 @@ class DartOptions { map['copyrightHeader'] as Iterable?; return DartOptions( copyrightHeader: copyrightHeader?.cast(), - dartOutPath: map['dartOutPath'] as String?, + sourceOutPath: map['sourceOutPath'] as String?, testOutPath: map['testOutPath'] as String?, ); } @@ -57,7 +57,7 @@ class DartOptions { Map toMap() { final Map result = { if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!, - if (dartOutPath != null) 'dartOutPath': dartOutPath!, + if (sourceOutPath != null) 'sourceOutPath': sourceOutPath!, if (testOutPath != null) 'testOutPath': testOutPath!, }; return result; @@ -90,13 +90,13 @@ class DartTestGenerator extends Generator { /// Generates Dart files with specified [DartOptions] @override void generate(DartOptions languageOptions, Root root, StringSink sink) { - final String dartOutPath = languageOptions.dartOutPath ?? ''; + final String sourceOutPath = languageOptions.sourceOutPath ?? ''; final String testOutPath = languageOptions.testOutPath ?? ''; generateTestDart( languageOptions, root, sink, - dartOutPath: dartOutPath, + sourceOutPath: sourceOutPath, testOutPath: testOutPath, ); } @@ -742,14 +742,14 @@ String _posixify(String inputPath) { } /// Generates Dart source code for test support libraries based on the given AST -/// represented by [root], outputting the code to [sink]. [dartOutPath] is the +/// represented by [root], outputting the code to [sink]. [sourceOutPath] is the /// path of the generated dart code to be tested. [testOutPath] is where the /// test code will be generated. void generateTestDart( DartOptions opt, Root root, StringSink sink, { - required String dartOutPath, + required String sourceOutPath, required String testOutPath, }) { final Indent indent = Indent(sink); @@ -773,10 +773,10 @@ void generateTestDart( indent.writeln(''); final String relativeDartPath = path.Context(style: path.Style.posix).relative( - _posixify(dartOutPath), + _posixify(sourceOutPath), from: _posixify(path.dirname(testOutPath)), ); - late final String? packageName = _deducePackageName(dartOutPath); + late final String? packageName = _deducePackageName(sourceOutPath); if (!relativeDartPath.contains('/lib/') || packageName == null) { // If we can't figure out the package name or the relative path doesn't // include a 'lib' directory, try relative path import which only works in diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 467ade2bd0c..327ce27c08b 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -376,7 +376,7 @@ DartOptions _dartOptionsWithCopyrightHeader( [String? dartOutPath, String? testOutPath]) { dartOptions = dartOptions ?? DartOptions(); return dartOptions.merge(DartOptions( - dartOutPath: dartOutPath, + sourceOutPath: dartOutPath, testOutPath: testOutPath, copyrightHeader: copyrightHeader != null ? _lineReader(copyrightHeader) : null)); @@ -559,7 +559,7 @@ class CppHeaderGeneratorAdapter implements GeneratorAdapter { void generate(StringSink sink, PigeonOptions options, Root root) { final CppOptions cppOptions = options.cppOptions ?? const CppOptions(); final CppOptions cppOptionsWithHeader = cppOptions.merge(CppOptions( - cppHeaderOut: path.basenameWithoutExtension(options.cppHeaderOut!), + headerOutPath: path.basenameWithoutExtension(options.cppHeaderOut!), copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); @@ -1436,8 +1436,8 @@ ${_argParser.usage}'''; if (options.cppHeaderOut != null) { options = options.merge(PigeonOptions( - cppOptions: options.cppOptions!.merge( - CppOptions(header: path.basename(options.cppHeaderOut!))))); + cppOptions: options.cppOptions!.merge(CppOptions( + headerIncludePath: path.basename(options.cppHeaderOut!))))); } for (final GeneratorAdapter adapter in safeGeneratorAdapters) { diff --git a/packages/pigeon/test/cpp_generator_test.dart b/packages/pigeon/test/cpp_generator_test.dart index d089b0a4480..39d6bedd8f5 100644 --- a/packages/pigeon/test/cpp_generator_test.dart +++ b/packages/pigeon/test/cpp_generator_test.dart @@ -45,7 +45,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Input')); expect(code, contains('class Output')); @@ -101,7 +101,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); // Method name and argument names should be adjusted. expect(code, contains(' DoSomething(const Input& some_input)')); @@ -144,7 +144,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect( @@ -184,7 +184,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect( @@ -238,7 +238,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('){'))); expect(code, isNot(contains('const{'))); @@ -271,7 +271,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains(''' #include @@ -286,7 +286,8 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(header: 'a_header.h'), root, sink); + generateCppSource( + const CppOptions(headerIncludePath: 'a_header.h'), root, sink); final String code = sink.toString(); expect(code, contains(''' #include "a_header.h" @@ -322,7 +323,7 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(namespace: 'foo'), root, sink); + generateCppHeader(const CppOptions(namespace: 'foo'), root, sink); final String code = sink.toString(); expect(code, contains('namespace foo {')); expect(code, contains('} // namespace foo')); @@ -390,7 +391,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); // Getters should return const pointers. expect(code, contains('const bool* nullable_bool()')); @@ -521,7 +522,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); // POD getters should return copies references. expect(code, contains('bool non_nullable_bool()')); @@ -644,7 +645,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect( code, contains('ErrorOr> ReturnNullableBool()')); @@ -749,7 +750,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains('ErrorOr ReturnBool()')); expect(code, contains('ErrorOr ReturnInt()')); @@ -825,7 +826,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -943,7 +944,7 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -1122,7 +1123,7 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateCppHeader('foo', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(headerIncludePath: 'foo'), root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('//$comment')); @@ -1157,7 +1158,7 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : public flutter::StandardCodecSerializer'))); }); @@ -1199,7 +1200,7 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateCppHeader('', const CppOptions(), root, sink); + generateCppHeader(const CppOptions(), root, sink); final String code = sink.toString(); expect(code, contains(' : public flutter::StandardCodecSerializer')); }); diff --git a/packages/pigeon/test/dart_generator_test.dart b/packages/pigeon/test/dart_generator_test.dart index 38442ccd358..c77e5d89e37 100644 --- a/packages/pigeon/test/dart_generator_test.dart +++ b/packages/pigeon/test/dart_generator_test.dart @@ -582,7 +582,7 @@ void main() { DartOptions(), root, testCodeSink, - dartOutPath: "fo'o.dart", + sourceOutPath: "fo'o.dart", testOutPath: 'test.dart', ); final String testCode = testCodeSink.toString(); @@ -1154,7 +1154,7 @@ name: foobar DartOptions(), root, sink, - dartOutPath: path.join(foo.path, 'bar.dart'), + sourceOutPath: path.join(foo.path, 'bar.dart'), testOutPath: path.join(tempDir.path, 'test', 'bar_test.dart'), ); final String code = sink.toString(); @@ -1358,7 +1358,7 @@ name: foobar DartOptions(), root, sink, - dartOutPath: 'code.dart', + sourceOutPath: 'code.dart', testOutPath: 'test.dart', ); final String testCode = sink.toString(); From 8c6abf2d240e184422a8864547934a06a90fb683 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 16:18:24 -0800 Subject: [PATCH 32/45] better field naming --- packages/pigeon/lib/objc_generator.dart | 10 +- packages/pigeon/lib/pigeon_lib.dart | 4 +- packages/pigeon/test/objc_generator_test.dart | 179 +++++++++++++----- 3 files changed, 136 insertions(+), 57 deletions(-) diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 48d512d65c1..a3cf3a7da2a 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -19,14 +19,14 @@ const DocumentCommentSpecification _docCommentSpec = class ObjcOptions { /// Parametric constructor for ObjcOptions. const ObjcOptions({ - this.header, + this.headerIncludePath, this.prefix, this.copyrightHeader, }); /// The path to the header that will get placed in the source filed (example: /// "foo.h"). - final String? header; + final String? headerIncludePath; /// Prefix that will be appended before all generated classes and protocols. final String? prefix; @@ -40,7 +40,7 @@ class ObjcOptions { final Iterable? copyrightHeader = map['copyrightHeader'] as Iterable?; return ObjcOptions( - header: map['header'] as String?, + headerIncludePath: map['header'] as String?, prefix: map['prefix'] as String?, copyrightHeader: copyrightHeader?.cast(), ); @@ -50,7 +50,7 @@ class ObjcOptions { /// `x = ObjcOptions.fromMap(x.toMap())`. Map toMap() { final Map result = { - if (header != null) 'header': header!, + if (headerIncludePath != null) 'header': headerIncludePath!, if (prefix != null) 'prefix': prefix!, if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!, }; @@ -910,7 +910,7 @@ void generateObjcSource(ObjcOptions options, Root root, StringSink sink) { } void writeImports() { - indent.writeln('#import "${options.header}"'); + indent.writeln('#import "${options.headerIncludePath}"'); indent.writeln('#import '); } diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 327ce27c08b..46ac932694a 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -1430,8 +1430,8 @@ ${_argParser.usage}'''; if (options.objcHeaderOut != null) { options = options.merge(PigeonOptions( - objcOptions: options.objcOptions!.merge( - ObjcOptions(header: path.basename(options.objcHeaderOut!))))); + objcOptions: options.objcOptions!.merge(ObjcOptions( + headerIncludePath: path.basename(options.objcHeaderOut!))))); } if (options.cppHeaderOut != null) { diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index cf83029338e..aeb2db68e26 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -32,7 +32,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcSource( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Foobar')); @@ -103,7 +104,8 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcSource( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Foobar')); @@ -133,7 +135,8 @@ void main() { ]) ]); final StringBuffer sink = StringBuffer(); - const ObjcOptions options = ObjcOptions(header: 'foo.h', prefix: 'AC'); + const ObjcOptions options = + ObjcOptions(headerIncludePath: 'foo.h', prefix: 'AC'); { generateObjcHeader(options, root, sink); final String code = sink.toString(); @@ -169,7 +172,7 @@ void main() { EnumMember(name: 'two'), ]) ]); - const ObjcOptions options = ObjcOptions(header: 'foo.h'); + const ObjcOptions options = ObjcOptions(headerIncludePath: 'foo.h'); final List errors = validateObjc(options, root); expect(errors.length, 1); expect(errors[0].message, contains('Nullable enum')); @@ -204,7 +207,8 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcHeader( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@property(nonatomic, assign) Enum1 enum1')); }); @@ -275,7 +279,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcSource( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Input')); @@ -322,7 +327,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcHeader( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, contains('@class FlutterStandardTypedData;')); @@ -350,7 +356,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcSource( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@implementation Foobar')); expect(code, @@ -371,7 +378,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcHeader( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@property(nonatomic, strong, nullable) Input * nested;')); @@ -391,7 +399,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcSource( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect( code, @@ -530,7 +539,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcHeader( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@interface Api : NSObject')); expect( @@ -569,7 +579,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(header: 'foo.h'), root, sink); + generateObjcSource( + const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); final String code = sink.toString(); expect(code, contains('@implementation Api')); expect(code, matches('void.*doSomething.*Input.*Output.*{')); @@ -599,7 +610,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('(void)doSomething:')); }); @@ -628,7 +641,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, isNot(matches('=.*doSomething'))); expect(code, matches('[.*doSomething:.*]')); @@ -659,7 +674,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('completion:(void(^)(NSError *_Nullable))')); }); @@ -688,7 +705,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('completion:(void(^)(NSError *_Nullable))')); expect(code, contains('completion(nil)')); @@ -712,7 +731,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, matches('ABCOutput.*doSomethingWithError:[(]FlutterError')); }); @@ -735,7 +756,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, matches('output.*=.*api doSomethingWithError:&error')); }); @@ -758,7 +781,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -784,7 +809,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -902,7 +929,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -941,7 +970,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -968,7 +999,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -988,7 +1021,9 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1027,7 +1062,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1065,7 +1102,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1085,7 +1124,9 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1112,7 +1153,9 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1129,7 +1172,7 @@ void main() { final StringBuffer sink = StringBuffer(); generateObjcSource( ObjcOptions( - header: 'foo.h', + headerIncludePath: 'foo.h', prefix: 'ABC', copyrightHeader: makeIterable('hello world')), root, @@ -1144,7 +1187,7 @@ void main() { final StringBuffer sink = StringBuffer(); generateObjcHeader( ObjcOptions( - header: 'foo.h', + headerIncludePath: 'foo.h', prefix: 'ABC', copyrightHeader: makeIterable('hello world')), root, @@ -1175,7 +1218,9 @@ void main() { ); final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('NSArray * field1')); }); @@ -1205,14 +1250,18 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); } { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1246,14 +1295,18 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); } { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); } @@ -1290,7 +1343,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *> *)arg')); } @@ -1317,7 +1372,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, contains('- (nullable NSArray *)doitWithError:')); @@ -1325,7 +1382,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('NSArray *output =')); } @@ -1352,7 +1411,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, contains('doitWithCompletion:(void(^)(NSArray *')); @@ -1360,7 +1421,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, contains('doitWithCompletion:(void(^)(NSArray *')); @@ -1389,7 +1452,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1399,7 +1464,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('NSArray *args = message;')); expect(code, @@ -1434,7 +1501,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1444,7 +1513,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect(code, contains('NSArray *args = message;')); expect(code, @@ -1477,7 +1548,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1487,7 +1560,9 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), root, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + root, + sink); final String code = sink.toString(); expect( code, @@ -1531,14 +1606,18 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + divideRoot, + sink); final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*error.*;')); } { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), divideRoot, sink); + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + divideRoot, + sink); final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*error.*;')); } @@ -1549,7 +1628,7 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcHeader( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), divideRoot, sink, ); @@ -1559,7 +1638,7 @@ void main() { { final StringBuffer sink = StringBuffer(); generateObjcSource( - const ObjcOptions(header: 'foo.h', prefix: 'ABC'), + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), divideRoot, sink, ); From 93a5d1bf619e53f558c1444995a83db867098f23 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 16:23:53 -0800 Subject: [PATCH 33/45] removed unneeded dart test generator --- packages/pigeon/lib/dart_generator.dart | 11 ++--------- packages/pigeon/lib/pigeon_lib.dart | 4 ++-- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 6d4b005d764..dca3c0fcd57 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -80,16 +80,9 @@ class DartGenerator extends Generator { void generate(DartOptions languageOptions, Root root, StringSink sink) { generateDart(languageOptions, root, sink); } -} - -/// Class that manages all Dart code generation. -class DartTestGenerator extends Generator { - /// Instantiates a Dart Generator. - DartTestGenerator(); - /// Generates Dart files with specified [DartOptions] - @override - void generate(DartOptions languageOptions, Root root, StringSink sink) { + /// Generates Dart files for testing with specified [DartOptions] + void generateTest(DartOptions languageOptions, Root root, StringSink sink) { final String sourceOutPath = languageOptions.sourceOutPath ?? ''; final String testOutPath = languageOptions.testOutPath ?? ''; generateTestDart( diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 46ac932694a..bfde7735b43 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -432,8 +432,8 @@ class DartTestGeneratorAdapter implements GeneratorAdapter { options.dartOut, options.dartTestOut, ); - final DartTestGenerator testGenerator = DartTestGenerator(); - testGenerator.generate( + final DartGenerator testGenerator = DartGenerator(); + testGenerator.generateTest( dartOptionsWithHeader, root, sink, From 710d1a1f2bc05a00da447684f0cd13921353d3f6 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 27 Dec 2022 16:29:24 -0800 Subject: [PATCH 34/45] Add filetype to generator --- packages/pigeon/lib/cpp_generator.dart | 8 +++----- packages/pigeon/lib/dart_generator.dart | 3 ++- packages/pigeon/lib/generator.dart | 4 +++- packages/pigeon/lib/java_generator.dart | 3 ++- packages/pigeon/lib/kotlin_generator.dart | 3 ++- packages/pigeon/lib/objc_generator.dart | 8 +++----- packages/pigeon/lib/pigeon_lib.dart | 24 +++++++++++------------ packages/pigeon/lib/swift_generator.dart | 3 ++- 8 files changed, 29 insertions(+), 27 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 225b8e9ca7b..ff7239efd2d 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -73,14 +73,12 @@ class CppOptions { /// Class that manages all Cpp header code generation. class CppGenerator extends Generator { /// Instantiates a Cpp Generator for the specified file type. - CppGenerator(this.fileType); - - /// Specifies which file type (header or source) will be generated. - FileType fileType; + CppGenerator(); /// Generates Cpp files with specified [CppOptions] @override - void generate(CppOptions languageOptions, Root root, StringSink sink) { + void generate(CppOptions languageOptions, Root root, StringSink sink, + FileType fileType) { if (fileType == FileType.header) { generateCppHeader(languageOptions, root, sink); } else { diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index dca3c0fcd57..f450d2ddeaa 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -77,7 +77,8 @@ class DartGenerator extends Generator { /// Generates Dart files with specified [DartOptions] @override - void generate(DartOptions languageOptions, Root root, StringSink sink) { + void generate( + DartOptions languageOptions, Root root, StringSink sink, FileType _) { generateDart(languageOptions, root, sink); } diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index 02667e4a5c9..6cf63113a1f 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -3,11 +3,13 @@ // found in the LICENSE file. import 'ast.dart'; +import 'generator_tools.dart'; /// A superclass of generator classes. /// /// This provides the structure that is common across generators for different languages. abstract class Generator { /// Generates files for specified language with specified [languageOptions] - void generate(T languageOptions, Root root, StringSink sink); + void generate( + T languageOptions, Root root, StringSink sink, FileType fileType); } diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index 00293bfc0e8..e7b2ebcaf18 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -92,7 +92,8 @@ class JavaGenerator extends Generator { /// Generates Java files with specified [JavaOptions] @override - void generate(JavaOptions languageOptions, Root root, StringSink sink) { + void generate( + JavaOptions languageOptions, Root root, StringSink sink, FileType _) { generateJava(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index 99690a4ac92..a570da4674b 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -72,7 +72,8 @@ class KotlinGenerator extends Generator { /// Generates Kotlin files with specified [KotlinOptions] @override - void generate(KotlinOptions languageOptions, Root root, StringSink sink) { + void generate( + KotlinOptions languageOptions, Root root, StringSink sink, FileType _) { generateKotlin(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index a3cf3a7da2a..4576ed6a66c 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -67,14 +67,12 @@ class ObjcOptions { /// Class that manages all Objc header code generation. class ObjcGenerator extends Generator { /// Instantiates a Objc Generator for the specified file type. - ObjcGenerator(this.fileType); - - /// Specifies which file type (header or source) will be generated. - FileType fileType; + ObjcGenerator(); /// Generates Objc files with specified [ObjcOptions] @override - void generate(ObjcOptions languageOptions, Root root, StringSink sink) { + void generate(ObjcOptions languageOptions, Root root, StringSink sink, + FileType fileType) { if (fileType == FileType.header) { generateObjcHeader(languageOptions, root, sink); } else { diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index bfde7735b43..0311d31e714 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -409,7 +409,7 @@ class DartGeneratorAdapter implements GeneratorAdapter { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader); final DartGenerator generator = DartGenerator(); - generator.generate(dartOptionsWithHeader, root, sink); + generator.generate(dartOptionsWithHeader, root, sink, FileType.source); } @override @@ -465,8 +465,8 @@ class ObjcHeaderGeneratorAdapter implements GeneratorAdapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final ObjcGenerator generator = ObjcGenerator(FileType.header); - generator.generate(objcOptionsWithHeader, root, sink); + final ObjcGenerator generator = ObjcGenerator(); + generator.generate(objcOptionsWithHeader, root, sink, FileType.header); } @override @@ -490,8 +490,8 @@ class ObjcSourceGeneratorAdapter implements GeneratorAdapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final ObjcGenerator generator = ObjcGenerator(FileType.source); - generator.generate(objcOptionsWithHeader, root, sink); + final ObjcGenerator generator = ObjcGenerator(); + generator.generate(objcOptionsWithHeader, root, sink, FileType.source); } @override @@ -517,7 +517,7 @@ class JavaGeneratorAdapter implements GeneratorAdapter { ? _lineReader(options.copyrightHeader!) : null)); final JavaGenerator generator = JavaGenerator(); - generator.generate(javaOptions, root, sink); + generator.generate(javaOptions, root, sink, FileType.source); } @override @@ -540,7 +540,7 @@ class SwiftGeneratorAdapter implements GeneratorAdapter { ? _lineReader(options.copyrightHeader!) : null)); final SwiftGenerator generator = SwiftGenerator(); - generator.generate(swiftOptions, root, sink); + generator.generate(swiftOptions, root, sink, FileType.source); } @override @@ -563,8 +563,8 @@ class CppHeaderGeneratorAdapter implements GeneratorAdapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final CppGenerator generator = CppGenerator(FileType.header); - generator.generate(cppOptionsWithHeader, root, sink); + final CppGenerator generator = CppGenerator(); + generator.generate(cppOptionsWithHeader, root, sink, FileType.header); } @override @@ -588,8 +588,8 @@ class CppSourceGeneratorAdapter implements GeneratorAdapter { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - final CppGenerator generator = CppGenerator(FileType.source); - generator.generate(cppOptionsWithHeader, root, sink); + final CppGenerator generator = CppGenerator(); + generator.generate(cppOptionsWithHeader, root, sink, FileType.source); } @override @@ -614,7 +614,7 @@ class KotlinGeneratorAdapter implements GeneratorAdapter { ? _lineReader(options.copyrightHeader!) : null)); final KotlinGenerator generator = KotlinGenerator(); - generator.generate(kotlinOptions, root, sink); + generator.generate(kotlinOptions, root, sink, FileType.source); } @override diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index b25931c03e3..45c15341116 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -55,7 +55,8 @@ class SwiftGenerator extends Generator { /// Generates Swift files with specified [SwiftOptions] @override - void generate(SwiftOptions languageOptions, Root root, StringSink sink) { + void generate( + SwiftOptions languageOptions, Root root, StringSink sink, FileType _) { generateSwift(languageOptions, root, sink); } } From d189d11ad0dfd028252607a3d8399d9cd51d5d53 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 28 Dec 2022 23:04:36 -0800 Subject: [PATCH 35/45] Adds filetype as field to generatorAdapters --- packages/pigeon/lib/cpp_generator.dart | 2 +- packages/pigeon/lib/objc_generator.dart | 2 +- packages/pigeon/lib/pigeon_lib.dart | 213 +++++++++++----------- packages/pigeon/test/pigeon_lib_test.dart | 49 ++--- 4 files changed, 139 insertions(+), 127 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index ff7239efd2d..fbb90b39483 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -72,7 +72,7 @@ class CppOptions { /// Class that manages all Cpp header code generation. class CppGenerator extends Generator { - /// Instantiates a Cpp Generator for the specified file type. + /// Instantiates a Cpp Generator. CppGenerator(); /// Generates Cpp files with specified [CppOptions] diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 4576ed6a66c..110625414a2 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -66,7 +66,7 @@ class ObjcOptions { /// Class that manages all Objc header code generation. class ObjcGenerator extends Generator { - /// Instantiates a Objc Generator for the specified file type. + /// Instantiates a Objc Generator. ObjcGenerator(); /// Generates Objc files with specified [ObjcOptions] diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 0311d31e714..4e949ec3dd3 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -358,13 +358,21 @@ IOSink? _openSink(String? output) { /// An adapter that will call a generator to write code to a sink /// based on the contents of [PigeonOptions]. abstract class GeneratorAdapter { + /// Constructor for [GeneratorAdapter] + GeneratorAdapter(this.fileTypeList); + + /// A list of [FileType] + /// Used to tell the generator method which type of file to create. + List fileTypeList; + /// Returns an [IOSink] instance to be written to if the [GeneratorAdapter] should /// generate. If it returns `null`, the [GeneratorAdapter] will be skipped. - IOSink? shouldGenerate(PigeonOptions options); + IOSink? shouldGenerate(PigeonOptions options, FileType fileType); /// Write the generated code described in [root] to [sink] using the /// [options]. - void generate(StringSink sink, PigeonOptions options, Root root); + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType); /// Generates errors that would only be appropriate for this [GeneratorAdapter]. For /// example, maybe a certain feature isn't implemented in a [GeneratorAdapter] yet. @@ -385,15 +393,20 @@ DartOptions _dartOptionsWithCopyrightHeader( /// A [GeneratorAdapter] that generates the AST. class AstGeneratorAdapter implements GeneratorAdapter { /// Constructor for [AstGeneratorAdapter]. - const AstGeneratorAdapter(); + AstGeneratorAdapter(); + + @override + List fileTypeList = const [FileType.source]; @override - void generate(StringSink sink, PigeonOptions options, Root root) { + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { generateAst(root, sink); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.astOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.astOut); @override List validate(PigeonOptions options, Root root) => []; @@ -402,18 +415,23 @@ class AstGeneratorAdapter implements GeneratorAdapter { /// A [GeneratorAdapter] that generates Dart source code. class DartGeneratorAdapter implements GeneratorAdapter { /// Constructor for [DartGeneratorAdapter]. - const DartGeneratorAdapter(); + DartGeneratorAdapter(); @override - void generate(StringSink sink, PigeonOptions options, Root root) { + List fileTypeList = const [FileType.source]; + + @override + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader); final DartGenerator generator = DartGenerator(); - generator.generate(dartOptionsWithHeader, root, sink, FileType.source); + generator.generate(dartOptionsWithHeader, root, sink, fileType); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.dartOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.dartOut); @override List validate(PigeonOptions options, Root root) => []; @@ -422,10 +440,14 @@ class DartGeneratorAdapter implements GeneratorAdapter { /// A [GeneratorAdapter] that generates Dart test source code. class DartTestGeneratorAdapter implements GeneratorAdapter { /// Constructor for [DartTestGeneratorAdapter]. - const DartTestGeneratorAdapter(); + DartTestGeneratorAdapter(); @override - void generate(StringSink sink, PigeonOptions options, Root root) { + List fileTypeList = const [FileType.source]; + + @override + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader, @@ -441,7 +463,7 @@ class DartTestGeneratorAdapter implements GeneratorAdapter { } @override - IOSink? shouldGenerate(PigeonOptions options) { + IOSink? shouldGenerate(PigeonOptions options, FileType _) { if (options.dartTestOut != null) { return _openSink(options.dartTestOut); } else { @@ -453,50 +475,35 @@ class DartTestGeneratorAdapter implements GeneratorAdapter { List validate(PigeonOptions options, Root root) => []; } -/// A [GeneratorAdapter] that generates Objective-C header code. -class ObjcHeaderGeneratorAdapter implements GeneratorAdapter { - /// Constructor for [ObjcHeaderGeneratorAdapter]. - const ObjcHeaderGeneratorAdapter(); - - @override - void generate(StringSink sink, PigeonOptions options, Root root) { - final ObjcOptions objcOptions = options.objcOptions ?? const ObjcOptions(); - final ObjcOptions objcOptionsWithHeader = objcOptions.merge(ObjcOptions( - copyrightHeader: options.copyrightHeader != null - ? _lineReader(options.copyrightHeader!) - : null)); - final ObjcGenerator generator = ObjcGenerator(); - generator.generate(objcOptionsWithHeader, root, sink, FileType.header); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => - _openSink(options.objcHeaderOut); +/// A [GeneratorAdapter] that generates Objective-C code. +class ObjcGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [ObjcGeneratorAdapter]. + ObjcGeneratorAdapter( + {this.fileTypeList = const [FileType.header, FileType.source]}); @override - List validate(PigeonOptions options, Root root) => - validateObjc(options.objcOptions!, root); -} - -/// A [GeneratorAdapter] that generates Objective-C source code. -class ObjcSourceGeneratorAdapter implements GeneratorAdapter { - /// Constructor for [ObjcSourceGeneratorAdapter]. - const ObjcSourceGeneratorAdapter(); + List fileTypeList; @override - void generate(StringSink sink, PigeonOptions options, Root root) { + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { final ObjcOptions objcOptions = options.objcOptions ?? const ObjcOptions(); final ObjcOptions objcOptionsWithHeader = objcOptions.merge(ObjcOptions( copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); final ObjcGenerator generator = ObjcGenerator(); - generator.generate(objcOptionsWithHeader, root, sink, FileType.source); + generator.generate(objcOptionsWithHeader, root, sink, fileType); } @override - IOSink? shouldGenerate(PigeonOptions options) => - _openSink(options.objcSourceOut); + IOSink? shouldGenerate(PigeonOptions options, FileType fileType) { + if (fileType == FileType.source) { + return _openSink(options.objcSourceOut); + } else { + return _openSink(options.objcHeaderOut); + } + } @override List validate(PigeonOptions options, Root root) => []; @@ -505,10 +512,14 @@ class ObjcSourceGeneratorAdapter implements GeneratorAdapter { /// A [GeneratorAdapter] that generates Java source code. class JavaGeneratorAdapter implements GeneratorAdapter { /// Constructor for [JavaGeneratorAdapter]. - const JavaGeneratorAdapter(); + JavaGeneratorAdapter(); + + @override + List fileTypeList = const [FileType.source]; @override - void generate(StringSink sink, PigeonOptions options, Root root) { + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { JavaOptions javaOptions = options.javaOptions ?? const JavaOptions(); javaOptions = javaOptions.merge(JavaOptions( className: javaOptions.className ?? @@ -517,11 +528,12 @@ class JavaGeneratorAdapter implements GeneratorAdapter { ? _lineReader(options.copyrightHeader!) : null)); final JavaGenerator generator = JavaGenerator(); - generator.generate(javaOptions, root, sink, FileType.source); + generator.generate(javaOptions, root, sink, fileType); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.javaOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.javaOut); @override List validate(PigeonOptions options, Root root) => []; @@ -530,71 +542,60 @@ class JavaGeneratorAdapter implements GeneratorAdapter { /// A [GeneratorAdapter] that generates Swift source code. class SwiftGeneratorAdapter implements GeneratorAdapter { /// Constructor for [SwiftGeneratorAdapter]. - const SwiftGeneratorAdapter(); + SwiftGeneratorAdapter(); @override - void generate(StringSink sink, PigeonOptions options, Root root) { + List fileTypeList = const [FileType.source]; + + @override + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { SwiftOptions swiftOptions = options.swiftOptions ?? const SwiftOptions(); swiftOptions = swiftOptions.merge(SwiftOptions( copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); final SwiftGenerator generator = SwiftGenerator(); - generator.generate(swiftOptions, root, sink, FileType.source); + generator.generate(swiftOptions, root, sink, fileType); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.swiftOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.swiftOut); @override List validate(PigeonOptions options, Root root) => []; } -/// A [GeneratorAdapter] that generates C++ header code. -class CppHeaderGeneratorAdapter implements GeneratorAdapter { - /// Constructor for [CppHeaderGeneratorAdapter]. - const CppHeaderGeneratorAdapter(); - - @override - void generate(StringSink sink, PigeonOptions options, Root root) { - final CppOptions cppOptions = options.cppOptions ?? const CppOptions(); - final CppOptions cppOptionsWithHeader = cppOptions.merge(CppOptions( - headerOutPath: path.basenameWithoutExtension(options.cppHeaderOut!), - copyrightHeader: options.copyrightHeader != null - ? _lineReader(options.copyrightHeader!) - : null)); - final CppGenerator generator = CppGenerator(); - generator.generate(cppOptionsWithHeader, root, sink, FileType.header); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => - _openSink(options.cppHeaderOut); +/// A [GeneratorAdapter] that generates C++ source code. +class CppGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [CppGeneratorAdapter]. + CppGeneratorAdapter( + {this.fileTypeList = const [FileType.header, FileType.source]}); @override - List validate(PigeonOptions options, Root root) => - validateCpp(options.cppOptions!, root); -} - -/// A [GeneratorAdapter] that generates C++ source code. -class CppSourceGeneratorAdapter implements GeneratorAdapter { - /// Constructor for [CppSourceGeneratorAdapter]. - const CppSourceGeneratorAdapter(); + List fileTypeList; @override - void generate(StringSink sink, PigeonOptions options, Root root) { + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { final CppOptions cppOptions = options.cppOptions ?? const CppOptions(); final CppOptions cppOptionsWithHeader = cppOptions.merge(CppOptions( copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); final CppGenerator generator = CppGenerator(); - generator.generate(cppOptionsWithHeader, root, sink, FileType.source); + generator.generate(cppOptionsWithHeader, root, sink, fileType); } @override - IOSink? shouldGenerate(PigeonOptions options) => - _openSink(options.cppSourceOut); + IOSink? shouldGenerate(PigeonOptions options, FileType fileType) { + if (fileType == FileType.source) { + return _openSink(options.cppSourceOut); + } else { + return _openSink(options.cppHeaderOut); + } + } @override List validate(PigeonOptions options, Root root) => []; @@ -603,10 +604,15 @@ class CppSourceGeneratorAdapter implements GeneratorAdapter { /// A [GeneratorAdapter] that generates Kotlin source code. class KotlinGeneratorAdapter implements GeneratorAdapter { /// Constructor for [KotlinGeneratorAdapter]. - const KotlinGeneratorAdapter(); + KotlinGeneratorAdapter( + {this.fileTypeList = const [FileType.source]}); + + @override + List fileTypeList; @override - void generate(StringSink sink, PigeonOptions options, Root root) { + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { KotlinOptions kotlinOptions = options.kotlinOptions ?? const KotlinOptions(); kotlinOptions = kotlinOptions.merge(KotlinOptions( @@ -614,11 +620,12 @@ class KotlinGeneratorAdapter implements GeneratorAdapter { ? _lineReader(options.copyrightHeader!) : null)); final KotlinGenerator generator = KotlinGenerator(); - generator.generate(kotlinOptions, root, sink, FileType.source); + generator.generate(kotlinOptions, root, sink, fileType); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.kotlinOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.kotlinOut); @override List validate(PigeonOptions options, Root root) => []; @@ -1367,16 +1374,14 @@ ${_argParser.usage}'''; } final List safeGeneratorAdapters = adapters ?? [ - const DartGeneratorAdapter(), - const JavaGeneratorAdapter(), - const SwiftGeneratorAdapter(), - const KotlinGeneratorAdapter(), - const CppHeaderGeneratorAdapter(), - const CppSourceGeneratorAdapter(), - const DartTestGeneratorAdapter(), - const ObjcHeaderGeneratorAdapter(), - const ObjcSourceGeneratorAdapter(), - const AstGeneratorAdapter(), + DartGeneratorAdapter(), + JavaGeneratorAdapter(), + SwiftGeneratorAdapter(), + KotlinGeneratorAdapter(), + CppGeneratorAdapter(), + DartTestGeneratorAdapter(), + ObjcGeneratorAdapter(), + AstGeneratorAdapter(), ]; _executeConfigurePigeon(options); @@ -1399,7 +1404,7 @@ ${_argParser.usage}'''; } for (final GeneratorAdapter adapter in safeGeneratorAdapters) { - final IOSink? sink = adapter.shouldGenerate(options); + final IOSink? sink = adapter.shouldGenerate(options, FileType.source); if (sink != null) { final List adapterErrors = adapter.validate(options, parseResults.root); @@ -1441,11 +1446,13 @@ ${_argParser.usage}'''; } for (final GeneratorAdapter adapter in safeGeneratorAdapters) { - final IOSink? sink = adapter.shouldGenerate(options); - if (sink != null) { - adapter.generate(sink, options, parseResults.root); - await sink.flush(); - await releaseSink(sink); + for (final FileType fileType in adapter.fileTypeList) { + final IOSink? sink = adapter.shouldGenerate(options, fileType); + if (sink != null) { + adapter.generate(sink, options, parseResults.root, fileType); + await sink.flush(); + await releaseSink(sink); + } } } diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 8d06f78cecc..1ff074d3a0f 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -6,20 +6,26 @@ import 'dart:async'; import 'dart:io'; import 'package:pigeon/ast.dart'; +import 'package:pigeon/generator_tools.dart'; import 'package:pigeon/pigeon_lib.dart'; import 'package:test/test.dart'; class _ValidatorGeneratorAdapter implements GeneratorAdapter { _ValidatorGeneratorAdapter(this.sink); + + @override + List fileTypeList = const [FileType.source]; + bool didCallValidate = false; final IOSink? sink; @override - void generate(StringSink sink, PigeonOptions options, Root root) {} + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) {} @override - IOSink? shouldGenerate(PigeonOptions options) => sink; + IOSink? shouldGenerate(PigeonOptions options, FileType _) => sink; @override List validate(PigeonOptions options, Root root) { @@ -397,9 +403,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const DartGeneratorAdapter dartGeneratorAdapter = DartGeneratorAdapter(); + final DartGeneratorAdapter dartGeneratorAdapter = DartGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - dartGeneratorAdapter.generate(buffer, options, root); + dartGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -407,9 +413,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( javaOut: 'Foo.java', copyrightHeader: './copyright_header.txt'); - const JavaGeneratorAdapter javaGeneratorAdapter = JavaGeneratorAdapter(); + final JavaGeneratorAdapter javaGeneratorAdapter = JavaGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - javaGeneratorAdapter.generate(buffer, options, root); + javaGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -417,10 +423,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const ObjcHeaderGeneratorAdapter objcHeaderGeneratorAdapter = - ObjcHeaderGeneratorAdapter(); + final ObjcGeneratorAdapter objcHeaderGeneratorAdapter = + ObjcGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - objcHeaderGeneratorAdapter.generate(buffer, options, root); + objcHeaderGeneratorAdapter.generate(buffer, options, root, FileType.header); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -428,10 +434,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const ObjcSourceGeneratorAdapter objcSourceGeneratorAdapter = - ObjcSourceGeneratorAdapter(); + final ObjcGeneratorAdapter objcSourceGeneratorAdapter = + ObjcGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - objcSourceGeneratorAdapter.generate(buffer, options, root); + objcSourceGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -439,9 +445,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( swiftOut: 'Foo.swift', copyrightHeader: './copyright_header.txt'); - const SwiftGeneratorAdapter swiftGeneratorAdapter = SwiftGeneratorAdapter(); + final SwiftGeneratorAdapter swiftGeneratorAdapter = SwiftGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - swiftGeneratorAdapter.generate(buffer, options, root); + swiftGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -449,10 +455,9 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions( cppHeaderOut: 'Foo.h', copyrightHeader: './copyright_header.txt'); - const CppHeaderGeneratorAdapter cppHeaderGeneratorAdapter = - CppHeaderGeneratorAdapter(); + final CppGeneratorAdapter cppHeaderGeneratorAdapter = CppGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - cppHeaderGeneratorAdapter.generate(buffer, options, root); + cppHeaderGeneratorAdapter.generate(buffer, options, root, FileType.header); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -460,10 +465,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const CppSourceGeneratorAdapter cppSourceGeneratorAdapter = - CppSourceGeneratorAdapter(); + final CppGeneratorAdapter cppSourceGeneratorAdapter = + CppGeneratorAdapter(fileTypeList: [FileType.source]); final StringBuffer buffer = StringBuffer(); - cppSourceGeneratorAdapter.generate(buffer, options, root); + cppSourceGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -933,10 +938,10 @@ abstract class Api { dartTestOut: 'stdout', dartOut: 'stdout', ); - const DartTestGeneratorAdapter dartGeneratorAdapter = + final DartTestGeneratorAdapter dartGeneratorAdapter = DartTestGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - dartGeneratorAdapter.generate(buffer, options, root); + dartGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); From 859c6cbb7aee800113817348d40a1ebe095ad3ba Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 29 Dec 2022 11:53:04 -0800 Subject: [PATCH 36/45] merge --- packages/pigeon/lib/dart_generator.dart | 1 + packages/pigeon/mock_handler_tester/test/message.dart | 3 ++- packages/pigeon/mock_handler_tester/test/test.dart | 2 +- .../example/alternate_language_test_plugin/CoreTests.java | 2 +- .../ios/Classes/CoreTests.gen.h | 3 ++- .../ios/Classes/CoreTests.gen.m | 3 ++- .../flutter_null_safe_unit_tests/lib/core_tests.gen.dart | 3 ++- .../lib/multiple_arity.gen.dart | 3 ++- .../lib/non_null_fields.gen.dart | 3 ++- .../flutter_null_safe_unit_tests/lib/null_fields.gen.dart | 3 ++- .../lib/null_safe_pigeon.dart | 3 ++- .../lib/nullable_returns.gen.dart | 3 ++- .../flutter_null_safe_unit_tests/lib/primitive.dart | 3 ++- .../lib/src/generated/core_tests.gen.dart | 3 ++- .../main/kotlin/com/example/test_plugin/CoreTests.gen.kt | 2 +- .../test_plugin/ios/Classes/CoreTests.gen.swift | 2 +- .../test_plugin/macos/Classes/CoreTests.gen.swift | 2 +- .../test_plugin/windows/pigeon/core_tests.gen.cpp | 2 +- .../test_plugin/windows/pigeon/core_tests.gen.h | 8 ++++---- packages/pigeon/test/pigeon_lib_test.dart | 4 ++-- 20 files changed, 35 insertions(+), 23 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 9c6e1360e23..ae17374e18e 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -96,6 +96,7 @@ class DartGenerator extends Generator { final Indent indent = Indent(sink); final String sourceOutPath = languageOptions.sourceOutPath ?? ''; final String testOutPath = languageOptions.testOutPath ?? ''; + writeTestHeader(languageOptions, root, sink, indent); generateTestDart( languageOptions, root, diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart index 4f6c9d14457..94024e73bc7 100644 --- a/packages/pigeon/mock_handler_tester/test/message.dart +++ b/packages/pigeon/mock_handler_tester/test/message.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/mock_handler_tester/test/test.dart b/packages/pigeon/mock_handler_tester/test/test.dart index 9b97826b605..e1644f13686 100644 --- a/packages/pigeon/mock_handler_tester/test/test.dart +++ b/packages/pigeon/mock_handler_tester/test/test.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java index 2d81d4b59f1..a6d28a36db7 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon package com.example.alternate_language_test_plugin; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h index dcdee87c5d9..3e921d36aee 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h @@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon + #import @protocol FlutterBinaryMessenger; @protocol FlutterMessageCodec; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m index bcdd86394a6..3fb7d4b98d5 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m @@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon + #import "CoreTests.gen.h" #import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart index ee79a4b1a27..49d7d40d13a 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart index e92ab29cebd..4bed42b32dd 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart index 1ff71bfa346..5d4cbd0096e 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart index 88f4611e746..0d151dc54e4 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart index 13fe926bcf1..820749f7bef 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart index be1979c8adf..a050c155e05 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart index 36a569e4f46..a5e4e6b318f 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart index ee79a4b1a27..49d7d40d13a 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt index c1add054eaf..d5c9882ba12 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon package com.example.test_plugin diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift index c9850b70d36..b21cbd5fbc0 100644 --- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift index c9850b70d36..b21cbd5fbc0 100644 --- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp index f0d5929ce4a..2b46028b18e 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon #undef _HAS_EXCEPTIONS diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h index a2ea204b578..fca12d2ec92 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon -#ifndef PIGEON_CORE_TESTS_PIGEONTEST_H_ -#define PIGEON_CORE_TESTS_PIGEONTEST_H_ +#ifndef PIGEON_CORE_TESTS_GEN_H_CORE_TESTS_PIGEONTEST_H_ +#define PIGEON_CORE_TESTS_GEN_H_CORE_TESTS_PIGEONTEST_H_ #include #include #include @@ -406,4 +406,4 @@ class HostTrivialApi { HostTrivialApi() = default; }; } // namespace core_tests_pigeontest -#endif // PIGEON_CORE_TESTS_PIGEONTEST_H_ +#endif // PIGEON_CORE_TESTS_GEN_H_CORE_TESTS_PIGEONTEST_H_ diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 1ff074d3a0f..d7201bb688b 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -938,10 +938,10 @@ abstract class Api { dartTestOut: 'stdout', dartOut: 'stdout', ); - final DartTestGeneratorAdapter dartGeneratorAdapter = + final DartTestGeneratorAdapter dartTestGeneratorAdapter = DartTestGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - dartGeneratorAdapter.generate(buffer, options, root, FileType.source); + dartTestGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); From 6dff8cbae4489240c2d4fc2f75c801a06e5e6b80 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 29 Dec 2022 12:17:46 -0800 Subject: [PATCH 37/45] analyze --- packages/pigeon/lib/cpp_generator.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index b291e9aea19..65fa011722c 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'ast.dart'; import 'functional.dart'; import 'generator.dart'; From c17c1e4d6e58af11f8735622b95567a7f5003497 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 29 Dec 2022 12:48:36 -0800 Subject: [PATCH 38/45] add import method --- packages/pigeon/lib/dart_generator.dart | 31 +++++++++++++++---------- packages/pigeon/lib/generator.dart | 12 +++++++++- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index ae17374e18e..ce7b5631448 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -82,6 +82,7 @@ class DartGenerator extends Generator { final Indent indent = Indent(sink); writeFileHeaders(languageOptions, root, sink, indent, fileType); + writeFileImports(languageOptions, root, sink, indent, fileType); generateDart(languageOptions, root, sink, indent); } @@ -91,6 +92,12 @@ class DartGenerator extends Generator { writeHeader(languageOptions, root, sink, indent); } + @override + void writeFileImports(DartOptions languageOptions, Root root, StringSink sink, + Indent indent, FileType fileType) { + writeImports(languageOptions, root, sink, indent); + } + /// Generates Dart files for testing with specified [DartOptions] void generateTest(DartOptions languageOptions, Root root, StringSink sink) { final Indent indent = Indent(sink); @@ -553,6 +560,18 @@ void writeHeader(DartOptions opt, Root root, StringSink sink, Indent indent) { indent.addln(''); } +/// Writes file imports to sink. +void writeImports(DartOptions opt, Root root, StringSink sink, Indent indent) { + indent.writeln("import 'dart:async';"); + indent.writeln( + "import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;", + ); + indent.addln(''); + indent.writeln( + "import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer;"); + indent.writeln("import 'package:flutter/services.dart';"); +} + /// Generates Dart source code for the given AST represented by [root], /// outputting the code to [sink]. void generateDart(DartOptions opt, Root root, StringSink sink, Indent indent) { @@ -577,17 +596,6 @@ void generateDart(DartOptions opt, Root root, StringSink sink, Indent indent) { } } - void writeImports() { - indent.writeln("import 'dart:async';"); - indent.writeln( - "import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;", - ); - indent.addln(''); - indent.writeln( - "import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer;"); - indent.writeln("import 'package:flutter/services.dart';"); - } - void writeDataClass(Class klass) { void writeConstructor() { indent.write(klass.name); @@ -718,7 +726,6 @@ $resultAt != null } } - writeImports(); writeEnums(); for (final Class klass in root.classes) { indent.writeln(''); diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index 9f4b835bb3c..86fa40fbbc5 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -14,7 +14,8 @@ abstract class Generator { /// This method, when overridden, should follow a generic structure that is currently: /// 1. Create Indent /// 2. Write File Headers - /// 3. Generate File + /// 3. Write Imports + /// 4. Generate File void generate( T languageOptions, Root root, @@ -30,4 +31,13 @@ abstract class Generator { Indent indent, FileType fileType, ); + + /// Adds specified imports. + void writeFileImports( + T languageOptions, + Root root, + StringSink sink, + Indent indent, + FileType fileType, + ); } From d9f116ff4ea9a4417cb9e051f4478acd08b8e24e Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 29 Dec 2022 12:56:38 -0800 Subject: [PATCH 39/45] re-remove DartTestGenerator --- packages/pigeon/lib/dart_generator.dart | 32 ----------- packages/pigeon/test/dart_generator_test.dart | 54 +++++++++---------- 2 files changed, 27 insertions(+), 59 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index ae17374e18e..25d505c8dff 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -108,38 +108,6 @@ class DartGenerator extends Generator { } } -/// Class that manages all Dart code generation. -class DartTestGenerator extends Generator { - /// Instantiates a Dart Generator. - DartTestGenerator(); - - /// Generates Dart files with specified [DartOptions] - @override - void generate(DartOptions languageOptions, Root root, StringSink sink, - FileType fileType) { - final Indent indent = Indent(sink); - - final String sourceOutPath = languageOptions.sourceOutPath ?? ''; - final String testOutPath = languageOptions.testOutPath ?? ''; - - writeFileHeaders(languageOptions, root, sink, indent, fileType); - generateTestDart( - languageOptions, - root, - sink, - indent, - sourceOutPath: sourceOutPath, - testOutPath: testOutPath, - ); - } - - @override - void writeFileHeaders(DartOptions languageOptions, Root root, StringSink sink, - Indent indent, FileType fileType) { - writeTestHeader(languageOptions, root, sink, indent); - } -} - String _escapeForDartSingleQuotedString(String raw) { return raw .replaceAll(r'\', r'\\') diff --git a/packages/pigeon/test/dart_generator_test.dart b/packages/pigeon/test/dart_generator_test.dart index c8d5f3af04c..31ff53a92cc 100644 --- a/packages/pigeon/test/dart_generator_test.dart +++ b/packages/pigeon/test/dart_generator_test.dart @@ -595,15 +595,15 @@ void main() { expect(mainCode, isNot(contains("'${Keys.result}': output"))); expect(mainCode, isNot(contains('return [];'))); - final DartTestGenerator testGenerator = DartTestGenerator(); - testGenerator.generate( - DartOptions( - sourceOutPath: "fo'o.dart", - testOutPath: 'test.dart', - ), - root, - testCodeSink, - FileType.source); + final DartGenerator testGenerator = DartGenerator(); + testGenerator.generateTest( + DartOptions( + sourceOutPath: "fo'o.dart", + testOutPath: 'test.dart', + ), + root, + testCodeSink, + ); final String testCode = testCodeSink.toString(); expect(testCode, contains(r"import 'fo\'o.dart';")); expect(testCode, isNot(contains('class Api {'))); @@ -1189,15 +1189,15 @@ name: foobar final Root root = Root(classes: [], apis: [], enums: []); final StringBuffer sink = StringBuffer(); - final DartTestGenerator testGenerator = DartTestGenerator(); - testGenerator.generate( - DartOptions( - sourceOutPath: path.join(foo.path, 'bar.dart'), - testOutPath: path.join(tempDir.path, 'test', 'bar_test.dart'), - ), - root, - sink, - FileType.source); + final DartGenerator testGenerator = DartGenerator(); + testGenerator.generateTest( + DartOptions( + sourceOutPath: path.join(foo.path, 'bar.dart'), + testOutPath: path.join(tempDir.path, 'test', 'bar_test.dart'), + ), + root, + sink, + ); final String code = sink.toString(); expect(code, contains("import 'package:foobar/foo/bar.dart';")); } finally { @@ -1399,15 +1399,15 @@ name: foobar ); final StringBuffer sink = StringBuffer(); - final DartTestGenerator testGenerator = DartTestGenerator(); - testGenerator.generate( - DartOptions( - sourceOutPath: 'code.dart', - testOutPath: 'test.dart', - ), - root, - sink, - FileType.source); + final DartGenerator testGenerator = DartGenerator(); + testGenerator.generateTest( + DartOptions( + sourceOutPath: 'code.dart', + testOutPath: 'test.dart', + ), + root, + sink, + ); final String testCode = sink.toString(); expect( From e57de98a9d752efcf2c91ed565edcb24ab3c490e Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Thu, 29 Dec 2022 13:48:01 -0800 Subject: [PATCH 40/45] Moves imports to new method --- packages/pigeon/lib/cpp_generator.dart | 39 ++++++++--- packages/pigeon/lib/dart_generator.dart | 24 ++++--- packages/pigeon/lib/java_generator.dart | 55 ++++++++------- packages/pigeon/lib/kotlin_generator.dart | 40 ++++++----- packages/pigeon/lib/objc_generator.dart | 68 +++++++++++-------- packages/pigeon/lib/swift_generator.dart | 38 +++++++---- .../ios/Classes/CoreTests.gen.h | 1 + .../windows/pigeon/core_tests.gen.h | 1 + 8 files changed, 162 insertions(+), 104 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 65fa011722c..e41a9480129 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -80,11 +80,11 @@ class CppGenerator extends Generator { void generate(CppOptions languageOptions, Root root, StringSink sink, FileType fileType) { final Indent indent = Indent(sink); + writeFileHeaders(languageOptions, root, sink, indent, fileType); + writeFileImports(languageOptions, root, sink, indent, fileType); if (fileType == FileType.header) { - writeFileHeaders(languageOptions, root, sink, indent, fileType); generateCppHeader(languageOptions, root, sink, indent); } else { - writeFileHeaders(languageOptions, root, sink, indent, fileType); generateCppSource(languageOptions, root, sink, indent); } } @@ -98,6 +98,16 @@ class CppGenerator extends Generator { writeCppSourceHeader(languageOptions, root, sink, indent); } } + + @override + void writeFileImports(CppOptions languageOptions, Root root, StringSink sink, + Indent indent, FileType fileType) { + if (fileType == FileType.header) { + writeCppHeaderImports(languageOptions, root, sink, indent); + } else { + writeCppSourceImports(languageOptions, root, sink, indent); + } + } } String _getCodecSerializerName(Api api) => '${api.name}CodecSerializer'; @@ -1056,9 +1066,8 @@ void writeCppHeaderHeader( indent.addln(''); } -/// Generates the ".h" file for the AST represented by [root] to [sink] with the -/// provided [options] and [headerFileName]. -void generateCppHeader( +/// Writes Cpp header file imports to sink. +void writeCppHeaderImports( CppOptions options, Root root, StringSink sink, Indent indent) { final String guardName = _getGuardName(options.headerIncludePath, options.namespace); @@ -1078,11 +1087,16 @@ void generateCppHeader( 'optional', ]); indent.addln(''); - if (options.namespace != null) { indent.writeln('namespace ${options.namespace} {'); } + indent.addln(''); +} +/// Generates the ".h" file for the AST represented by [root] to [sink] with the +/// provided [options] and [headerFileName]. +void generateCppHeader( + CppOptions options, Root root, StringSink sink, Indent indent) { // When generating for a Pigeon unit test, add a test fixture friend class to // allow unit testing private methods, since testing serialization via public // methods is essentially an end-to-end test. @@ -1137,7 +1151,8 @@ void generateCppHeader( if (options.namespace != null) { indent.writeln('} // namespace ${options.namespace}'); } - + final String guardName = + _getGuardName(options.headerIncludePath, options.namespace); indent.writeln('#endif // $guardName'); } @@ -1154,9 +1169,8 @@ void writeCppSourceHeader( indent.addln(''); } -/// Generates the ".cpp" file for the AST represented by [root] to [sink] with the -/// provided [options]. -void generateCppSource( +/// Writes Cpp source file imports to sink. +void writeCppSourceImports( CppOptions options, Root root, StringSink sink, Indent indent) { indent.writeln('#include "${options.headerIncludePath}"'); indent.addln(''); @@ -1177,7 +1191,12 @@ void generateCppSource( if (options.namespace != null) { indent.writeln('namespace ${options.namespace} {'); } +} +/// Generates the ".cpp" file for the AST represented by [root] to [sink] with the +/// provided [options]. +void generateCppSource( + CppOptions options, Root root, StringSink sink, Indent indent) { for (final Class klass in root.classes) { _writeDataClassImplementation(indent, klass, root); } diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 506b7e55158..6d233121de6 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -104,6 +104,7 @@ class DartGenerator extends Generator { final String sourceOutPath = languageOptions.sourceOutPath ?? ''; final String testOutPath = languageOptions.testOutPath ?? ''; writeTestHeader(languageOptions, root, sink, indent); + writeTestImports(languageOptions, root, sink, indent); generateTestDart( languageOptions, root, @@ -768,6 +769,20 @@ void writeTestHeader( indent.writeln('// ignore_for_file: avoid_relative_lib_imports'); } +/// Writes file imports to sink. +void writeTestImports( + DartOptions opt, Root root, StringSink sink, Indent indent) { + indent.writeln("import 'dart:async';"); + indent.writeln( + "import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;", + ); + indent.writeln( + "import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer;"); + indent.writeln("import 'package:flutter/services.dart';"); + indent.writeln("import 'package:flutter_test/flutter_test.dart';"); + indent.writeln(''); +} + /// Generates Dart source code for test support libraries based on the given AST /// represented by [root], outputting the code to [sink]. [dartOutPath] is the /// path of the generated dart code to be tested. [testOutPath] is where the @@ -780,15 +795,6 @@ void generateTestDart( required String sourceOutPath, required String testOutPath, }) { - indent.writeln("import 'dart:async';"); - indent.writeln( - "import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;", - ); - indent.writeln( - "import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer;"); - indent.writeln("import 'package:flutter/services.dart';"); - indent.writeln("import 'package:flutter_test/flutter_test.dart';"); - indent.writeln(''); final String relativeDartPath = path.Context(style: path.Style.posix).relative( _posixify(sourceOutPath), diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index 3e89aa0b190..89ca7daba33 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -97,6 +97,7 @@ class JavaGenerator extends Generator { final Indent indent = Indent(sink); writeFileHeaders(languageOptions, root, sink, indent, fileType); + writeFileImports(languageOptions, root, sink, indent, fileType); generateJava(languageOptions, root, sink, indent); } @@ -105,6 +106,12 @@ class JavaGenerator extends Generator { Indent indent, FileType fileType) { writeHeader(languageOptions, root, sink, indent); } + + @override + void writeFileImports(JavaOptions languageOptions, Root root, StringSink sink, + Indent indent, FileType fileType) { + writeImports(languageOptions, root, sink, indent); + } } /// Calculates the name of the codec that will be generated for [api]. @@ -555,6 +562,30 @@ void writeHeader( indent.addln(''); } +/// Writes file imports to sink. +void writeImports( + JavaOptions options, Root root, StringSink sink, Indent indent) { + if (options.package != null) { + indent.writeln('package ${options.package};'); + } + indent.writeln('import android.util.Log;'); + indent.writeln('import androidx.annotation.NonNull;'); + indent.writeln('import androidx.annotation.Nullable;'); + indent.writeln('import io.flutter.plugin.common.BasicMessageChannel;'); + indent.writeln('import io.flutter.plugin.common.BinaryMessenger;'); + indent.writeln('import io.flutter.plugin.common.MessageCodec;'); + indent.writeln('import io.flutter.plugin.common.StandardMessageCodec;'); + indent.writeln('import java.io.ByteArrayOutputStream;'); + indent.writeln('import java.nio.ByteBuffer;'); + indent.writeln('import java.util.Arrays;'); + indent.writeln('import java.util.ArrayList;'); + indent.writeln('import java.util.Collections;'); + indent.writeln('import java.util.List;'); + indent.writeln('import java.util.Map;'); + indent.writeln('import java.util.HashMap;'); + indent.addln(''); +} + /// Generates the ".java" file for the AST represented by [root] to [sink] with the /// provided [options]. void generateJava( @@ -564,24 +595,6 @@ void generateJava( final Set rootEnumNameSet = root.enums.map((Enum x) => x.name).toSet(); - void writeImports() { - indent.writeln('import android.util.Log;'); - indent.writeln('import androidx.annotation.NonNull;'); - indent.writeln('import androidx.annotation.Nullable;'); - indent.writeln('import io.flutter.plugin.common.BasicMessageChannel;'); - indent.writeln('import io.flutter.plugin.common.BinaryMessenger;'); - indent.writeln('import io.flutter.plugin.common.MessageCodec;'); - indent.writeln('import io.flutter.plugin.common.StandardMessageCodec;'); - indent.writeln('import java.io.ByteArrayOutputStream;'); - indent.writeln('import java.nio.ByteBuffer;'); - indent.writeln('import java.util.Arrays;'); - indent.writeln('import java.util.ArrayList;'); - indent.writeln('import java.util.Collections;'); - indent.writeln('import java.util.List;'); - indent.writeln('import java.util.Map;'); - indent.writeln('import java.util.HashMap;'); - } - String camelToSnake(String camelCase) { final RegExp regex = RegExp('([a-z])([A-Z]+)'); return camelCase @@ -777,12 +790,6 @@ void generateJava( }'''); } - if (options.package != null) { - indent.writeln('package ${options.package};'); - } - indent.addln(''); - writeImports(); - indent.addln(''); indent.writeln( '$_docCommentPrefix Generated class from Pigeon.$_docCommentSuffix'); indent.writeln( diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index 3ee47a29cd1..ed4af8e4413 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -77,6 +77,7 @@ class KotlinGenerator extends Generator { final Indent indent = Indent(sink); writeFileHeaders(languageOptions, root, sink, indent, fileType); + writeFileImports(languageOptions, root, sink, indent, fileType); generateKotlin(languageOptions, root, sink, indent); } @@ -85,6 +86,12 @@ class KotlinGenerator extends Generator { StringSink sink, Indent indent, FileType fileType) { writeHeader(languageOptions, root, sink, indent); } + + @override + void writeFileImports(KotlinOptions languageOptions, Root root, + StringSink sink, Indent indent, FileType fileType) { + writeImports(languageOptions, root, sink, indent); + } } /// Calculates the name of the codec that will be generated for [api]. @@ -468,6 +475,23 @@ void writeHeader( indent.addln(''); } +/// Writes file imports to sink. +void writeImports( + KotlinOptions options, Root root, StringSink sink, Indent indent) { + if (options.package != null) { + indent.writeln('package ${options.package}'); + } + indent.addln(''); + indent.writeln('import android.util.Log'); + indent.writeln('import io.flutter.plugin.common.BasicMessageChannel'); + indent.writeln('import io.flutter.plugin.common.BinaryMessenger'); + indent.writeln('import io.flutter.plugin.common.MessageCodec'); + indent.writeln('import io.flutter.plugin.common.StandardMessageCodec'); + indent.writeln('import java.io.ByteArrayOutputStream'); + indent.writeln('import java.nio.ByteBuffer'); + indent.addln(''); +} + /// Generates the ".kotlin" file for the AST represented by [root] to [sink] with the /// provided [options]. void generateKotlin( @@ -482,16 +506,6 @@ void generateKotlin( (TypeDeclaration x) => _kotlinTypeForBuiltinDartType(x)); } - void writeImports() { - indent.writeln('import android.util.Log'); - indent.writeln('import io.flutter.plugin.common.BasicMessageChannel'); - indent.writeln('import io.flutter.plugin.common.BinaryMessenger'); - indent.writeln('import io.flutter.plugin.common.MessageCodec'); - indent.writeln('import io.flutter.plugin.common.StandardMessageCodec'); - indent.writeln('import java.io.ByteArrayOutputStream'); - indent.writeln('import java.nio.ByteBuffer'); - } - void writeEnum(Enum anEnum) { addDocumentationComments( indent, anEnum.documentationComments, _docCommentSpec); @@ -676,12 +690,6 @@ void generateKotlin( }); } - if (options.package != null) { - indent.writeln('package ${options.package}'); - } - indent.addln(''); - writeImports(); - indent.addln(''); indent.writeln('/** Generated class from Pigeon. */'); for (final Enum anEnum in root.enums) { indent.writeln(''); diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 68b4d63f064..b1f2cff6fac 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -75,11 +75,11 @@ class ObjcGenerator extends Generator { FileType fileType) { final Indent indent = Indent(sink); + writeFileHeaders(languageOptions, root, sink, indent, fileType); + writeFileImports(languageOptions, root, sink, indent, fileType); if (fileType == FileType.header) { - writeFileHeaders(languageOptions, root, sink, indent, fileType); generateObjcHeader(languageOptions, root, sink, indent); } else { - writeFileHeaders(languageOptions, root, sink, indent, fileType); generateObjcSource(languageOptions, root, sink, indent); } } @@ -93,6 +93,16 @@ class ObjcGenerator extends Generator { writeObjcSourceHeader(languageOptions, root, sink, indent); } } + + @override + void writeFileImports(ObjcOptions languageOptions, Root root, StringSink sink, + Indent indent, FileType fileType) { + if (fileType == FileType.header) { + writeObjcHeaderImports(languageOptions, root, sink, indent); + } else { + writeObjcSourceImports(languageOptions, root, sink, indent); + } + } } /// Calculates the ObjC class name, possibly prefixed. @@ -573,21 +583,23 @@ void writeObjcHeaderHeader( indent.addln(''); } +/// Writes Objc header file imports to sink. +void writeObjcHeaderImports( + ObjcOptions options, Root root, StringSink sink, Indent indent) { + indent.writeln('#import '); + indent.addln(''); + + indent.writeln('@protocol FlutterBinaryMessenger;'); + indent.writeln('@protocol FlutterMessageCodec;'); + indent.writeln('@class FlutterError;'); + indent.writeln('@class FlutterStandardTypedData;'); + indent.addln(''); +} + /// Generates the ".h" file for the AST represented by [root] to [sink] with the /// provided [options]. void generateObjcHeader( ObjcOptions options, Root root, StringSink sink, Indent indent) { - void writeImports() { - indent.writeln('#import '); - } - - void writeForwardDeclarations() { - indent.writeln('@protocol FlutterBinaryMessenger;'); - indent.writeln('@protocol FlutterMessageCodec;'); - indent.writeln('@class FlutterError;'); - indent.writeln('@class FlutterStandardTypedData;'); - } - void writeEnum(Enum anEnum) { final String enumName = _className(options.prefix, anEnum.name); addDocumentationComments( @@ -605,8 +617,6 @@ void generateObjcHeader( }); } - writeImports(); - writeForwardDeclarations(); indent.writeln(''); indent.writeln('NS_ASSUME_NONNULL_BEGIN'); @@ -917,6 +927,19 @@ void writeObjcSourceHeader( indent.addln(''); } +/// Writes Objc source file imports to sink. +void writeObjcSourceImports( + ObjcOptions options, Root root, StringSink sink, Indent indent) { + indent.writeln('#import "${options.headerIncludePath}"'); + indent.writeln('#import '); + indent.addln(''); + + indent.writeln('#if !__has_feature(objc_arc)'); + indent.writeln('#error File requires ARC to be enabled.'); + indent.writeln('#endif'); + indent.addln(''); +} + /// Generates the ".m" file for the AST represented by [root] to [sink] with the /// provided [options]. void generateObjcSource( @@ -925,17 +948,6 @@ void generateObjcSource( root.classes.map((Class x) => x.name).toList(); final List enumNames = root.enums.map((Enum x) => x.name).toList(); - void writeImports() { - indent.writeln('#import "${options.headerIncludePath}"'); - indent.writeln('#import '); - } - - void writeArcEnforcer() { - indent.writeln('#if !__has_feature(objc_arc)'); - indent.writeln('#error File requires ARC to be enabled.'); - indent.writeln('#endif'); - } - void writeHelperFunctions() { indent.format(''' static NSArray *wrapResult(id result, FlutterError *error) { @@ -1041,10 +1053,6 @@ static id GetNullableObjectAtIndex(NSArray* array, NSInteger key) { } } - writeImports(); - indent.writeln(''); - writeArcEnforcer(); - indent.addln(''); writeHelperFunctions(); indent.addln(''); root.classes.forEach(writeDataClassExtension); diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 76093450f66..38311dc614d 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -59,6 +59,7 @@ class SwiftGenerator extends Generator { FileType fileType) { final Indent indent = Indent(sink); writeFileHeaders(languageOptions, root, sink, indent, fileType); + writeFileImports(languageOptions, root, sink, indent, fileType); generateSwift(languageOptions, root, sink, indent); } @@ -67,6 +68,12 @@ class SwiftGenerator extends Generator { StringSink sink, Indent indent, FileType fileType) { writeHeader(languageOptions, root, sink, indent); } + + @override + void writeFileImports(SwiftOptions languageOptions, Root root, + StringSink sink, Indent indent, FileType fileType) { + writeImports(languageOptions, root, sink, indent); + } } /// Calculates the name of the codec that will be generated for [api]. @@ -462,6 +469,22 @@ void writeHeader( indent.addln(''); } +/// Writes file header to sink. +void writeImports( + SwiftOptions options, Root root, StringSink sink, Indent indent) { + indent.writeln('import Foundation'); + indent.format(''' +#if os(iOS) +import Flutter +#elseif os(macOS) +import FlutterMacOS +#else +#error("Unsupported platform.") +#endif +'''); + indent.writeln(''); +} + /// Generates the ".swift" file for the AST represented by [root] to [sink] with the /// provided [options]. void generateSwift( @@ -476,19 +499,6 @@ void generateSwift( (TypeDeclaration x) => _swiftTypeForBuiltinDartType(x)); } - void writeImports() { - indent.writeln('import Foundation'); - indent.format(''' -#if os(iOS) -import Flutter -#elseif os(macOS) -import FlutterMacOS -#else -#error("Unsupported platform.") -#endif -'''); - } - void writeEnum(Enum anEnum) { addDocumentationComments( indent, anEnum.documentationComments, _docCommentSpec); @@ -644,8 +654,6 @@ import FlutterMacOS }); } - writeImports(); - indent.addln(''); indent.writeln('$_docCommentPrefix Generated class from Pigeon.'); for (final Enum anEnum in root.enums) { indent.writeln(''); diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h index 3e921d36aee..5e235e67567 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h @@ -6,6 +6,7 @@ // See also: https://pub.dev/packages/pigeon #import + @protocol FlutterBinaryMessenger; @protocol FlutterMessageCodec; @class FlutterError; diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h index fca12d2ec92..aa954c0de5e 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h @@ -17,6 +17,7 @@ #include namespace core_tests_pigeontest { + class CoreTestsTest; // Generated class from Pigeon. From 29decb9c934378483137aacc74a0189ee4515f58 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 30 Dec 2022 13:12:33 -0800 Subject: [PATCH 41/45] nits --- packages/pigeon/lib/cpp_generator.dart | 2 +- packages/pigeon/lib/dart_generator.dart | 2 +- packages/pigeon/lib/pigeon_lib.dart | 23 ++++++++++++----------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index fbb90b39483..d5cce4c5744 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -70,7 +70,7 @@ class CppOptions { } } -/// Class that manages all Cpp header code generation. +/// Class that manages all Cpp code generation. class CppGenerator extends Generator { /// Instantiates a Cpp Generator. CppGenerator(); diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index f450d2ddeaa..5a38061ec8e 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -34,7 +34,7 @@ class DartOptions { /// A copyright header that will get prepended to generated code. final Iterable? copyrightHeader; - /// Path to output generated Dart file for tests. + /// Path to output generated Dart file. String? sourceOutPath; /// Path to output generated Test file for tests. diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 4e949ec3dd3..d54f64d3bf0 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -361,27 +361,28 @@ abstract class GeneratorAdapter { /// Constructor for [GeneratorAdapter] GeneratorAdapter(this.fileTypeList); - /// A list of [FileType] - /// Used to tell the generator method which type of file to create. + /// A list of file types the generator should create. List fileTypeList; - /// Returns an [IOSink] instance to be written to if the [GeneratorAdapter] should - /// generate. If it returns `null`, the [GeneratorAdapter] will be skipped. + /// Returns an [IOSink] instance to be written to + /// if the [GeneratorAdapter] should generate. + /// + /// If it returns `null`, the [GeneratorAdapter] will be skipped. IOSink? shouldGenerate(PigeonOptions options, FileType fileType); - /// Write the generated code described in [root] to [sink] using the - /// [options]. + /// Write the generated code described in [root] to [sink] using the [options]. void generate( StringSink sink, PigeonOptions options, Root root, FileType fileType); - /// Generates errors that would only be appropriate for this [GeneratorAdapter]. For - /// example, maybe a certain feature isn't implemented in a [GeneratorAdapter] yet. + /// Generates errors that would only be appropriate for this [GeneratorAdapter]. + /// + /// For example, if a certain feature isn't implemented in a [GeneratorAdapter] yet. List validate(PigeonOptions options, Root root); } DartOptions _dartOptionsWithCopyrightHeader( DartOptions? dartOptions, String? copyrightHeader, - [String? dartOutPath, String? testOutPath]) { + {String? dartOutPath, String? testOutPath}) { dartOptions = dartOptions ?? DartOptions(); return dartOptions.merge(DartOptions( sourceOutPath: dartOutPath, @@ -451,8 +452,8 @@ class DartTestGeneratorAdapter implements GeneratorAdapter { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader, - options.dartOut, - options.dartTestOut, + dartOutPath: options.dartOut, + testOutPath: options.dartTestOut, ); final DartGenerator testGenerator = DartGenerator(); testGenerator.generateTest( From b7abbe402c2c0a0588ec65311aab65fd9eecd4c0 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 2 Jan 2023 23:33:08 -0800 Subject: [PATCH 42/45] assert --- packages/pigeon/lib/dart_generator.dart | 5 +++-- packages/pigeon/lib/java_generator.dart | 5 +++-- packages/pigeon/lib/kotlin_generator.dart | 5 +++-- packages/pigeon/lib/swift_generator.dart | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 5a38061ec8e..852b3cfa08c 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -77,8 +77,9 @@ class DartGenerator extends Generator { /// Generates Dart files with specified [DartOptions] @override - void generate( - DartOptions languageOptions, Root root, StringSink sink, FileType _) { + void generate(DartOptions languageOptions, Root root, StringSink sink, + FileType fileType) { + assert(fileType == FileType.source); generateDart(languageOptions, root, sink); } diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index e7b2ebcaf18..d62612db23d 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -92,8 +92,9 @@ class JavaGenerator extends Generator { /// Generates Java files with specified [JavaOptions] @override - void generate( - JavaOptions languageOptions, Root root, StringSink sink, FileType _) { + void generate(JavaOptions languageOptions, Root root, StringSink sink, + FileType fileType) { + assert(fileType == FileType.source); generateJava(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index a570da4674b..07855c226b1 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -72,8 +72,9 @@ class KotlinGenerator extends Generator { /// Generates Kotlin files with specified [KotlinOptions] @override - void generate( - KotlinOptions languageOptions, Root root, StringSink sink, FileType _) { + void generate(KotlinOptions languageOptions, Root root, StringSink sink, + FileType fileType) { + assert(fileType == FileType.source); generateKotlin(languageOptions, root, sink); } } diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 45c15341116..6a278344d00 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -55,8 +55,9 @@ class SwiftGenerator extends Generator { /// Generates Swift files with specified [SwiftOptions] @override - void generate( - SwiftOptions languageOptions, Root root, StringSink sink, FileType _) { + void generate(SwiftOptions languageOptions, Root root, StringSink sink, + FileType fileType) { + assert(fileType == FileType.source); generateSwift(languageOptions, root, sink); } } From 9664a066c47ce2548cac349a13ce2daa573724da Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 6 Jan 2023 13:00:43 -0800 Subject: [PATCH 43/45] Creates writeHeader method on Generator classes --- packages/pigeon/CHANGELOG.md | 4 + packages/pigeon/lib/cpp_generator.dart | 56 +- packages/pigeon/lib/dart_generator.dart | 75 +- packages/pigeon/lib/generator.dart | 22 +- packages/pigeon/lib/generator_tools.dart | 4 +- packages/pigeon/lib/java_generator.dart | 40 +- packages/pigeon/lib/kotlin_generator.dart | 44 +- packages/pigeon/lib/objc_generator.dart | 76 +- packages/pigeon/lib/pigeon_lib.dart | 6 +- packages/pigeon/lib/swift_generator.dart | 39 +- .../mock_handler_tester/test/message.dart | 3 +- .../pigeon/mock_handler_tester/test/test.dart | 2 +- .../CoreTests.java | 2 +- .../ios/Classes/CoreTests.gen.h | 3 +- .../ios/Classes/CoreTests.gen.m | 3 +- .../lib/core_tests.gen.dart | 3 +- .../lib/multiple_arity.gen.dart | 3 +- .../lib/non_null_fields.gen.dart | 3 +- .../lib/null_fields.gen.dart | 3 +- .../lib/null_safe_pigeon.dart | 3 +- .../lib/nullable_returns.gen.dart | 3 +- .../lib/primitive.dart | 3 +- .../lib/src/generated/core_tests.gen.dart | 3 +- .../com/example/test_plugin/CoreTests.gen.kt | 2 +- .../ios/Classes/CoreTests.gen.swift | 2 +- .../macos/Classes/CoreTests.gen.swift | 2 +- .../windows/pigeon/core_tests.gen.cpp | 2 +- .../windows/pigeon/core_tests.gen.h | 8 +- packages/pigeon/pubspec.yaml | 2 +- packages/pigeon/test/cpp_generator_test.dart | 222 +++++- packages/pigeon/test/dart_generator_test.dart | 148 ++-- packages/pigeon/test/java_generator_test.dart | 117 ++- .../pigeon/test/kotlin_generator_test.dart | 99 ++- packages/pigeon/test/objc_generator_test.dart | 749 +++++++++++++----- packages/pigeon/test/pigeon_lib_test.dart | 4 +- .../pigeon/test/swift_generator_test.dart | 99 ++- 36 files changed, 1323 insertions(+), 536 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 2af203239b6..394a84a7f80 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.1 + +* Adds writeHeaders method to Generator classes and updates tests to use new Generators. + ## 5.0.0 * Creates new Generator classes for each language. diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index cddefacfc79..82fb8bf62b7 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -75,16 +75,33 @@ class CppGenerator extends Generator> { /// Instantiates a Cpp Generator. CppGenerator(); - /// Generates Cpp files with specified [OutputFileOptions] + /// Generates Cpp header files with specified [CppOptions] @override - void generate(OutputFileOptions languageOptions, Root root, + void generate(OutputFileOptions generatorOptions, Root root, StringSink sink) { - final FileType fileType = languageOptions.fileType; + final FileType fileType = generatorOptions.fileType; assert(fileType == FileType.header || fileType == FileType.source); + + final Indent indent = Indent(sink); if (fileType == FileType.header) { - generateCppHeader(languageOptions.languageOptions, root, sink); + writeFileHeaders(generatorOptions, root, sink, indent); + generateCppHeader(generatorOptions.languageOptions, root, sink, indent); } else { - generateCppSource(languageOptions.languageOptions, root, sink); + writeFileHeaders(generatorOptions, root, sink, indent); + generateCppSource(generatorOptions.languageOptions, root, sink, indent); + } + } + + @override + void writeFileHeaders(OutputFileOptions generatorOptions, + Root root, StringSink sink, Indent indent) { + final FileType fileType = generatorOptions.fileType; + if (fileType == FileType.header) { + writeCppHeaderHeader( + generatorOptions.languageOptions, root, sink, indent); + } else { + writeCppSourceHeader( + generatorOptions.languageOptions, root, sink, indent); } } } @@ -1049,18 +1066,23 @@ void _writeSystemHeaderIncludeBlock(Indent indent, List headers) { } } -/// Generates the ".h" file for the AST represented by [root] to [sink] with the -/// provided [options] and [headerFileName]. -void generateCppHeader(CppOptions options, Root root, StringSink sink) { - final String? headerFileName = options.headerOutPath; - final Indent indent = Indent(sink); +/// Writes Cpp header file header to sink. +void writeCppHeaderHeader( + CppOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); } indent.writeln('$_commentPrefix $generatedCodeWarning'); indent.writeln('$_commentPrefix $seeAlsoWarning'); indent.addln(''); - final String guardName = _getGuardName(headerFileName, options.namespace); +} + +/// Generates the ".h" file for the AST represented by [root] to [sink] with the +/// provided [options] and [headerFileName]. +void generateCppHeader( + CppOptions options, Root root, StringSink sink, Indent indent) { + final String guardName = + _getGuardName(options.headerIncludePath, options.namespace); indent.writeln('#ifndef $guardName'); indent.writeln('#define $guardName'); @@ -1140,10 +1162,9 @@ void generateCppHeader(CppOptions options, Root root, StringSink sink) { indent.writeln('#endif // $guardName'); } -/// Generates the ".cpp" file for the AST represented by [root] to [sink] with the -/// provided [options]. -void generateCppSource(CppOptions options, Root root, StringSink sink) { - final Indent indent = Indent(sink); +/// Writes Cpp source file header to sink. +void writeCppSourceHeader( + CppOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); } @@ -1152,7 +1173,12 @@ void generateCppSource(CppOptions options, Root root, StringSink sink) { indent.addln(''); indent.addln('#undef _HAS_EXCEPTIONS'); indent.addln(''); +} +/// Generates the ".cpp" file for the AST represented by [root] to [sink] with the +/// provided [options]. +void generateCppSource( + CppOptions options, Root root, StringSink sink, Indent indent) { indent.writeln('#include "${options.headerIncludePath}"'); indent.addln(''); _writeSystemHeaderIncludeBlock(indent, [ diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index e6f685052f1..daf4171754b 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -77,20 +77,30 @@ class DartGenerator extends Generator { /// Generates Dart files with specified [DartOptions] @override - void generate(DartOptions languageOptions, Root root, StringSink sink, - {FileType fileType = FileType.na}) { - assert(fileType == FileType.na); - generateDart(languageOptions, root, sink); + void generate(DartOptions generatorOptions, Root root, StringSink sink) { + final Indent indent = Indent(sink); + + writeFileHeaders(generatorOptions, root, sink, indent); + generateDart(generatorOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + DartOptions generatorOptions, Root root, StringSink sink, Indent indent) { + writeHeader(generatorOptions, root, sink, indent); } /// Generates Dart files for testing with specified [DartOptions] void generateTest(DartOptions languageOptions, Root root, StringSink sink) { + final Indent indent = Indent(sink); final String sourceOutPath = languageOptions.sourceOutPath ?? ''; final String testOutPath = languageOptions.testOutPath ?? ''; + writeTestHeader(languageOptions, root, sink, indent); generateTestDart( languageOptions, root, sink, + indent, sourceOutPath: sourceOutPath, testOutPath: testOutPath, ); @@ -501,25 +511,26 @@ String _addGenericTypesNullable(TypeDeclaration type) { return type.isNullable ? '$genericdType?' : genericdType; } +/// Writes file header to sink. +void writeHeader(DartOptions opt, Root root, StringSink sink, Indent indent) { + if (opt.copyrightHeader != null) { + addLines(indent, opt.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); + indent.writeln( + '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import', + ); + indent.addln(''); +} + /// Generates Dart source code for the given AST represented by [root], /// outputting the code to [sink]. -void generateDart(DartOptions opt, Root root, StringSink sink) { +void generateDart(DartOptions opt, Root root, StringSink sink, Indent indent) { final List customClassNames = root.classes.map((Class x) => x.name).toList(); final List customEnumNames = root.enums.map((Enum x) => x.name).toList(); - final Indent indent = Indent(sink); - - void writeHeader() { - if (opt.copyrightHeader != null) { - addLines(indent, opt.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - indent.writeln( - '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import', - ); - } void writeEnums() { for (final Enum anEnum in root.enums) { @@ -678,7 +689,6 @@ $resultAt != null } } - writeHeader(); writeImports(); writeEnums(); for (final Class klass in root.classes) { @@ -740,18 +750,9 @@ String _posixify(String inputPath) { return context.fromUri(path.toUri(path.absolute(inputPath))); } -/// Generates Dart source code for test support libraries based on the given AST -/// represented by [root], outputting the code to [sink]. [sourceOutPath] is the -/// path of the generated dart code to be tested. [testOutPath] is where the -/// test code will be generated. -void generateTestDart( - DartOptions opt, - Root root, - StringSink sink, { - required String sourceOutPath, - required String testOutPath, -}) { - final Indent indent = Indent(sink); +/// Writes file header to sink. +void writeTestHeader( + DartOptions opt, Root root, StringSink sink, Indent indent) { if (opt.copyrightHeader != null) { addLines(indent, opt.copyrightHeader!, linePrefix: '// '); } @@ -761,6 +762,20 @@ void generateTestDart( '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import', ); indent.writeln('// ignore_for_file: avoid_relative_lib_imports'); +} + +/// Generates Dart source code for test support libraries based on the given AST +/// represented by [root], outputting the code to [sink]. [dartOutPath] is the +/// path of the generated dart code to be tested. [testOutPath] is where the +/// test code will be generated. +void generateTestDart( + DartOptions opt, + Root root, + StringSink sink, + Indent indent, { + required String sourceOutPath, + required String testOutPath, +}) { indent.writeln("import 'dart:async';"); indent.writeln( "import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;", diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index 02667e4a5c9..473e1a3e46f 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -3,11 +3,29 @@ // found in the LICENSE file. import 'ast.dart'; +import 'generator_tools.dart'; /// A superclass of generator classes. /// /// This provides the structure that is common across generators for different languages. abstract class Generator { - /// Generates files for specified language with specified [languageOptions] - void generate(T languageOptions, Root root, StringSink sink); + /// Generates files for specified language with specified [generatorOptions] + /// + /// This method, when overridden, should follow a generic structure that is currently: + /// 1. Create Indent + /// 2. Write File Headers + /// 3. Generate File + void generate( + T generatorOptions, + Root root, + StringSink sink, + ); + + /// Adds specified file headers. + void writeFileHeaders( + T generatorOptions, + Root root, + StringSink sink, + Indent indent, + ); } diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index b1ee06b01e8..577bf8216de 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -9,7 +9,7 @@ import 'dart:mirrors'; import 'ast.dart'; /// The current version of pigeon. This must match the version in pubspec.yaml. -const String pigeonVersion = '5.0.0'; +const String pigeonVersion = '5.0.1'; /// Read all the content from [stdin] to a String. String readStdin() { @@ -510,7 +510,7 @@ enum FileType { na, } -/// Options for [Generator]'s that have multiple output file types. +/// Options for [Generator]s that have multiple output file types. /// /// Specifies which file to write as well as wraps all language options. class OutputFileOptions { diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index daca63876d2..6a18fba04aa 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -92,10 +92,17 @@ class JavaGenerator extends Generator { /// Generates Java files with specified [JavaOptions] @override - void generate(JavaOptions languageOptions, Root root, StringSink sink, - {FileType fileType = FileType.na}) { - assert(fileType == FileType.na); - generateJava(languageOptions, root, sink); + void generate(JavaOptions generatorOptions, Root root, StringSink sink) { + final Indent indent = Indent(sink); + + writeFileHeaders(generatorOptions, root, sink, indent); + generateJava(generatorOptions, root, sink, indent); + } + + @override + void writeFileHeaders( + JavaOptions generatorOptions, Root root, StringSink sink, Indent indent) { + writeHeader(generatorOptions, root, sink, indent); } } @@ -536,22 +543,25 @@ String _castObject( } } +/// Writes file header to sink. +void writeHeader( + JavaOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); + indent.addln(''); +} + /// Generates the ".java" file for the AST represented by [root] to [sink] with the /// provided [options]. -void generateJava(JavaOptions options, Root root, StringSink sink) { +void generateJava( + JavaOptions options, Root root, StringSink sink, Indent indent) { final Set rootClassNameSet = root.classes.map((Class x) => x.name).toSet(); final Set rootEnumNameSet = root.enums.map((Enum x) => x.name).toSet(); - final Indent indent = Indent(sink); - - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - } void writeImports() { indent.writeln('import android.util.Log;'); @@ -766,8 +776,6 @@ void generateJava(JavaOptions options, Root root, StringSink sink) { }'''); } - writeHeader(); - indent.addln(''); if (options.package != null) { indent.writeln('package ${options.package};'); } diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index 18e08c7398a..eed3e6da387 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -72,10 +72,21 @@ class KotlinGenerator extends Generator { /// Generates Kotlin files with specified [KotlinOptions] @override - void generate(KotlinOptions languageOptions, Root root, StringSink sink, - {FileType fileType = FileType.na}) { - assert(fileType == FileType.na); - generateKotlin(languageOptions, root, sink); + void generate( + KotlinOptions generatorOptions, + Root root, + StringSink sink, + ) { + final Indent indent = Indent(sink); + + writeFileHeaders(generatorOptions, root, sink, indent); + generateKotlin(generatorOptions, root, sink, indent); + } + + @override + void writeFileHeaders(KotlinOptions generatorOptions, Root root, + StringSink sink, Indent indent) { + writeHeader(generatorOptions, root, sink, indent); } } @@ -449,28 +460,31 @@ String _nullsafeKotlinTypeForDartType(TypeDeclaration type) { return '${_kotlinTypeForDartType(type)}$nullSafe'; } +/// Writes file header to sink. +void writeHeader( + KotlinOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); + indent.addln(''); +} + /// Generates the ".kotlin" file for the AST represented by [root] to [sink] with the /// provided [options]. -void generateKotlin(KotlinOptions options, Root root, StringSink sink) { +void generateKotlin( + KotlinOptions options, Root root, StringSink sink, Indent indent) { final Set rootClassNameSet = root.classes.map((Class x) => x.name).toSet(); final Set rootEnumNameSet = root.enums.map((Enum x) => x.name).toSet(); - final Indent indent = Indent(sink); HostDatatype getHostDatatype(NamedType field) { return getFieldHostDatatype(field, root.classes, root.enums, (TypeDeclaration x) => _kotlinTypeForBuiltinDartType(x)); } - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - } - void writeImports() { indent.writeln('import android.util.Log'); indent.writeln('import io.flutter.plugin.common.BasicMessageChannel'); @@ -665,8 +679,6 @@ void generateKotlin(KotlinOptions options, Root root, StringSink sink) { }); } - writeHeader(); - indent.addln(''); if (options.package != null) { indent.writeln('package ${options.package}'); } diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 3d7e3a64da2..33922019d2c 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -69,17 +69,32 @@ class ObjcGenerator extends Generator> { /// Instantiates a Objc Generator. ObjcGenerator(); - /// Generates Objc files with specified [OutputFileOptions] + /// Generates Objc header files with specified [ObjcOptions] @override - void generate(OutputFileOptions languageOptions, Root root, + void generate(OutputFileOptions generatorOptions, Root root, StringSink sink) { - final FileType fileType = languageOptions.fileType; - assert(fileType == FileType.header || fileType == FileType.source); + final FileType fileType = generatorOptions.fileType; + final Indent indent = Indent(sink); if (fileType == FileType.header) { - generateObjcHeader(languageOptions.languageOptions, root, sink); + writeFileHeaders(generatorOptions, root, sink, indent); + generateObjcHeader(generatorOptions.languageOptions, root, sink, indent); } else { - generateObjcSource(languageOptions.languageOptions, root, sink); + writeFileHeaders(generatorOptions, root, sink, indent); + generateObjcSource(generatorOptions.languageOptions, root, sink, indent); + } + } + + @override + void writeFileHeaders(OutputFileOptions generatorOptions, + Root root, StringSink sink, Indent indent) { + final FileType fileType = generatorOptions.fileType; + if (fileType == FileType.header) { + writeObjcHeaderHeader( + generatorOptions.languageOptions, root, sink, indent); + } else { + writeObjcSourceHeader( + generatorOptions.languageOptions, root, sink, indent); } } } @@ -551,19 +566,21 @@ void _writeFlutterApiDeclaration( indent.writeln('@end'); } -/// Generates the ".h" file for the AST represented by [root] to [sink] with the -/// provided [options]. -void generateObjcHeader(ObjcOptions options, Root root, StringSink sink) { - final Indent indent = Indent(sink); - - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); +/// Writes Objc header file header to sink. +void writeObjcHeaderHeader( + ObjcOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); + indent.addln(''); +} +/// Generates the ".h" file for the AST represented by [root] to [sink] with the +/// provided [options]. +void generateObjcHeader( + ObjcOptions options, Root root, StringSink sink, Indent indent) { void writeImports() { indent.writeln('#import '); } @@ -592,7 +609,6 @@ void generateObjcHeader(ObjcOptions options, Root root, StringSink sink) { }); } - writeHeader(); writeImports(); writeForwardDeclarations(); indent.writeln(''); @@ -894,22 +910,25 @@ void _writeFlutterApiSource( indent.writeln('@end'); } +/// Writes Objc Source file header to sink. +void writeObjcSourceHeader( + ObjcOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); + indent.addln(''); +} + /// Generates the ".m" file for the AST represented by [root] to [sink] with the /// provided [options]. -void generateObjcSource(ObjcOptions options, Root root, StringSink sink) { - final Indent indent = Indent(sink); +void generateObjcSource( + ObjcOptions options, Root root, StringSink sink, Indent indent) { final List classNames = root.classes.map((Class x) => x.name).toList(); final List enumNames = root.enums.map((Enum x) => x.name).toList(); - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - } - void writeImports() { indent.writeln('#import "${options.headerIncludePath}"'); indent.writeln('#import '); @@ -1026,7 +1045,6 @@ static id GetNullableObjectAtIndex(NSArray* array, NSInteger key) { } } - writeHeader(); writeImports(); indent.writeln(''); writeArcEnforcer(); diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 5082dd19e8e..40f3fee3048 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -456,11 +456,7 @@ class DartTestGeneratorAdapter implements GeneratorAdapter { testOutPath: options.dartTestOut, ); final DartGenerator testGenerator = DartGenerator(); - testGenerator.generateTest( - dartOptionsWithHeader, - root, - sink, - ); + testGenerator.generateTest(dartOptionsWithHeader, root, sink); } @override diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 77fff7e2fac..44532e91f15 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -55,10 +55,16 @@ class SwiftGenerator extends Generator { /// Generates Swift files with specified [SwiftOptions] @override - void generate(SwiftOptions languageOptions, Root root, StringSink sink, - {FileType fileType = FileType.na}) { - assert(fileType == FileType.na); - generateSwift(languageOptions, root, sink); + void generate(SwiftOptions generatorOptions, Root root, StringSink sink) { + final Indent indent = Indent(sink); + writeFileHeaders(generatorOptions, root, sink, indent); + generateSwift(generatorOptions, root, sink, indent); + } + + @override + void writeFileHeaders(SwiftOptions generatorOptions, Root root, + StringSink sink, Indent indent) { + writeHeader(generatorOptions, root, sink, indent); } } @@ -447,28 +453,31 @@ String _nullsafeSwiftTypeForDartType(TypeDeclaration type) { return '${_swiftTypeForDartType(type)}$nullSafe'; } +/// Writes file header to sink. +void writeHeader( + SwiftOptions options, Root root, StringSink sink, Indent indent) { + if (options.copyrightHeader != null) { + addLines(indent, options.copyrightHeader!, linePrefix: '// '); + } + indent.writeln('// $generatedCodeWarning'); + indent.writeln('// $seeAlsoWarning'); + indent.addln(''); +} + /// Generates the ".swift" file for the AST represented by [root] to [sink] with the /// provided [options]. -void generateSwift(SwiftOptions options, Root root, StringSink sink) { +void generateSwift( + SwiftOptions options, Root root, StringSink sink, Indent indent) { final Set rootClassNameSet = root.classes.map((Class x) => x.name).toSet(); final Set rootEnumNameSet = root.enums.map((Enum x) => x.name).toSet(); - final Indent indent = Indent(sink); HostDatatype getHostDatatype(NamedType field) { return getFieldHostDatatype(field, root.classes, root.enums, (TypeDeclaration x) => _swiftTypeForBuiltinDartType(x)); } - void writeHeader() { - if (options.copyrightHeader != null) { - addLines(indent, options.copyrightHeader!, linePrefix: '// '); - } - indent.writeln('// $generatedCodeWarning'); - indent.writeln('// $seeAlsoWarning'); - } - void writeImports() { indent.writeln('import Foundation'); indent.format(''' @@ -637,8 +646,6 @@ import FlutterMacOS }); } - writeHeader(); - indent.addln(''); writeImports(); indent.addln(''); indent.writeln('$_docCommentPrefix Generated class from Pigeon.'); diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart index 4f6c9d14457..94024e73bc7 100644 --- a/packages/pigeon/mock_handler_tester/test/message.dart +++ b/packages/pigeon/mock_handler_tester/test/message.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/mock_handler_tester/test/test.dart b/packages/pigeon/mock_handler_tester/test/test.dart index 9b97826b605..e1644f13686 100644 --- a/packages/pigeon/mock_handler_tester/test/test.dart +++ b/packages/pigeon/mock_handler_tester/test/test.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java index 95b0e2a9509..ea8e343c37f 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon package com.example.alternate_language_test_plugin; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h index 1def5e7af69..5a0de3c68c9 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h @@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon + #import @protocol FlutterBinaryMessenger; @protocol FlutterMessageCodec; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m index 244b1e236c5..2ed0bd7d9e4 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m @@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon + #import "CoreTests.gen.h" #import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart index fe0fe3335ea..c9dee303f5d 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart index e92ab29cebd..4bed42b32dd 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart index 1ff71bfa346..5d4cbd0096e 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart index 88f4611e746..0d151dc54e4 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart index 13fe926bcf1..820749f7bef 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart index be1979c8adf..a050c155e05 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart index 36a569e4f46..a5e4e6b318f 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart index fe0fe3335ea..c9dee303f5d 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt index 61a957c8b55..17d7e9ffeb9 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon package com.example.test_plugin diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift index 844e541a562..bcf93bcfcc8 100644 --- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift index 844e541a562..bcf93bcfcc8 100644 --- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp index 110c75e358d..ea282cff0b6 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon #undef _HAS_EXCEPTIONS diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h index 527a0ff45c8..be5c851721c 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v5.0.0), do not edit directly. +// Autogenerated from Pigeon (v5.0.1), do not edit directly. // See also: https://pub.dev/packages/pigeon -#ifndef PIGEON_CORE_TESTS_PIGEONTEST_H_ -#define PIGEON_CORE_TESTS_PIGEONTEST_H_ +#ifndef PIGEON_CORE_TESTS_GEN_H_CORE_TESTS_PIGEONTEST_H_ +#define PIGEON_CORE_TESTS_GEN_H_CORE_TESTS_PIGEONTEST_H_ #include #include #include @@ -412,4 +412,4 @@ class HostTrivialApi { HostTrivialApi() = default; }; } // namespace core_tests_pigeontest -#endif // PIGEON_CORE_TESTS_PIGEONTEST_H_ +#endif // PIGEON_CORE_TESTS_GEN_H_CORE_TESTS_PIGEONTEST_H_ diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index e4ada89edd1..f2a5a9a6639 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%3Apigeon -version: 5.0.0 # This must match the version in lib/generator_tools.dart +version: 5.0.1 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/pigeon/test/cpp_generator_test.dart b/packages/pigeon/test/cpp_generator_test.dart index 172ce2ea3fe..bbed3a40c88 100644 --- a/packages/pigeon/test/cpp_generator_test.dart +++ b/packages/pigeon/test/cpp_generator_test.dart @@ -4,6 +4,7 @@ import 'package:pigeon/ast.dart'; import 'package:pigeon/cpp_generator.dart'; +import 'package:pigeon/generator_tools.dart'; import 'package:pigeon/pigeon.dart' show Error; import 'package:test/test.dart'; @@ -45,7 +46,13 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Input')); expect(code, contains('class Output')); @@ -53,7 +60,13 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('Input::Input()')); expect(code, contains('Output::Output')); @@ -101,7 +114,13 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); // Method name and argument names should be adjusted. expect(code, contains(' DoSomething(const Input& some_input)')); @@ -116,7 +135,13 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('pointer_input_field')); expect(code, contains('Output::output_field()')); @@ -144,7 +169,17 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate( + generatorOptions, + root, + sink, + ); final String code = sink.toString(); expect( @@ -184,7 +219,13 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( @@ -238,14 +279,26 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains('){'))); expect(code, isNot(contains('const{'))); } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains('){'))); expect(code, isNot(contains('const{'))); @@ -271,7 +324,13 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains(''' #include @@ -286,8 +345,13 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource( - const CppOptions(headerIncludePath: 'a_header.h'), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(headerIncludePath: 'a_header.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains(''' #include "a_header.h" @@ -323,14 +387,26 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(namespace: 'foo'), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(namespace: 'foo'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('namespace foo {')); expect(code, contains('} // namespace foo')); } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(namespace: 'foo'), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(namespace: 'foo'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('namespace foo {')); expect(code, contains('} // namespace foo')); @@ -391,7 +467,13 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); // Getters should return const pointers. expect(code, contains('const bool* nullable_bool()')); @@ -423,7 +505,13 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); // Getters extract optionals. expect(code, @@ -522,7 +610,13 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); // POD getters should return copies references. expect(code, contains('bool non_nullable_bool()')); @@ -547,7 +641,13 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); // Getters just return the value. expect(code, contains('return non_nullable_bool_;')); @@ -645,7 +745,13 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, contains('ErrorOr> ReturnNullableBool()')); @@ -750,7 +856,13 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('ErrorOr ReturnBool()')); expect(code, contains('ErrorOr ReturnInt()')); @@ -832,7 +944,13 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -846,7 +964,13 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); // Most types should just use get_if, since the parameter is a pointer, // and get_if will automatically handle null values (since a null @@ -963,7 +1087,13 @@ void main() { ], enums: []); { final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -977,7 +1107,13 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); // Most types should extract references. Since the type is non-nullable, // there's only one possible type. @@ -1037,7 +1173,13 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); // A bare 'auto' here would create a copy, not a reference, which is // ineffecient. @@ -1149,7 +1291,13 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(headerIncludePath: 'foo'), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(headerIncludePath: 'foo'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('//$comment')); @@ -1184,7 +1332,13 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : public flutter::StandardCodecSerializer'))); }); @@ -1226,7 +1380,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateCppHeader(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains(' : public flutter::StandardCodecSerializer')); }); @@ -1295,7 +1455,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateCppSource(const CppOptions(), root, sink); + final CppGenerator generator = CppGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const CppOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains('reply(wrap'))); expect(code, contains('reply(flutter::EncodableValue(')); diff --git a/packages/pigeon/test/dart_generator_test.dart b/packages/pigeon/test/dart_generator_test.dart index c77e5d89e37..15ce9e09ac4 100644 --- a/packages/pigeon/test/dart_generator_test.dart +++ b/packages/pigeon/test/dart_generator_test.dart @@ -29,7 +29,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' dataType1? field1;')); @@ -49,7 +50,8 @@ void main() { enums: [anEnum], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum Foobar')); expect(code, contains(' one,')); @@ -92,7 +94,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('Future doSomething(Input arg_input)')); @@ -118,7 +121,8 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('Future add(int arg_x, int arg_y)')); @@ -145,7 +149,8 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('int add(int x, int y)')); @@ -182,7 +187,8 @@ void main() { ) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -224,7 +230,8 @@ void main() { ) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -276,7 +283,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('abstract class Api')); expect(code, contains('static void setup(Api')); @@ -310,7 +318,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doSomething')); expect(code, contains('return;')); @@ -343,7 +352,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); // The next line verifies that we're not setting a variable to the value of "doSomething", but // ignores the line where we assert the value of the argument isn't null, since on that line @@ -373,7 +383,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('output.*=.*doSomething[(][)]')); expect(code, contains('Output doSomething();')); @@ -415,7 +426,8 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum1?.index,')); expect(code, contains('? Enum.values[result[0]! as int]')); @@ -442,7 +454,8 @@ void main() { ]) ]); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum Foo {')); expect(code, contains('Future bar(Foo? arg_foo) async')); @@ -485,7 +498,8 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('enum1.index,')); expect(code, contains('enum1: Enum.values[result[0]! as int]')); @@ -512,7 +526,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('channel.send[(]null[)]')); }); @@ -570,7 +585,8 @@ void main() { ], enums: []); final StringBuffer mainCodeSink = StringBuffer(); final StringBuffer testCodeSink = StringBuffer(); - generateDart(DartOptions(), root, mainCodeSink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, mainCodeSink); final String mainCode = mainCodeSink.toString(); expect(mainCode, isNot(contains(r"import 'fo\'o.dart';"))); expect(mainCode, contains('class Api {')); @@ -578,12 +594,15 @@ void main() { expect(mainCode, isNot(contains('.ApiMock.doSomething'))); expect(mainCode, isNot(contains("'${Keys.result}': output"))); expect(mainCode, isNot(contains('return [];'))); - generateTestDart( - DartOptions(), + + final DartGenerator testGenerator = DartGenerator(); + testGenerator.generateTest( + DartOptions( + sourceOutPath: "fo'o.dart", + testOutPath: 'test.dart', + ), root, testCodeSink, - sourceOutPath: "fo'o.dart", - testOutPath: 'test.dart', ); final String testCode = testCodeSink.toString(); expect(testCode, contains(r"import 'fo\'o.dart';")); @@ -631,7 +650,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('abstract class Api')); expect(code, contains('Future doSomething(Input arg0);')); @@ -675,7 +695,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(matches('=.s*doSomething'))); expect(code, contains('await api.doSomething(')); @@ -719,7 +740,8 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, matches('Output.*doSomething.*Input')); @@ -747,7 +769,8 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, matches('channel.send[(]null[)]')); }); @@ -759,7 +782,9 @@ void main() { test('header', () { final Root root = Root(apis: [], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateDart( + + final DartGenerator generator = DartGenerator(); + generator.generate( DartOptions(copyrightHeader: makeIterable('hello world')), root, sink, @@ -788,7 +813,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' List? field1;')); @@ -815,7 +841,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains(' Map? field1;')); @@ -844,7 +871,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doit(List arg')); }); @@ -872,7 +900,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('doit(List arg')); }); @@ -896,7 +925,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future> doit(')); expect(code, @@ -931,7 +961,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('List doit(')); expect( @@ -958,7 +989,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit()')); expect(code, contains('return (replyList[0] as int?);')); @@ -983,7 +1015,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future?> doit()')); expect(code, @@ -1008,7 +1041,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit()')); expect(code, contains('return (replyList[0] as int?);')); @@ -1031,7 +1065,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('int? doit();')); expect(code, contains('final int? output = api.doit();')); @@ -1055,7 +1090,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit();')); expect(code, contains('final int? output = await api.doit();')); @@ -1078,7 +1114,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect( code, @@ -1107,7 +1144,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('Future doit(int? arg_foo) async {')); }); @@ -1133,7 +1171,8 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('void doit(int? foo);')); }); @@ -1150,12 +1189,14 @@ name: foobar final Root root = Root(classes: [], apis: [], enums: []); final StringBuffer sink = StringBuffer(); - generateTestDart( - DartOptions(), + final DartGenerator testGenerator = DartGenerator(); + testGenerator.generateTest( + DartOptions( + sourceOutPath: path.join(foo.path, 'bar.dart'), + testOutPath: path.join(tempDir.path, 'test', 'bar_test.dart'), + ), root, sink, - sourceOutPath: path.join(foo.path, 'bar.dart'), - testOutPath: path.join(tempDir.path, 'test', 'bar_test.dart'), ); final String code = sink.toString(); expect(code, contains("import 'package:foobar/foo/bar.dart';")); @@ -1238,7 +1279,8 @@ name: foobar ], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('///$comment')); @@ -1273,7 +1315,8 @@ name: foobar enums: [], ); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, isNot(contains('extends StandardMessageCodec'))); expect(code, contains('StandardMessageCodec')); @@ -1316,7 +1359,8 @@ name: foobar ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateDart(DartOptions(), root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(DartOptions(), root, sink); final String code = sink.toString(); expect(code, contains('extends StandardMessageCodec')); }); @@ -1354,13 +1398,17 @@ name: foobar ], ); final StringBuffer sink = StringBuffer(); - generateTestDart( - DartOptions(), + + final DartGenerator testGenerator = DartGenerator(); + testGenerator.generateTest( + DartOptions( + sourceOutPath: 'code.dart', + testOutPath: 'test.dart', + ), root, sink, - sourceOutPath: 'code.dart', - testOutPath: 'test.dart', ); + final String testCode = sink.toString(); expect( testCode, diff --git a/packages/pigeon/test/java_generator_test.dart b/packages/pigeon/test/java_generator_test.dart index bfcea98cfe2..f2a25288754 100644 --- a/packages/pigeon/test/java_generator_test.dart +++ b/packages/pigeon/test/java_generator_test.dart @@ -27,7 +27,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public class Messages')); expect(code, contains('public static class Foobar')); @@ -55,7 +56,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public enum Foobar')); expect(code, contains(' ONE(0),')); @@ -86,7 +88,8 @@ void main() { final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages', package: 'com.google.foobar'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('package com.google.foobar;')); expect(code, contains('ArrayList toList()')); @@ -129,7 +132,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public interface Api')); expect(code, matches('Output.*doSomething.*Input')); @@ -200,7 +204,8 @@ void main() { final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('private @Nullable Boolean aBool;')); expect(code, contains('private @Nullable Long aInt;')); @@ -249,7 +254,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public static class Api')); expect(code, matches('doSomething.*Input.*Output')); @@ -283,7 +289,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, isNot(matches('=.*doSomething'))); expect(code, contains('doSomething(')); @@ -317,7 +324,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('Reply')); expect(code, contains('callback.reply(null)')); @@ -345,7 +353,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('Output doSomething()')); expect(code, contains('api.doSomething()')); @@ -373,7 +382,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doSomething(Reply')); expect(code, contains('channel.send(null')); @@ -392,7 +402,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public static class Foobar')); expect(code, contains('private @Nullable List field1;')); @@ -411,7 +422,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public static class Foobar')); expect(code, contains('private @Nullable Map field1;')); @@ -447,7 +459,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public class Messages')); expect(code, contains('public static class Outer')); @@ -498,7 +511,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public interface Api')); expect(code, contains('public interface Result {')); @@ -549,7 +563,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public static class Api')); expect(code, matches('doSomething.*Input.*Output')); @@ -582,7 +597,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public enum Enum1')); expect(code, contains(' ONE(0),')); @@ -621,7 +637,8 @@ void main() { ]); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('public enum Foo')); expect( @@ -641,7 +658,8 @@ void main() { className: 'Messages', copyrightHeader: makeIterable('hello world'), ); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -667,7 +685,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains('List field1;')); @@ -695,7 +714,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Foobar')); expect(code, contains('Map field1;')); @@ -725,7 +745,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doit(@NonNull List arg')); }); @@ -754,7 +775,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doit(@NonNull List arg')); }); @@ -779,7 +801,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('List doit(')); expect(code, contains('List output =')); @@ -805,7 +828,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doit(Reply> callback)')); expect(code, contains('List output =')); @@ -828,7 +852,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('doit(Reply callback)')); expect( @@ -858,7 +883,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Messages')); expect(code, contains('Long add(@NonNull Long x, @NonNull Long y)')); @@ -889,7 +915,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Api'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('Object xArg = args.get(0)')); }); @@ -915,7 +942,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Messages')); expect(code, contains('BasicMessageChannel channel')); @@ -947,7 +975,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect( code, @@ -973,7 +1002,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('@Nullable Long doit();')); }); @@ -997,7 +1027,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); // Java doesn't accept nullability annotations in type arguments. expect(code, contains('Result')); @@ -1025,7 +1056,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains(' void doit(@Nullable Long foo);')); }); @@ -1052,7 +1084,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1083,7 +1116,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1108,7 +1142,8 @@ void main() { final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages', useGeneratedAnnotation: true); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains('@javax.annotation.Generated("dev.flutter.pigeon")')); }); @@ -1125,7 +1160,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains('@javax.annotation.Generated("dev.flutter.pigeon")'))); @@ -1207,7 +1243,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); for (final String comment in comments) { // This regex finds the comment only between the open and close comment block @@ -1247,7 +1284,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains(' extends StandardMessageCodec'))); expect(code, contains('StandardMessageCodec')); @@ -1291,7 +1329,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const JavaOptions javaOptions = JavaOptions(className: 'Messages'); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); final String code = sink.toString(); expect(code, contains(' extends StandardMessageCodec')); }); diff --git a/packages/pigeon/test/kotlin_generator_test.dart b/packages/pigeon/test/kotlin_generator_test.dart index 4653410837e..96056c1b1b1 100644 --- a/packages/pigeon/test/kotlin_generator_test.dart +++ b/packages/pigeon/test/kotlin_generator_test.dart @@ -27,7 +27,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar (')); expect(code, contains('val field1: Long? = null')); @@ -50,7 +51,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum class Foobar(val raw: Int) {')); expect(code, contains('ONE(0)')); @@ -78,7 +80,8 @@ void main() { ]); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum class Foo(val raw: Int) {')); expect(code, contains('val fooArg = Foo.ofRaw(args[0] as Int)')); @@ -124,7 +127,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('interface Api')); expect(code, contains('fun doSomething(input: Input): Output')); @@ -213,7 +217,8 @@ void main() { final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('val aBool: Boolean? = null')); expect(code, contains('val aInt: Long? = null')); @@ -265,7 +270,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Api(private val binaryMessenger: BinaryMessenger)')); @@ -302,7 +308,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, isNot(matches('.*doSomething(.*) ->'))); expect(code, matches('doSomething(.*)')); @@ -338,7 +345,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('callback: () -> Unit')); expect(code, contains('callback()')); @@ -367,7 +375,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doSomething(): Output')); expect(code, contains('wrapped = listOf(api.doSomething())')); @@ -398,7 +407,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doSomething(callback: (Output) -> Unit)')); expect(code, contains('channel.send(null)')); @@ -418,7 +428,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar')); expect(code, contains('val field1: List? = null')); @@ -438,7 +449,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar')); expect(code, contains('val field1: Map? = null')); @@ -476,7 +488,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Outer')); expect(code, contains('data class Nested')); @@ -529,7 +542,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('interface Api')); expect(code, contains('api.doSomething(argArg) {')); @@ -577,7 +591,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, matches('fun doSomething.*Input.*callback.*Output.*Unit')); @@ -610,7 +625,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum class Enum1(val raw: Int)')); expect(code, contains('ONE(0)')); @@ -627,7 +643,8 @@ void main() { final KotlinOptions kotlinOptions = KotlinOptions( copyrightHeader: makeIterable('hello world'), ); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -654,7 +671,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar')); expect(code, contains('val field1: List')); @@ -683,7 +701,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('data class Foobar')); expect(code, contains('val field1: Map')); @@ -714,7 +733,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(arg: List')); }); @@ -744,7 +764,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(argArg: List')); }); @@ -769,7 +790,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(): List')); expect(code, contains('wrapped = listOf(api.doit())')); @@ -796,7 +818,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(callback: (List) -> Unit')); expect(code, contains('val result = it as List')); @@ -824,7 +847,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun add(x: Long, y: Long): Long')); expect(code, contains('val args = message as List')); @@ -861,7 +885,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('val channel = BasicMessageChannel')); expect(code, contains('val result = it as Long')); @@ -889,7 +914,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(): Long?')); }); @@ -913,7 +939,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(callback: (Long?) -> Unit')); }); @@ -940,7 +967,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect( code, @@ -970,7 +998,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('fun doit(fooArg: Long?, callback: () -> Unit')); }); @@ -1005,7 +1034,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains('val input: String\n')); }); @@ -1086,7 +1116,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); for (final String comment in comments) { // This regex finds the comment only between the open and close comment block @@ -1126,7 +1157,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : StandardMessageCodec() '))); expect(code, contains('StandardMessageCodec')); @@ -1170,7 +1202,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const KotlinOptions kotlinOptions = KotlinOptions(); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); final String code = sink.toString(); expect(code, contains(' : StandardMessageCodec() ')); }); diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index aeb2db68e26..c6b45fd4d43 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:pigeon/ast.dart'; +import 'package:pigeon/generator_tools.dart'; import 'package:pigeon/objc_generator.dart'; import 'package:pigeon/pigeon_lib.dart'; import 'package:test/test.dart'; @@ -17,7 +18,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, matches('@property.*NSString.*field1')); @@ -32,8 +39,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Foobar')); @@ -50,7 +62,13 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, Enum1) {')); expect(code, contains(' Enum1One = 0,')); @@ -68,7 +86,13 @@ void main() { ) ]); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(prefix: 'PREFIX'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(prefix: 'PREFIX'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, PREFIXEnum1) {')); expect(code, contains(' PREFIXEnum1One = 0,')); @@ -104,8 +128,13 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Foobar')); @@ -138,13 +167,25 @@ void main() { const ObjcOptions options = ObjcOptions(headerIncludePath: 'foo.h', prefix: 'AC'); { - generateObjcHeader(options, root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: options, + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('typedef NS_ENUM(NSUInteger, ACFoo)')); expect(code, contains(':(ACFoo)foo error:')); } { - generateObjcSource(options, root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: options, + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -207,8 +248,13 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@property(nonatomic, assign) Enum1 enum1')); }); @@ -240,7 +286,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface Input')); expect(code, contains('@interface Output')); @@ -279,8 +331,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('#import "foo.h"')); expect(code, contains('@implementation Input')); @@ -327,8 +384,13 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, contains('@class FlutterStandardTypedData;')); @@ -356,8 +418,13 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@implementation Foobar')); expect(code, @@ -378,8 +445,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@property(nonatomic, strong, nullable) Input * nested;')); @@ -399,8 +471,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -419,7 +496,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(prefix: 'ABC'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface ABCFoobar')); }); @@ -433,7 +516,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(prefix: 'ABC'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@implementation ABCFoobar')); }); @@ -467,7 +556,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(prefix: 'ABC'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, matches('property.*ABCInput')); expect(code, matches('ABCNested.*doSomething.*ABCInput')); @@ -503,7 +598,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(prefix: 'ABC'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('ABCInput fromList')); expect(code, matches(r'ABCInput.*=.*args.*0.*\;')); @@ -539,8 +640,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface Api : NSObject')); expect( @@ -579,8 +685,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h'), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(headerIncludePath: 'foo.h'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@implementation Api')); expect(code, matches('void.*doSomething.*Input.*Output.*{')); @@ -609,10 +720,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('(void)doSomething:')); }); @@ -640,10 +755,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, isNot(matches('=.*doSomething'))); expect(code, matches('[.*doSomething:.*]')); @@ -673,10 +792,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('completion:(void(^)(NSError *_Nullable))')); }); @@ -704,10 +827,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('completion:(void(^)(NSError *_Nullable))')); expect(code, contains('completion(nil)')); @@ -730,10 +857,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, matches('ABCOutput.*doSomethingWithError:[(]FlutterError')); }); @@ -755,10 +886,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, matches('output.*=.*api doSomethingWithError:&error')); }); @@ -780,10 +915,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -808,10 +947,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -829,7 +972,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, matches('@property.*NSArray.*field1')); @@ -844,7 +993,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, matches('@property.*NSDictionary.*field1')); @@ -865,7 +1020,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect( @@ -894,7 +1055,13 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('(NSDictionary *)foo')); }); @@ -928,10 +1095,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -969,10 +1140,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -998,10 +1173,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1020,10 +1199,14 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1061,10 +1244,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1101,10 +1288,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1123,10 +1314,14 @@ void main() { ]) ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1152,10 +1347,14 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1170,14 +1369,16 @@ void main() { test('source copyright', () { final Root root = Root(apis: [], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource( - ObjcOptions( + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: ObjcOptions( headerIncludePath: 'foo.h', prefix: 'ABC', copyrightHeader: makeIterable('hello world')), - root, - sink, ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -1185,14 +1386,16 @@ void main() { test('header copyright', () { final Root root = Root(apis: [], classes: [], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - ObjcOptions( + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: ObjcOptions( headerIncludePath: 'foo.h', prefix: 'ABC', copyrightHeader: makeIterable('hello world')), - root, - sink, ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -1217,10 +1420,14 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('NSArray * field1')); }); @@ -1249,19 +1456,27 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1294,19 +1509,27 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *)arg')); } @@ -1342,10 +1565,14 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('doitArg:(NSArray *> *)arg')); } @@ -1371,20 +1598,28 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, contains('- (nullable NSArray *)doitWithError:')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('NSArray *output =')); } @@ -1410,20 +1645,28 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, contains('doitWithCompletion:(void(^)(NSArray *')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, contains('doitWithCompletion:(void(^)(NSArray *')); @@ -1451,10 +1694,14 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1463,10 +1710,14 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('NSArray *args = message;')); expect(code, @@ -1500,10 +1751,14 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1512,10 +1767,14 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('NSArray *args = message;')); expect(code, @@ -1547,10 +1806,14 @@ void main() { ], classes: [], enums: []); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1559,10 +1822,14 @@ void main() { } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - root, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1605,19 +1872,27 @@ void main() { final Root divideRoot = getDivideRoot(ApiLocation.host); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - divideRoot, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, divideRoot, sink); final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*error.*;')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - divideRoot, - sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), + ); + generator.generate(generatorOptions, divideRoot, sink); final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*error.*;')); } @@ -1627,21 +1902,27 @@ void main() { final Root divideRoot = getDivideRoot(ApiLocation.flutter); { final StringBuffer sink = StringBuffer(); - generateObjcHeader( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - divideRoot, - sink, + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), ); + generator.generate(generatorOptions, divideRoot, sink); final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*completion.*;')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource( - const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), - divideRoot, - sink, + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: + const ObjcOptions(headerIncludePath: 'foo.h', prefix: 'ABC'), ); + generator.generate(generatorOptions, divideRoot, sink); final String code = sink.toString(); expect(code, matches('divideValue:.*by:.*completion.*{')); } @@ -1656,7 +1937,13 @@ void main() { ]), ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('@interface Foobar')); expect(code, contains('@property(nonatomic, copy) NSString * field1')); @@ -1679,7 +1966,13 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1704,7 +1997,13 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, matches(r'doitWithCompletion.*NSNumber \*_Nullable')); }); @@ -1726,7 +2025,13 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, matches(r'nullable NSNumber.*doitWithError')); }); @@ -1753,13 +2058,25 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('doitFoo:(nullable NSNumber *)foo')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('NSNumber *arg_foo = GetNullableObjectAtIndex(args, 0);')); @@ -1788,13 +2105,25 @@ void main() { ); { final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('doitFoo:(nullable NSNumber *)foo')); } { final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains('- (void)doitFoo:(nullable NSNumber *)arg_foo')); } @@ -1818,7 +2147,13 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect( code, @@ -1902,7 +2237,13 @@ void main() { ], ); final StringBuffer sink = StringBuffer(); - generateObjcHeader(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.header, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('///$comment')); @@ -1937,7 +2278,13 @@ void main() { enums: [], ); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains(' : FlutterStandardReader'))); }); @@ -1979,7 +2326,13 @@ void main() { ]) ], enums: []); final StringBuffer sink = StringBuffer(); - generateObjcSource(const ObjcOptions(), root, sink); + final ObjcGenerator generator = ObjcGenerator(); + final OutputFileOptions generatorOptions = + OutputFileOptions( + fileType: FileType.source, + languageOptions: const ObjcOptions(), + ); + generator.generate(generatorOptions, root, sink); final String code = sink.toString(); expect(code, contains(' : FlutterStandardReader')); }); diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 64c4af7b5ab..3d5c706bf41 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -938,10 +938,10 @@ abstract class Api { dartTestOut: 'stdout', dartOut: 'stdout', ); - final DartTestGeneratorAdapter dartGeneratorAdapter = + final DartTestGeneratorAdapter dartTestGeneratorAdapter = DartTestGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - dartGeneratorAdapter.generate(buffer, options, root, FileType.source); + dartTestGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); diff --git a/packages/pigeon/test/swift_generator_test.dart b/packages/pigeon/test/swift_generator_test.dart index 74c8aad15ca..305ca203fe7 100644 --- a/packages/pigeon/test/swift_generator_test.dart +++ b/packages/pigeon/test/swift_generator_test.dart @@ -26,7 +26,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: Int32? = nil')); @@ -49,7 +50,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum Foobar: Int')); expect(code, contains(' case one = 0')); @@ -77,7 +79,8 @@ void main() { ]); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum Foo: Int')); expect(code, contains('let fooArg = Foo(rawValue: args[0] as! Int)!')); @@ -120,7 +123,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('protocol Api')); expect(code, matches('func doSomething.*Input.*Output')); @@ -183,7 +187,8 @@ void main() { final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('var aBool: Bool? = nil')); expect(code, contains('var aInt: Int32? = nil')); @@ -232,7 +237,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, contains('init(binaryMessenger: FlutterBinaryMessenger)')); @@ -267,7 +273,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, isNot(matches('.*doSomething(.*) ->'))); expect(code, matches('doSomething(.*)')); @@ -301,7 +308,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('completion: @escaping () -> Void')); expect(code, contains('completion()')); @@ -329,7 +337,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doSomething() -> Output')); expect(code, contains('let result = api.doSomething()')); @@ -358,7 +367,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doSomething(completion: @escaping (Output) -> Void)')); @@ -378,7 +388,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: [Any?]? = nil')); @@ -397,7 +408,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: [AnyHashable: Any?]? = nil')); @@ -433,7 +445,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Outer')); expect(code, contains('struct Nested')); @@ -481,7 +494,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('protocol Api')); expect(code, contains('api.doSomething(arg: argArg) { result in')); @@ -526,7 +540,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('class Api')); expect(code, matches('func doSomething.*Input.*completion.*Output.*Void')); @@ -558,7 +573,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('enum Enum1: Int')); expect(code, contains('case one = 0')); @@ -575,7 +591,8 @@ void main() { final SwiftOptions swiftOptions = SwiftOptions( copyrightHeader: makeIterable('hello world'), ); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, startsWith('// hello world')); }); @@ -601,7 +618,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: [Int32?]')); @@ -629,7 +647,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('struct Foobar')); expect(code, contains('var field1: [String?: String?]')); @@ -659,7 +678,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit(arg: [Int32?]')); }); @@ -688,7 +708,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit(arg argArg: [Int32?]')); }); @@ -713,7 +734,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit() -> [Int32?]')); expect(code, contains('let result = api.doit()')); @@ -740,7 +762,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect( code, contains('func doit(completion: @escaping ([Int32?]) -> Void')); @@ -769,7 +792,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func add(x: Int32, y: Int32) -> Int32')); expect(code, contains('let args = message as! [Any?]')); @@ -800,7 +824,8 @@ void main() { ], classes: [], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('let channel = FlutterBasicMessageChannel')); expect(code, contains('let result = response as! Int32')); @@ -830,7 +855,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit() -> Int32?')); }); @@ -854,7 +880,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('func doit(completion: @escaping (Int32?) -> Void')); }); @@ -881,7 +908,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('let fooArg = args[0] as? Int32')); }); @@ -908,7 +936,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect( code, @@ -944,7 +973,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains('var input: String\n')); }); @@ -1025,7 +1055,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); for (final String comment in comments) { expect(code, contains('///$comment')); @@ -1061,7 +1092,8 @@ void main() { ); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, isNot(contains(': FlutterStandardReader '))); }); @@ -1104,7 +1136,8 @@ void main() { ], enums: []); final StringBuffer sink = StringBuffer(); const SwiftOptions swiftOptions = SwiftOptions(); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); final String code = sink.toString(); expect(code, contains(': FlutterStandardReader ')); }); From 3a01adec3b3fc6ec607d9dad820c66e1c560af77 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 6 Jan 2023 16:43:18 -0800 Subject: [PATCH 44/45] changelog --- packages/pigeon/CHANGELOG.md | 4 ++++ packages/pigeon/lib/generator_tools.dart | 2 +- packages/pigeon/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 394a84a7f80..235f434d9cf 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.2 + +* Adds writeImports method to Generator classes. + ## 5.0.1 * Adds writeHeaders method to Generator classes and updates tests to use new Generators. diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index 577bf8216de..e3016ad19af 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -9,7 +9,7 @@ import 'dart:mirrors'; import 'ast.dart'; /// The current version of pigeon. This must match the version in pubspec.yaml. -const String pigeonVersion = '5.0.1'; +const String pigeonVersion = '5.0.2'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index f2a5a9a6639..3e1b364ac62 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%3Apigeon -version: 5.0.1 # This must match the version in lib/generator_tools.dart +version: 5.0.2 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.12.0 <3.0.0" From 02fd734a60a6588ba410e6fcdea67b492306cc15 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 6 Jan 2023 17:22:40 -0800 Subject: [PATCH 45/45] prologue --- packages/pigeon/lib/cpp_generator.dart | 14 +++++++------- packages/pigeon/lib/dart_generator.dart | 8 ++++---- packages/pigeon/lib/generator.dart | 2 +- packages/pigeon/lib/java_generator.dart | 8 ++++---- packages/pigeon/lib/kotlin_generator.dart | 8 ++++---- packages/pigeon/lib/objc_generator.dart | 14 +++++++------- packages/pigeon/lib/swift_generator.dart | 8 ++++---- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 82fb8bf62b7..d2cd209c0d9 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -84,23 +84,23 @@ class CppGenerator extends Generator> { final Indent indent = Indent(sink); if (fileType == FileType.header) { - writeFileHeaders(generatorOptions, root, sink, indent); + writeFilePrologue(generatorOptions, root, sink, indent); generateCppHeader(generatorOptions.languageOptions, root, sink, indent); } else { - writeFileHeaders(generatorOptions, root, sink, indent); + writeFilePrologue(generatorOptions, root, sink, indent); generateCppSource(generatorOptions.languageOptions, root, sink, indent); } } @override - void writeFileHeaders(OutputFileOptions generatorOptions, + void writeFilePrologue(OutputFileOptions generatorOptions, Root root, StringSink sink, Indent indent) { final FileType fileType = generatorOptions.fileType; if (fileType == FileType.header) { - writeCppHeaderHeader( + writeCppHeaderPrologue( generatorOptions.languageOptions, root, sink, indent); } else { - writeCppSourceHeader( + writeCppSourcePrologue( generatorOptions.languageOptions, root, sink, indent); } } @@ -1067,7 +1067,7 @@ void _writeSystemHeaderIncludeBlock(Indent indent, List headers) { } /// Writes Cpp header file header to sink. -void writeCppHeaderHeader( +void writeCppHeaderPrologue( CppOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); @@ -1163,7 +1163,7 @@ void generateCppHeader( } /// Writes Cpp source file header to sink. -void writeCppSourceHeader( +void writeCppSourcePrologue( CppOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index daf4171754b..724a1dfc1a8 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -80,14 +80,14 @@ class DartGenerator extends Generator { void generate(DartOptions generatorOptions, Root root, StringSink sink) { final Indent indent = Indent(sink); - writeFileHeaders(generatorOptions, root, sink, indent); + writeFilePrologue(generatorOptions, root, sink, indent); generateDart(generatorOptions, root, sink, indent); } @override - void writeFileHeaders( + void writeFilePrologue( DartOptions generatorOptions, Root root, StringSink sink, Indent indent) { - writeHeader(generatorOptions, root, sink, indent); + writePrologue(generatorOptions, root, sink, indent); } /// Generates Dart files for testing with specified [DartOptions] @@ -512,7 +512,7 @@ String _addGenericTypesNullable(TypeDeclaration type) { } /// Writes file header to sink. -void writeHeader(DartOptions opt, Root root, StringSink sink, Indent indent) { +void writePrologue(DartOptions opt, Root root, StringSink sink, Indent indent) { if (opt.copyrightHeader != null) { addLines(indent, opt.copyrightHeader!, linePrefix: '// '); } diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index 473e1a3e46f..67e2fdbd602 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -22,7 +22,7 @@ abstract class Generator { ); /// Adds specified file headers. - void writeFileHeaders( + void writeFilePrologue( T generatorOptions, Root root, StringSink sink, diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index 6a18fba04aa..84357703b15 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -95,14 +95,14 @@ class JavaGenerator extends Generator { void generate(JavaOptions generatorOptions, Root root, StringSink sink) { final Indent indent = Indent(sink); - writeFileHeaders(generatorOptions, root, sink, indent); + writeFilePrologue(generatorOptions, root, sink, indent); generateJava(generatorOptions, root, sink, indent); } @override - void writeFileHeaders( + void writeFilePrologue( JavaOptions generatorOptions, Root root, StringSink sink, Indent indent) { - writeHeader(generatorOptions, root, sink, indent); + writePrologue(generatorOptions, root, sink, indent); } } @@ -544,7 +544,7 @@ String _castObject( } /// Writes file header to sink. -void writeHeader( +void writePrologue( JavaOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index eed3e6da387..5e47a152ebc 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -79,14 +79,14 @@ class KotlinGenerator extends Generator { ) { final Indent indent = Indent(sink); - writeFileHeaders(generatorOptions, root, sink, indent); + writeFilePrologue(generatorOptions, root, sink, indent); generateKotlin(generatorOptions, root, sink, indent); } @override - void writeFileHeaders(KotlinOptions generatorOptions, Root root, + void writeFilePrologue(KotlinOptions generatorOptions, Root root, StringSink sink, Indent indent) { - writeHeader(generatorOptions, root, sink, indent); + writePrologue(generatorOptions, root, sink, indent); } } @@ -461,7 +461,7 @@ String _nullsafeKotlinTypeForDartType(TypeDeclaration type) { } /// Writes file header to sink. -void writeHeader( +void writePrologue( KotlinOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index 33922019d2c..25e06b98f42 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -77,23 +77,23 @@ class ObjcGenerator extends Generator> { final Indent indent = Indent(sink); if (fileType == FileType.header) { - writeFileHeaders(generatorOptions, root, sink, indent); + writeFilePrologue(generatorOptions, root, sink, indent); generateObjcHeader(generatorOptions.languageOptions, root, sink, indent); } else { - writeFileHeaders(generatorOptions, root, sink, indent); + writeFilePrologue(generatorOptions, root, sink, indent); generateObjcSource(generatorOptions.languageOptions, root, sink, indent); } } @override - void writeFileHeaders(OutputFileOptions generatorOptions, + void writeFilePrologue(OutputFileOptions generatorOptions, Root root, StringSink sink, Indent indent) { final FileType fileType = generatorOptions.fileType; if (fileType == FileType.header) { - writeObjcHeaderHeader( + writeObjcHeaderPrologue( generatorOptions.languageOptions, root, sink, indent); } else { - writeObjcSourceHeader( + writeObjcSourcePrologue( generatorOptions.languageOptions, root, sink, indent); } } @@ -567,7 +567,7 @@ void _writeFlutterApiDeclaration( } /// Writes Objc header file header to sink. -void writeObjcHeaderHeader( +void writeObjcHeaderPrologue( ObjcOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); @@ -911,7 +911,7 @@ void _writeFlutterApiSource( } /// Writes Objc Source file header to sink. -void writeObjcSourceHeader( +void writeObjcSourcePrologue( ObjcOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// '); diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 44532e91f15..a55be7090b8 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -57,14 +57,14 @@ class SwiftGenerator extends Generator { @override void generate(SwiftOptions generatorOptions, Root root, StringSink sink) { final Indent indent = Indent(sink); - writeFileHeaders(generatorOptions, root, sink, indent); + writeFilePrologue(generatorOptions, root, sink, indent); generateSwift(generatorOptions, root, sink, indent); } @override - void writeFileHeaders(SwiftOptions generatorOptions, Root root, + void writeFilePrologue(SwiftOptions generatorOptions, Root root, StringSink sink, Indent indent) { - writeHeader(generatorOptions, root, sink, indent); + writePrologue(generatorOptions, root, sink, indent); } } @@ -454,7 +454,7 @@ String _nullsafeSwiftTypeForDartType(TypeDeclaration type) { } /// Writes file header to sink. -void writeHeader( +void writePrologue( SwiftOptions options, Root root, StringSink sink, Indent indent) { if (options.copyrightHeader != null) { addLines(indent, options.copyrightHeader!, linePrefix: '// ');