| Index: lib/file_generator.dart
|
| diff --git a/lib/file_generator.dart b/lib/file_generator.dart
|
| index f1f78f2bd4cb24a8d44fad5d502d625a213849d2..148e2a6ebadfb5fd6e648d99937feb60a22e60cb 100644
|
| --- a/lib/file_generator.dart
|
| +++ b/lib/file_generator.dart
|
| @@ -4,6 +4,9 @@
|
|
|
| part of protoc;
|
|
|
| +/// Generates the Dart output files for one .proto input file.
|
| +///
|
| +/// Outputs include .pb.dart, pbenum.dart, and .pbjson.dart.
|
| class FileGenerator extends ProtobufContainer {
|
| /// Returns the the mixin to use by default in this file,
|
| /// or null for no mixin by default.
|
| @@ -111,23 +114,32 @@ class FileGenerator extends ProtobufContainer {
|
| return libraryName;
|
| }
|
|
|
| - CodeGeneratorResponse_File generateResponse(OutputConfiguration config) {
|
| - IndentingWriter out = new IndentingWriter();
|
| + /// Generates all the Dart files for this .proto file.
|
| + List<CodeGeneratorResponse_File> generateFiles(OutputConfiguration config) {
|
| + if (!_linked) throw new StateError("not linked");
|
|
|
| - generate(out, config);
|
| + makeFile(String extension, String content) {
|
| + Uri protoUrl = new Uri.file(_fileDescriptor.name);
|
| + Uri dartUrl = config.outputPathFor(protoUrl, extension);
|
| + return new CodeGeneratorResponse_File()
|
| + ..name = dartUrl.path
|
| + ..content = content;
|
| + }
|
|
|
| - Uri filePath = new Uri.file(_fileDescriptor.name);
|
| - return new CodeGeneratorResponse_File()
|
| - ..name = config.outputPathFor(filePath, ".pb.dart").path
|
| - ..content = out.toString();
|
| + return [
|
| + makeFile(".pb.dart", generateMainFile(config)),
|
| + makeFile(".pbenum.dart", generateEnumFile(config)),
|
| + makeFile(".pbjson.dart", generateJsonFile(config)),
|
| + ];
|
| }
|
|
|
| - /// Generates the Dart code for this .proto file.
|
| - void generate(IndentingWriter out,
|
| + /// Returns the contents of the .pb.dart file for this .proto file.
|
| + String generateMainFile(
|
| [OutputConfiguration config = const DefaultOutputConfiguration()]) {
|
| if (!_linked) throw new StateError("not linked");
|
| + IndentingWriter out = new IndentingWriter();
|
|
|
| - generateHeader(out, config);
|
| + writeMainHeader(out, config);
|
|
|
| // Generate code.
|
| for (MessageGenerator m in messageGenerators) {
|
| @@ -158,10 +170,12 @@ class FileGenerator extends ProtobufContainer {
|
| for (ServiceGenerator s in serviceGenerators) {
|
| s.generate(out);
|
| }
|
| +
|
| + return out.toString();
|
| }
|
|
|
| - /// Prints header and imports.
|
| - void generateHeader(IndentingWriter out,
|
| + /// Writes the header and imports for the .pb.dart file.
|
| + void writeMainHeader(IndentingWriter out,
|
| [OutputConfiguration config = const DefaultOutputConfiguration()]) {
|
| String libraryName = _generateLibraryName(protoFileUri);
|
| out.println('///\n'
|
| @@ -180,7 +194,7 @@ class FileGenerator extends ProtobufContainer {
|
| }
|
|
|
| if (_needsProtobufImport) {
|
| - out.println("import 'package:protobuf/protobuf.dart';");
|
| + out.println("import 'package:protobuf/protobuf.dart';");
|
| out.println();
|
| }
|
|
|
| @@ -292,21 +306,10 @@ class FileGenerator extends ProtobufContainer {
|
| return imports;
|
| }
|
|
|
| - CodeGeneratorResponse_File generateEnumResponse(OutputConfiguration config) {
|
| - if (!_linked) throw new StateError("not linked");
|
| -
|
| - IndentingWriter out = new IndentingWriter();
|
| -
|
| - generateEnumFile(out, config);
|
| -
|
| - Uri filePath = new Uri.file(_fileDescriptor.name);
|
| - return new CodeGeneratorResponse_File()
|
| - ..name = config.outputPathFor(filePath, ".pbenum.dart").path
|
| - ..content = out.toString();
|
| - }
|
| -
|
| - void generateEnumFile(IndentingWriter out,
|
| + /// Returns the contents of the .pbenum.dart file for this .proto file.
|
| + String generateEnumFile(
|
| [OutputConfiguration config = const DefaultOutputConfiguration()]) {
|
| + if (!_linked) throw new StateError("not linked");
|
| Uri filePath = new Uri.file(_fileDescriptor.name);
|
| if (filePath.isAbsolute) {
|
| // protoc should never generate a file descriptor with an absolute path.
|
| @@ -315,6 +318,7 @@ class FileGenerator extends ProtobufContainer {
|
|
|
| var baseLibraryName = _generateLibraryName(filePath);
|
| var libraryName = baseLibraryName + "_pbenum";
|
| + var out = new IndentingWriter();
|
| out.print('''
|
| ///
|
| // Generated code. Do not modify.
|
| @@ -335,6 +339,8 @@ library $libraryName;
|
| for (MessageGenerator m in messageGenerators) {
|
| m.generateEnums(out);
|
| }
|
| +
|
| + return out.toString();
|
| }
|
|
|
| /// Returns the number of enum types generated in the .pbenum.dart file.
|
| @@ -346,22 +352,10 @@ library $libraryName;
|
| return count;
|
| }
|
|
|
| - CodeGeneratorResponse_File generateJsonDartResponse(
|
| - OutputConfiguration config) {
|
| - if (!_linked) throw new StateError("not linked");
|
| -
|
| - IndentingWriter out = new IndentingWriter();
|
| -
|
| - generateJsonDart(out, config);
|
| -
|
| - Uri filePath = new Uri.file(_fileDescriptor.name);
|
| - return new CodeGeneratorResponse_File()
|
| - ..name = config.outputPathFor(filePath, ".pbjson.dart").path
|
| - ..content = out.toString();
|
| - }
|
| -
|
| - void generateJsonDart(IndentingWriter out,
|
| + /// Returns the contents of the .pbjson.dart file for this .proto file.
|
| + String generateJsonFile(
|
| [OutputConfiguration config = const DefaultOutputConfiguration()]) {
|
| + if (!_linked) throw new StateError("not linked");
|
| Uri filePath = new Uri.file(_fileDescriptor.name);
|
| if (filePath.isAbsolute) {
|
| // protoc should never generate a file descriptor with an absolute path.
|
| @@ -370,6 +364,7 @@ library $libraryName;
|
|
|
| var baseLibraryName = _generateLibraryName(filePath);
|
| var libraryName = baseLibraryName + "_pbjson";
|
| + var out = new IndentingWriter();
|
| out.print('''
|
| ///
|
| // Generated code. Do not modify.
|
| @@ -400,6 +395,8 @@ library $libraryName;
|
| for (ServiceGenerator s in serviceGenerators) {
|
| s.generateConstants(out);
|
| }
|
| +
|
| + return out.toString();
|
| }
|
|
|
| /// Returns the generator for each .pbjson.dart file the generated
|
|
|