diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index e286a9c297a..2af203239b6 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.0 + +* Creates new Generator classes for each language. + ## 4.2.16 * [swift] Fixes warnings with `Object` parameters. diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 7e66600fa49..cddefacfc79 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; @@ -21,14 +22,15 @@ const String _defaultCodecSerializer = 'flutter::StandardCodecSerializer'; class CppOptions { /// Creates a [CppOptions] object const CppOptions({ - this.header, + this.headerIncludePath, this.namespace, this.copyrightHeader, + 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; @@ -36,13 +38,17 @@ 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? 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?, + headerOutPath: map['cppHeaderOut'] as String?, ); } @@ -50,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!, }; @@ -64,6 +70,25 @@ class CppOptions { } } +/// Class that manages all Cpp code generation. +class CppGenerator extends Generator> { + /// Instantiates a Cpp Generator. + CppGenerator(); + + /// Generates Cpp files with specified [OutputFileOptions] + @override + void generate(OutputFileOptions languageOptions, Root root, + StringSink sink) { + final FileType fileType = languageOptions.fileType; + assert(fileType == FileType.header || fileType == FileType.source); + if (fileType == FileType.header) { + generateCppHeader(languageOptions.languageOptions, root, sink); + } else { + generateCppSource(languageOptions.languageOptions, root, sink); + } + } +} + String _getCodecSerializerName(Api api) => '${api.name}CodecSerializer'; const String _pointerPrefix = 'pointer'; @@ -1026,8 +1051,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: '// '); @@ -1128,7 +1153,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 0500bd4d945..e6f685052f1 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. @@ -24,11 +25,21 @@ const String _standardMessageCodec = 'StandardMessageCodec'; /// Options that control how Dart code will be generated. class DartOptions { /// Constructor for DartOptions. - const DartOptions({this.copyrightHeader}); + DartOptions({ + this.copyrightHeader, + this.sourceOutPath, + this.testOutPath, + }); /// A copyright header that will get prepended to generated code. final Iterable? copyrightHeader; + /// Path to output generated Dart file. + String? sourceOutPath; + + /// Path to output generated Test file for tests. + String? testOutPath; + /// Creates a [DartOptions] from a Map representation where: /// `x = DartOptions.fromMap(x.toMap())`. static DartOptions fromMap(Map map) { @@ -36,6 +47,8 @@ class DartOptions { map['copyrightHeader'] as Iterable?; return DartOptions( copyrightHeader: copyrightHeader?.cast(), + sourceOutPath: map['sourceOutPath'] as String?, + testOutPath: map['testOutPath'] as String?, ); } @@ -44,6 +57,8 @@ class DartOptions { Map toMap() { final Map result = { if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!, + if (sourceOutPath != null) 'sourceOutPath': sourceOutPath!, + if (testOutPath != null) 'testOutPath': testOutPath!, }; return result; } @@ -55,6 +70,33 @@ class DartOptions { } } +/// Class that manages all Dart code generation. +class DartGenerator extends Generator { + /// Instantiates a Dart Generator. + DartGenerator(); + + /// 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); + } + + /// 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( + languageOptions, + root, + sink, + sourceOutPath: sourceOutPath, + testOutPath: testOutPath, + ); + } +} + String _escapeForDartSingleQuotedString(String raw) { return raw .replaceAll(r'\', r'\\') @@ -699,14 +741,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); @@ -730,10 +772,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/generator.dart b/packages/pigeon/lib/generator.dart new file mode 100644 index 00000000000..02667e4a5c9 --- /dev/null +++ b/packages/pigeon/lib/generator.dart @@ -0,0 +1,13 @@ +// 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 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); +} diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index ea522eaa04d..b1ee06b01e8 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() { @@ -497,3 +497,29 @@ 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, + + /// file type is not applicable. + na, +} + +/// Options for [Generator]'s that have multiple output file types. +/// +/// Specifies which file to write as well as wraps all language options. +class OutputFileOptions { + /// Constructor. + OutputFileOptions({required this.fileType, required this.languageOptions}); + + /// To specify which file type should be created. + FileType fileType; + + /// Options for specified language across all file types. + T languageOptions; +} diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index c52d976cfdf..daca63876d2 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,20 @@ class JavaOptions { } } +/// Class that manages all Java code generation. +class JavaGenerator extends Generator { + /// Instantiates a Java Generator. + JavaGenerator(); + + /// 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); + } +} + /// 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..18e08c7398a 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,20 @@ class KotlinOptions { } } +/// Class that manages all Kotlin code generation. +class KotlinGenerator extends Generator { + /// Instantiates a Kotlin Generator. + KotlinGenerator(); + + /// 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); + } +} + /// 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..3d7e3a64da2 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; @@ -18,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; @@ -39,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(), ); @@ -49,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!, }; @@ -63,6 +64,26 @@ class ObjcOptions { } } +/// Class that manages all Objc header code generation. +class ObjcGenerator extends Generator> { + /// Instantiates a Objc Generator. + ObjcGenerator(); + + /// Generates Objc files with specified [OutputFileOptions] + @override + void generate(OutputFileOptions languageOptions, Root root, + StringSink sink) { + final FileType fileType = languageOptions.fileType; + assert(fileType == FileType.header || fileType == FileType.source); + + if (fileType == FileType.header) { + generateObjcHeader(languageOptions.languageOptions, root, sink); + } else { + generateObjcSource(languageOptions.languageOptions, root, sink); + } + } +} + /// Calculates the ObjC class name, possibly prefixed. String _className(String? prefix, String className) { if (prefix != null) { @@ -890,7 +911,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 5da91c4a7c5..5082dd19e8e 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -355,85 +355,116 @@ 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. - 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. +/// 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 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. + 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, FileType fileType); + + /// 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) { - dartOptions = dartOptions ?? const DartOptions(); + DartOptions? dartOptions, String? copyrightHeader, + {String? dartOutPath, String? testOutPath}) { + dartOptions = dartOptions ?? DartOptions(); return dartOptions.merge(DartOptions( + sourceOutPath: dartOutPath, + testOutPath: testOutPath, copyrightHeader: copyrightHeader != null ? _lineReader(copyrightHeader) : null)); } -/// A [Generator] that generates the AST. -class AstGenerator implements Generator { - /// Constructor for [AstGenerator]. - const AstGenerator(); +/// A [GeneratorAdapter] that generates the AST. +class AstGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [AstGeneratorAdapter]. + AstGeneratorAdapter(); + + @override + List fileTypeList = const [FileType.na]; @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) => []; } -/// A [Generator] that generates Dart source code. -class DartGenerator implements Generator { - /// Constructor for [DartGenerator]. - const DartGenerator(); +/// A [GeneratorAdapter] that generates Dart source code. +class DartGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [DartGeneratorAdapter]. + DartGeneratorAdapter(); @override - void generate(StringSink sink, PigeonOptions options, Root root) { + List fileTypeList = const [FileType.na]; + + @override + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( options.dartOptions, options.copyrightHeader); - generateDart(dartOptionsWithHeader, root, sink); + final DartGenerator generator = DartGenerator(); + generator.generate(dartOptionsWithHeader, root, sink); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.dartOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.dartOut); @override List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates Dart test source code. -class DartTestGenerator implements Generator { - /// Constructor for [DartTestGenerator]. - const DartTestGenerator(); +/// A [GeneratorAdapter] that generates Dart test source code. +class DartTestGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [DartTestGeneratorAdapter]. + DartTestGeneratorAdapter(); + + @override + List fileTypeList = const [FileType.na]; @override - void generate(StringSink sink, PigeonOptions options, Root root) { + void generate( + StringSink sink, PigeonOptions options, Root root, FileType fileType) { final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( - options.dartOptions, options.copyrightHeader); - generateTestDart( + options.dartOptions, + options.copyrightHeader, + dartOutPath: options.dartOut, + testOutPath: options.dartTestOut, + ); + final DartGenerator testGenerator = DartGenerator(); + testGenerator.generateTest( dartOptionsWithHeader, root, sink, - dartOutPath: options.dartOut!, - testOutPath: options.dartTestOut!, ); } @override - IOSink? shouldGenerate(PigeonOptions options) { + IOSink? shouldGenerate(PigeonOptions options, FileType _) { if (options.dartTestOut != null) { return _openSink(options.dartTestOut); } else { @@ -445,60 +476,55 @@ 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(); - - @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)); - generateObjcHeader(objcOptionsWithHeader, root, sink); - } - - @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 [Generator] that generates Objective-C source code. -class ObjcSourceGenerator implements Generator { - /// Constructor for [ObjcSourceGenerator]. - const ObjcSourceGenerator(); + 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)); - generateObjcSource(objcOptionsWithHeader, root, sink); + copyrightHeader: options.copyrightHeader != null + ? _lineReader(options.copyrightHeader!) + : null, + )); + final OutputFileOptions outputFileOptions = + OutputFileOptions( + fileType: fileType, languageOptions: objcOptionsWithHeader); + final ObjcGenerator generator = ObjcGenerator(); + generator.generate(outputFileOptions, root, sink); } @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) => []; } -/// A [Generator] that generates Java source code. -class JavaGenerator implements Generator { - /// Constructor for [JavaGenerator]. - const JavaGenerator(); +/// A [GeneratorAdapter] that generates Java source code. +class JavaGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [JavaGeneratorAdapter]. + JavaGeneratorAdapter(); + + @override + List fileTypeList = const [FileType.na]; @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 ?? @@ -506,104 +532,108 @@ class JavaGenerator implements Generator { copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateJava(javaOptions, root, sink); + final JavaGenerator generator = JavaGenerator(); + generator.generate(javaOptions, root, sink); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.javaOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.javaOut); @override List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates Swift source code. -class SwiftGenerator implements Generator { - /// Constructor for [SwiftGenerator]. - const SwiftGenerator(); +/// A [GeneratorAdapter] that generates Swift source code. +class SwiftGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [SwiftGeneratorAdapter]. + SwiftGeneratorAdapter(); @override - void generate(StringSink sink, PigeonOptions options, Root root) { + List fileTypeList = const [FileType.na]; + + @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)); - generateSwift(swiftOptions, root, sink); + final SwiftGenerator generator = SwiftGenerator(); + generator.generate(swiftOptions, root, sink); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.swiftOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.swiftOut); @override List validate(PigeonOptions options, Root root) => []; } -/// A [Generator] that generates C++ header code. -class CppHeaderGenerator implements Generator { - /// Constructor for [CppHeaderGenerator]. - const CppHeaderGenerator(); - - @override - void generate(StringSink sink, PigeonOptions options, Root root) { - final CppOptions cppOptions = options.cppOptions ?? const CppOptions(); - final CppOptions cppOptionsWithHeader = cppOptions.merge(CppOptions( - copyrightHeader: options.copyrightHeader != null - ? _lineReader(options.copyrightHeader!) - : null)); - generateCppHeader(path.basenameWithoutExtension(options.cppHeaderOut!), - cppOptionsWithHeader, root, sink); - } +/// A [GeneratorAdapter] that generates C++ source code. +class CppGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [CppGeneratorAdapter]. + CppGeneratorAdapter( + {this.fileTypeList = const [FileType.header, FileType.source]}); @override - IOSink? shouldGenerate(PigeonOptions options) => - _openSink(options.cppHeaderOut); + List fileTypeList; @override - List validate(PigeonOptions options, Root root) => - validateCpp(options.cppOptions!, root); -} - -/// A [Generator] that generates C++ source code. -class CppSourceGenerator implements Generator { - /// Constructor for [CppSourceGenerator]. - const CppSourceGenerator(); - - @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)); - generateCppSource(cppOptionsWithHeader, root, sink); + copyrightHeader: options.copyrightHeader != null + ? _lineReader(options.copyrightHeader!) + : null, + )); + final OutputFileOptions outputFileOptions = + OutputFileOptions( + fileType: fileType, languageOptions: cppOptionsWithHeader); + final CppGenerator generator = CppGenerator(); + generator.generate(outputFileOptions, root, sink); } @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) => []; } -/// A [Generator] that generates Kotlin source code. -class KotlinGenerator implements Generator { - /// Constructor for [KotlinGenerator]. - const KotlinGenerator(); +/// A [GeneratorAdapter] that generates Kotlin source code. +class KotlinGeneratorAdapter implements GeneratorAdapter { + /// Constructor for [KotlinGeneratorAdapter]. + KotlinGeneratorAdapter({this.fileTypeList = const [FileType.na]}); + + @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( copyrightHeader: options.copyrightHeader != null ? _lineReader(options.copyrightHeader!) : null)); - generateKotlin(kotlinOptions, root, sink); + final KotlinGenerator generator = KotlinGenerator(); + generator.generate(kotlinOptions, root, sink); } @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.kotlinOut); + IOSink? shouldGenerate(PigeonOptions options, FileType _) => + _openSink(options.kotlinOut); @override List validate(PigeonOptions options, Root root) => []; @@ -1331,37 +1361,35 @@ ${_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 safeGeneratorAdapters = adapters ?? + [ + DartGeneratorAdapter(), + JavaGeneratorAdapter(), + SwiftGeneratorAdapter(), + KotlinGeneratorAdapter(), + CppGeneratorAdapter(), + DartTestGeneratorAdapter(), + ObjcGeneratorAdapter(), + AstGeneratorAdapter(), ]; _executeConfigurePigeon(options); @@ -1383,12 +1411,12 @@ ${_argParser.usage}'''; } } - for (final Generator generator in safeGenerators) { - final IOSink? sink = generator.shouldGenerate(options); + for (final GeneratorAdapter adapter in safeGeneratorAdapters) { + final IOSink? sink = adapter.shouldGenerate(options, FileType.source); 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); } } @@ -1415,22 +1443,24 @@ ${_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) { 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 Generator generator in safeGenerators) { - final IOSink? sink = generator.shouldGenerate(options); - if (sink != null) { - generator.generate(sink, options, parseResults.root); - await sink.flush(); - await releaseSink(sink); + for (final GeneratorAdapter adapter in safeGeneratorAdapters) { + 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/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 0311b8de21d..77fff7e2fac 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,20 @@ class SwiftOptions { } } +/// Class that manages all Swift code generation. +class SwiftGenerator extends Generator { + /// Instantiates a Swift Generator. + SwiftGenerator(); + + /// 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); + } +} + /// Calculates the name of the codec that will be generated for [api]. String _getCodecName(Api api) => '${api.name}Codec'; diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart index f5ce56c7f0b..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.15), 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 8fcd5ae8d66..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.15), 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 c2f03631815..95b0e2a9509 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.16), 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 0e98e89469a..1def5e7af69 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.16), 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 fa13afaf750..244b1e236c5 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.16), 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 2bca40161b1..fe0fe3335ea 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.15), 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'; @@ -205,14 +205,11 @@ class _HostIntegrationCoreApiCodec extends StandardMessageCodec { if (value is AllNullableTypes) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else if (value is AllNullableTypes) { - buffer.putUint8(129); - writeValue(buffer, value.encode()); } else if (value is AllNullableTypesWrapper) { - buffer.putUint8(130); + buffer.putUint8(129); writeValue(buffer, value.encode()); } else if (value is AllTypes) { - buffer.putUint8(131); + buffer.putUint8(130); writeValue(buffer, value.encode()); } else { super.writeValue(buffer, value); @@ -226,12 +223,9 @@ class _HostIntegrationCoreApiCodec extends StandardMessageCodec { return AllNullableTypes.decode(readValue(buffer)!); case 129: - return AllNullableTypes.decode(readValue(buffer)!); - - case 130: return AllNullableTypesWrapper.decode(readValue(buffer)!); - case 131: + case 130: return AllTypes.decode(readValue(buffer)!); default: @@ -489,6 +483,34 @@ class HostIntegrationCoreApi { } } + /// Returns the passed in generic Object. + Future echoObject(Object arg_anObject) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.HostIntegrationCoreApi.echoObject', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_anObject]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return replyList[0]!; + } + } + /// Returns the inner `aString` value from the wrapped object, to test /// sending of nested objects. Future extractNestedNullableString( @@ -694,6 +716,29 @@ class HostIntegrationCoreApi { } } + /// Returns the passed in generic Object. + Future echoNullableObject(Object? arg_aNullableObject) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableObject', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_aNullableObject]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return replyList[0]; + } + } + /// A no-op function taking no arguments and returning no value, to sanity /// test basic asynchronous calling. Future noopAsync() 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 e8486ceac4e..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.15), 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 f972b5472e2..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.15), 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 50db20b91f8..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.15), 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 b54be15aafb..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.15), 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 8ddfef08b4c..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.15), 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 149c54c68ed..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.15), 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 377a02e57f7..fe0fe3335ea 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.16), 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 5b33490f65a..61a957c8b55 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.16), 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 b44380ded81..844e541a562 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.16), 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 b44380ded81..844e541a562 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.16), 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 a70c9377311..110c75e358d 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.16), do not edit directly. +// Autogenerated from Pigeon (v5.0.0), 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 67b36263a85..527a0ff45c8 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.16), 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 @@ -412,4 +412,4 @@ class HostTrivialApi { HostTrivialApi() = default; }; } // namespace core_tests_pigeontest -#endif // PIGEON_CORE_TESTS_GEN_CORE_TESTS_PIGEONTEST_H_ +#endif // PIGEON_CORE_TESTS_PIGEONTEST_H_ 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" diff --git a/packages/pigeon/test/cpp_generator_test.dart b/packages/pigeon/test/cpp_generator_test.dart index 4733c1f4bf0..172ce2ea3fe 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()')); @@ -831,7 +832,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, @@ -962,7 +963,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, @@ -1148,7 +1149,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')); @@ -1183,7 +1184,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'))); }); @@ -1225,7 +1226,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 bf359ddfe43..c77e5d89e37 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,10 +579,10 @@ void main() { expect(mainCode, isNot(contains("'${Keys.result}': output"))); expect(mainCode, isNot(contains('return [];'))); generateTestDart( - const DartOptions(), + DartOptions(), root, testCodeSink, - dartOutPath: "fo'o.dart", + sourceOutPath: "fo'o.dart", testOutPath: 'test.dart', ); final String testCode = testCodeSink.toString(); @@ -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,10 +1151,10 @@ name: foobar Root(classes: [], apis: [], enums: []); final StringBuffer sink = StringBuffer(); generateTestDart( - const DartOptions(), + 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(); @@ -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,10 +1355,10 @@ name: foobar ); final StringBuffer sink = StringBuffer(); generateTestDart( - const DartOptions(), + DartOptions(), root, sink, - dartOutPath: 'code.dart', + sourceOutPath: 'code.dart', testOutPath: 'test.dart', ); final String testCode = sink.toString(); 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, ); diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 4a121e7e9e0..64c4af7b5ab 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 _ValidatorGenerator implements Generator { - _ValidatorGenerator(this.sink); +class _ValidatorGeneratorAdapter implements GeneratorAdapter { + _ValidatorGeneratorAdapter(this.sink); + + @override + List fileTypeList = const [FileType.na]; + 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 DartGenerator dartGenerator = DartGenerator(); + final DartGeneratorAdapter dartGeneratorAdapter = DartGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - dartGenerator.generate(buffer, options, root); + dartGeneratorAdapter.generate(buffer, options, root, FileType.na); 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 JavaGenerator javaGenerator = JavaGenerator(); + final JavaGeneratorAdapter javaGeneratorAdapter = JavaGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - javaGenerator.generate(buffer, options, root); + javaGeneratorAdapter.generate(buffer, options, root, FileType.na); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -417,9 +423,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const ObjcHeaderGenerator objcHeaderGenerator = ObjcHeaderGenerator(); + final ObjcGeneratorAdapter objcHeaderGeneratorAdapter = + ObjcGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - objcHeaderGenerator.generate(buffer, options, root); + objcHeaderGeneratorAdapter.generate(buffer, options, root, FileType.header); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -427,9 +434,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const ObjcSourceGenerator objcSourceGenerator = ObjcSourceGenerator(); + final ObjcGeneratorAdapter objcSourceGeneratorAdapter = + ObjcGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - objcSourceGenerator.generate(buffer, options, root); + objcSourceGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -437,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 SwiftGenerator swiftGenerator = SwiftGenerator(); + final SwiftGeneratorAdapter swiftGeneratorAdapter = SwiftGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - swiftGenerator.generate(buffer, options, root); + swiftGeneratorAdapter.generate(buffer, options, root, FileType.na); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -447,9 +455,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(); + final CppGeneratorAdapter cppHeaderGeneratorAdapter = CppGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - cppHeaderGenerator.generate(buffer, options, root); + cppHeaderGeneratorAdapter.generate(buffer, options, root, FileType.header); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -457,9 +465,10 @@ abstract class NestorApi { final Root root = Root(apis: [], classes: [], enums: []); const PigeonOptions options = PigeonOptions(copyrightHeader: './copyright_header.txt'); - const CppSourceGenerator cppSourceGenerator = CppSourceGenerator(); + final CppGeneratorAdapter cppSourceGeneratorAdapter = + CppGeneratorAdapter(fileTypeList: [FileType.source]); final StringBuffer buffer = StringBuffer(); - cppSourceGenerator.generate(buffer, options, root); + cppSourceGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -929,9 +938,10 @@ abstract class Api { dartTestOut: 'stdout', dartOut: 'stdout', ); - const DartTestGenerator dartGenerator = DartTestGenerator(); + final DartTestGeneratorAdapter dartGeneratorAdapter = + DartTestGeneratorAdapter(); final StringBuffer buffer = StringBuffer(); - dartGenerator.generate(buffer, options, root); + dartGeneratorAdapter.generate(buffer, options, root, FileType.source); expect(buffer.toString(), startsWith('// Copyright 2013')); }); @@ -1187,9 +1197,10 @@ abstract class Api { test('generator validation', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorGenerator generator = _ValidatorGenerator(stdout); + final _ValidatorGeneratorAdapter generator = + _ValidatorGeneratorAdapter(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 +1211,11 @@ abstract class Api { test('generator validation skipped', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorGenerator generator = _ValidatorGenerator(null); + final _ValidatorGeneratorAdapter generator = + _ValidatorGeneratorAdapter(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 +1226,11 @@ abstract class Api { test('run with PigeonOptions', () async { final Completer completer = Completer(); withTempFile('foo.dart', (File input) async { - final _ValidatorGenerator generator = _ValidatorGenerator(null); + final _ValidatorGeneratorAdapter generator = + _ValidatorGeneratorAdapter(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(); 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),