From 508c1822f7a33075d74f4980a8d8b4a7249f4e0c Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 19 Dec 2022 18:00:13 -0800 Subject: [PATCH 1/4] start --- packages/pigeon/lib/generator.dart | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 packages/pigeon/lib/generator.dart diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart new file mode 100644 index 00000000000..8ac2be2df40 --- /dev/null +++ b/packages/pigeon/lib/generator.dart @@ -0,0 +1,39 @@ +// 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 'pigeon_lib.dart'; + +/// Generator class that handles all generation. +class Generator { + /// Constructor for Generator. + const Generator(this.pigeonOptions); + + /// Options for any generator being called. + final PigeonOptions pigeonOptions; + + /// Method for generation of pigeon files. + void generate() { + // + } + + /// Writes a class. + void writeClass() { + // + } + + /// Writes the encode (or toList) method for a class. + void writeEncode() { + // + } + + /// Writes the decode (or fromList) method for a class. + void writeDecode() { + // + } + + /// Writes an api. + void writeApi() { + // + } +} From 9c3023fa2de79c0869426a3fc02eec7a7d240bd1 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 20 Dec 2022 06:13:02 -0800 Subject: [PATCH 2/4] Class file transfer and skeleton comments --- packages/pigeon/lib/generator.dart | 111 ++++++++++++++++++++-------- packages/pigeon/lib/pigeon_lib.dart | 16 +--- 2 files changed, 81 insertions(+), 46 deletions(-) diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index 8ac2be2df40..881a8c5a900 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -2,38 +2,87 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; + +import 'ast.dart'; import 'pigeon_lib.dart'; -/// Generator class that handles all generation. -class Generator { +/// A generator that will write code to a sink based on the contents of [PigeonOptions]. +abstract class Generator { /// Constructor for Generator. - const Generator(this.pigeonOptions); - - /// Options for any generator being called. - final PigeonOptions pigeonOptions; - - /// Method for generation of pigeon files. - void generate() { - // - } - - /// Writes a class. - void writeClass() { - // - } - - /// Writes the encode (or toList) method for a class. - void writeEncode() { - // - } - - /// Writes the decode (or fromList) method for a class. - void writeDecode() { - // - } - - /// Writes an api. - void writeApi() { - // - } + const Generator( + // { + // required this.pigeonOptions, + // required this.sink, + // required this.root, + // } + ); + + // /// Options for any generator being called. + // final PigeonOptions pigeonOptions; + + // /// Just to make sure everything is included. + // final StringSink sink; + + // /// Trees can't grow without em. + // final Root root; + + /// 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. + List validate(PigeonOptions options, Root root); + + // /// Method for generation of pigeon files. + // void generate() { + // //write headers + // //write imports + // //write enums (loop) + // //write classes (loop) + // //write apis (loop) + // } + + // /// Writes file header. + // void writeHeader() { + // // + // } + + // /// Writes import statements. + // void writeImports() { + // // + // } + + // /// Writes an Enum. + // void writeEnum() { + // // + // } + + // /// Writes a class. + // void writeClass() { + // // + // } + + // /// Writes the encode (or toList) method for a class. + // void writeEncode() { + // // + // } + + // /// Writes the decode (or fromList) method for a class. + // void writeDecode() { + // // + // } + + // /// Writes an api. + // void writeApi() { + // // if host api + // // write host api + // // else + // // write flutter api + // } } diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 5da91c4a7c5..0acdf0b02af 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -27,6 +27,7 @@ import 'ast.dart'; import 'ast_generator.dart'; import 'cpp_generator.dart'; import 'dart_generator.dart'; +import 'generator.dart'; import 'generator_tools.dart'; import 'generator_tools.dart' as generator_tools; import 'java_generator.dart'; @@ -355,21 +356,6 @@ 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. - List validate(PigeonOptions options, Root root); -} - DartOptions _dartOptionsWithCopyrightHeader( DartOptions? dartOptions, String? copyrightHeader) { dartOptions = dartOptions ?? const DartOptions(); From 99c5c01f4f39053b5827373c67bc52c237bfb345 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 20 Dec 2022 15:01:02 -0800 Subject: [PATCH 3/4] relocate generator classes and update imports --- packages/pigeon/lib/cpp_generator.dart | 54 ++++- packages/pigeon/lib/dart_generator.dart | 62 +++++- packages/pigeon/lib/generator.dart | 66 +------ packages/pigeon/lib/java_generator.dart | 32 ++- packages/pigeon/lib/kotlin_generator.dart | 29 ++- packages/pigeon/lib/objc_generator.dart | 53 ++++- packages/pigeon/lib/pigeon_lib.dart | 230 +--------------------- packages/pigeon/lib/swift_generator.dart | 26 +++ packages/pigeon/test/pigeon_lib_test.dart | 6 + 9 files changed, 264 insertions(+), 294 deletions(-) diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index e06d5d1c4c0..7be5c4cddbc 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -2,10 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; +import 'package:path/path.dart' as path; + import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; -import 'pigeon_lib.dart' show Error; +import 'pigeon_lib.dart' show Error, PigeonOptions, lineReader, openSink; /// General comment opening token. const String _commentPrefix = '//'; @@ -64,6 +68,54 @@ class CppOptions { } } +/// 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); + } + + @override + IOSink? shouldGenerate(PigeonOptions options) => + openSink(options.cppHeaderOut); + + @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) { + 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); + } + + @override + IOSink? shouldGenerate(PigeonOptions options) => + openSink(options.cppSourceOut); + + @override + List validate(PigeonOptions options, Root root) => []; +} + String _getCodecSerializerName(Api api) => '${api.name}CodecSerializer'; const String _pointerPrefix = 'pointer'; diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 85956ced69e..4ab9ebd07cb 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -2,14 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io' show Directory, File, FileSystemEntity; +import 'dart:io' show Directory, File, FileSystemEntity, IOSink; import 'package:path/path.dart' as path; import 'package:yaml/yaml.dart' as yaml; import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; +import 'pigeon_lib.dart' show Error, PigeonOptions, lineReader, openSink; /// Documentation comment open symbol. const String _docCommentPrefix = '///'; @@ -65,6 +67,64 @@ String _escapeForDartSingleQuotedString(String raw) { /// Calculates the name of the codec class that will be generated for [api]. String _getCodecName(Api api) => '_${api.name}Codec'; +/// A [Generator] that generates Dart source code. +class DartGenerator implements Generator { + /// Constructor for [DartGenerator]. + const DartGenerator(); + + @override + void generate(StringSink sink, PigeonOptions options, Root root) { + final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( + options.dartOptions, options.copyrightHeader); + generateDart(dartOptionsWithHeader, root, sink); + } + + @override + IOSink? shouldGenerate(PigeonOptions options) => openSink(options.dartOut); + + @override + List validate(PigeonOptions options, Root root) => []; +} + +DartOptions _dartOptionsWithCopyrightHeader( + DartOptions? dartOptions, String? copyrightHeader) { + dartOptions = dartOptions ?? const DartOptions(); + return dartOptions.merge(DartOptions( + copyrightHeader: + copyrightHeader != null ? lineReader(copyrightHeader) : null)); +} + +/// A [Generator] that generates Dart test source code. +class DartTestGenerator implements Generator { + /// Constructor for [DartTestGenerator]. + const DartTestGenerator(); + + @override + void generate(StringSink sink, PigeonOptions options, Root root) { + final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( + options.dartOptions, options.copyrightHeader); + generateTestDart( + dartOptionsWithHeader, + root, + sink, + dartOutPath: options.dartOut!, + testOutPath: options.dartTestOut!, + ); + } + + @override + IOSink? shouldGenerate(PigeonOptions options) { + if (options.dartTestOut != null) { + return openSink(options.dartTestOut); + } else { + return null; + } + } + + @override + List validate(PigeonOptions options, Root root) => []; +} + /// Writes the codec that will be used by [api]. /// Example: /// diff --git a/packages/pigeon/lib/generator.dart b/packages/pigeon/lib/generator.dart index 881a8c5a900..8cdace24971 100644 --- a/packages/pigeon/lib/generator.dart +++ b/packages/pigeon/lib/generator.dart @@ -5,27 +5,12 @@ import 'dart:io'; import 'ast.dart'; -import 'pigeon_lib.dart'; +import 'pigeon_lib.dart' show Error, PigeonOptions; /// A generator that will write code to a sink based on the contents of [PigeonOptions]. abstract class Generator { /// Constructor for Generator. - const Generator( - // { - // required this.pigeonOptions, - // required this.sink, - // required this.root, - // } - ); - - // /// Options for any generator being called. - // final PigeonOptions pigeonOptions; - - // /// Just to make sure everything is included. - // final StringSink sink; - - // /// Trees can't grow without em. - // final Root root; + Generator(); /// Returns an [IOSink] instance to be written to if the [Generator] should /// generate. If it returns `null`, the [Generator] will be skipped. @@ -38,51 +23,4 @@ abstract class Generator { /// Generates errors that would only be appropriate for this [Generator]. For /// example, maybe a certain feature isn't implemented in a [Generator] yet. List validate(PigeonOptions options, Root root); - - // /// Method for generation of pigeon files. - // void generate() { - // //write headers - // //write imports - // //write enums (loop) - // //write classes (loop) - // //write apis (loop) - // } - - // /// Writes file header. - // void writeHeader() { - // // - // } - - // /// Writes import statements. - // void writeImports() { - // // - // } - - // /// Writes an Enum. - // void writeEnum() { - // // - // } - - // /// Writes a class. - // void writeClass() { - // // - // } - - // /// Writes the encode (or toList) method for a class. - // void writeEncode() { - // // - // } - - // /// Writes the decode (or fromList) method for a class. - // void writeDecode() { - // // - // } - - // /// Writes an api. - // void writeApi() { - // // if host api - // // write host api - // // else - // // write flutter api - // } } diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index c52d976cfdf..3d475bbe4e3 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -2,10 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; + +import 'package:path/path.dart' as path; + import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; -import 'pigeon_lib.dart' show TaskQueueType; +import 'pigeon_lib.dart' + show Error, PigeonOptions, TaskQueueType, lineReader, openSink; /// Documentation open symbol. const String _docCommentPrefix = '/**'; @@ -84,6 +90,30 @@ class JavaOptions { } } +/// A [Generator] that generates Java source code. +class JavaGenerator implements Generator { + /// Constructor for [JavaGenerator]. + const JavaGenerator(); + + @override + void generate(StringSink sink, PigeonOptions options, Root root) { + JavaOptions javaOptions = options.javaOptions ?? const JavaOptions(); + javaOptions = javaOptions.merge(JavaOptions( + className: javaOptions.className ?? + path.basenameWithoutExtension(options.javaOut!), + copyrightHeader: options.copyrightHeader != null + ? lineReader(options.copyrightHeader!) + : null)); + generateJava(javaOptions, root, sink); + } + + @override + IOSink? shouldGenerate(PigeonOptions options) => openSink(options.javaOut); + + @override + List validate(PigeonOptions options, Root root) => []; +} + /// 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..72456e681e8 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -2,10 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; + import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; -import 'pigeon_lib.dart' show TaskQueueType; +import 'pigeon_lib.dart' + show Error, PigeonOptions, TaskQueueType, lineReader, openSink; /// Documentation open symbol. const String _docCommentPrefix = '/**'; @@ -64,6 +68,29 @@ class KotlinOptions { } } +/// A [Generator] that generates Kotlin source code. +class KotlinGenerator implements Generator { + /// Constructor for [KotlinGenerator]. + const KotlinGenerator(); + + @override + void generate(StringSink sink, PigeonOptions options, Root root) { + KotlinOptions kotlinOptions = + options.kotlinOptions ?? const KotlinOptions(); + kotlinOptions = kotlinOptions.merge(KotlinOptions( + copyrightHeader: options.copyrightHeader != null + ? lineReader(options.copyrightHeader!) + : null)); + generateKotlin(kotlinOptions, root, sink); + } + + @override + IOSink? shouldGenerate(PigeonOptions options) => openSink(options.kotlinOut); + + @override + List validate(PigeonOptions options, Root root) => []; +} + /// 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..8e7caea2511 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -2,10 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; + import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; -import 'pigeon_lib.dart' show Error, TaskQueueType; +import 'pigeon_lib.dart' + show Error, PigeonOptions, TaskQueueType, lineReader, openSink; /// Documentation comment open symbol. const String _docCommentPrefix = '///'; @@ -63,6 +67,53 @@ class ObjcOptions { } } +/// 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); + + @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(); + + @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)); + generateObjcSource(objcOptionsWithHeader, root, sink); + } + + @override + IOSink? shouldGenerate(PigeonOptions options) => + openSink(options.objcSourceOut); + + @override + List validate(PigeonOptions options, Root root) => []; +} + /// Calculates the ObjC class name, possibly prefixed. String _className(String? prefix, String className) { if (prefix != null) { diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 0acdf0b02af..6da35a51df8 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -332,7 +332,8 @@ class ParseResults { final Map? pigeonOptions; } -Iterable _lineReader(String path) sync* { +/// Reads file line by line. +Iterable lineReader(String path) sync* { final String contents = File(path).readAsStringSync(); const LineSplitter lineSplitter = LineSplitter(); final List lines = lineSplitter.convert(contents); @@ -341,7 +342,8 @@ Iterable _lineReader(String path) sync* { } } -IOSink? _openSink(String? output) { +/// Creates IOSink. +IOSink? openSink(String? output) { if (output == null) { return null; } @@ -356,14 +358,6 @@ IOSink? _openSink(String? output) { return sink; } -DartOptions _dartOptionsWithCopyrightHeader( - DartOptions? dartOptions, String? copyrightHeader) { - dartOptions = dartOptions ?? const DartOptions(); - return dartOptions.merge(DartOptions( - copyrightHeader: - copyrightHeader != null ? _lineReader(copyrightHeader) : null)); -} - /// A [Generator] that generates the AST. class AstGenerator implements Generator { /// Constructor for [AstGenerator]. @@ -375,221 +369,7 @@ class AstGenerator implements Generator { } @override - IOSink? shouldGenerate(PigeonOptions options) => _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(); - - @override - void generate(StringSink sink, PigeonOptions options, Root root) { - final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( - options.dartOptions, options.copyrightHeader); - generateDart(dartOptionsWithHeader, root, sink); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => _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(); - - @override - void generate(StringSink sink, PigeonOptions options, Root root) { - final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader( - options.dartOptions, options.copyrightHeader); - generateTestDart( - dartOptionsWithHeader, - root, - sink, - dartOutPath: options.dartOut!, - testOutPath: options.dartTestOut!, - ); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) { - if (options.dartTestOut != null) { - return _openSink(options.dartTestOut); - } else { - return null; - } - } - - @override - 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); - - @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(); - - @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)); - generateObjcSource(objcOptionsWithHeader, root, sink); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => - _openSink(options.objcSourceOut); - - @override - List validate(PigeonOptions options, Root root) => []; -} - -/// A [Generator] that generates Java source code. -class JavaGenerator implements Generator { - /// Constructor for [JavaGenerator]. - const JavaGenerator(); - - @override - void generate(StringSink sink, PigeonOptions options, Root root) { - JavaOptions javaOptions = options.javaOptions ?? const JavaOptions(); - javaOptions = javaOptions.merge(JavaOptions( - className: javaOptions.className ?? - path.basenameWithoutExtension(options.javaOut!), - copyrightHeader: options.copyrightHeader != null - ? _lineReader(options.copyrightHeader!) - : null)); - generateJava(javaOptions, root, sink); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => _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(); - - @override - void generate(StringSink sink, PigeonOptions options, Root root) { - SwiftOptions swiftOptions = options.swiftOptions ?? const SwiftOptions(); - swiftOptions = swiftOptions.merge(SwiftOptions( - copyrightHeader: options.copyrightHeader != null - ? _lineReader(options.copyrightHeader!) - : null)); - generateSwift(swiftOptions, root, sink); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => _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); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => - _openSink(options.cppHeaderOut); - - @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) { - 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); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => - _openSink(options.cppSourceOut); - - @override - List validate(PigeonOptions options, Root root) => []; -} - -/// A [Generator] that generates Kotlin source code. -class KotlinGenerator implements Generator { - /// Constructor for [KotlinGenerator]. - const KotlinGenerator(); - - @override - void generate(StringSink sink, PigeonOptions options, Root root) { - KotlinOptions kotlinOptions = - options.kotlinOptions ?? const KotlinOptions(); - kotlinOptions = kotlinOptions.merge(KotlinOptions( - copyrightHeader: options.copyrightHeader != null - ? _lineReader(options.copyrightHeader!) - : null)); - generateKotlin(kotlinOptions, root, sink); - } - - @override - IOSink? shouldGenerate(PigeonOptions options) => _openSink(options.kotlinOut); + IOSink? shouldGenerate(PigeonOptions options) => openSink(options.astOut); @override List validate(PigeonOptions options, Root root) => []; diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 3736506c1e7..5cceeccfeec 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -2,9 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; + import 'ast.dart'; import 'functional.dart'; +import 'generator.dart'; import 'generator_tools.dart'; +import 'pigeon_lib.dart' show Error, PigeonOptions, lineReader, openSink; /// Documentation comment open symbol. const String _docCommentPrefix = '///'; @@ -47,6 +51,28 @@ class SwiftOptions { } } +/// A [Generator] that generates Swift source code. +class SwiftGenerator implements Generator { + /// Constructor for [SwiftGenerator]. + const SwiftGenerator(); + + @override + void generate(StringSink sink, PigeonOptions options, Root root) { + SwiftOptions swiftOptions = options.swiftOptions ?? const SwiftOptions(); + swiftOptions = swiftOptions.merge(SwiftOptions( + copyrightHeader: options.copyrightHeader != null + ? lineReader(options.copyrightHeader!) + : null)); + generateSwift(swiftOptions, root, sink); + } + + @override + IOSink? shouldGenerate(PigeonOptions options) => openSink(options.swiftOut); + + @override + List validate(PigeonOptions options, Root root) => []; +} + /// Calculates the name of the codec that will be generated for [api]. String _getCodecName(Api api) => '${api.name}Codec'; diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 4a121e7e9e0..8106cacedba 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -6,7 +6,13 @@ import 'dart:async'; import 'dart:io'; import 'package:pigeon/ast.dart'; +import 'package:pigeon/cpp_generator.dart'; +import 'package:pigeon/dart_generator.dart'; +import 'package:pigeon/generator.dart'; +import 'package:pigeon/java_generator.dart'; +import 'package:pigeon/objc_generator.dart'; import 'package:pigeon/pigeon_lib.dart'; +import 'package:pigeon/swift_generator.dart'; import 'package:test/test.dart'; class _ValidatorGenerator implements Generator { From 67fd9946d89e05d7424061e16a4ea2efdae3156b Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 20 Dec 2022 15:27:37 -0800 Subject: [PATCH 4/4] merge main and changelog update --- packages/pigeon/CHANGELOG.md | 4 ++++ packages/pigeon/lib/generator_tools.dart | 2 +- packages/pigeon/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 39ccd55e0be..1c49f46b1cb 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.2.15 + +* Relocates generator classes. + ## 4.2.14 * [c++] Fixes reply sending non EncodableValue wrapped lists. diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index 4d8ed37555b..6624a1dc8ec 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.14'; +const String pigeonVersion = '4.2.15'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index c6d40293853..e9c9d6b4901 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.14 # This must match the version in lib/generator_tools.dart +version: 4.2.15 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.12.0 <3.0.0"