aboutsummaryrefslogtreecommitdiff
path: root/src/ProtoGen/Program.cs
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2014-08-02 21:57:54 +0100
committerJon Skeet <skeet@pobox.com>2014-08-02 21:57:54 +0100
commit92d6214e0f76cc92f35f3a44aa89e0b0e60df5e8 (patch)
treec0f2a5106c67a90509e176837e9b29b2426fba4c /src/ProtoGen/Program.cs
parentfd6c129298e1302c4a96c4d4b56b83f2dcc1838c (diff)
downloadprotobuf-92d6214e0f76cc92f35f3a44aa89e0b0e60df5e8.tar.gz
protobuf-92d6214e0f76cc92f35f3a44aa89e0b0e60df5e8.tar.bz2
protobuf-92d6214e0f76cc92f35f3a44aa89e0b0e60df5e8.zip
Add protoc plugin.
Original patch by igorgatis@gmail.com, tweaked a little before commit. Fixes issue 90.
Diffstat (limited to 'src/ProtoGen/Program.cs')
-rw-r--r--src/ProtoGen/Program.cs29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/ProtoGen/Program.cs b/src/ProtoGen/Program.cs
index 4bd6c463..b11d32e0 100644
--- a/src/ProtoGen/Program.cs
+++ b/src/ProtoGen/Program.cs
@@ -35,7 +35,9 @@
#endregion
using System;
+using System.IO;
using System.Collections.Generic;
+using Google.ProtocolBuffers.Compiler.PluginProto;
using Google.ProtocolBuffers.DescriptorProtos;
namespace Google.ProtocolBuffers.ProtoGen
@@ -62,8 +64,33 @@ namespace Google.ProtocolBuffers.ProtoGen
return 1;
}
+ var request = new CodeGeneratorRequest.Builder();
+ foreach (string inputFile in options.InputFiles)
+ {
+ ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();
+ CSharpOptions.RegisterAllExtensions(extensionRegistry);
+ using (Stream inputStream = File.OpenRead(inputFile))
+ {
+ var fileSet = FileDescriptorSet.ParseFrom(inputStream, extensionRegistry);
+ foreach (var fileProto in fileSet.FileList)
+ {
+ request.AddFileToGenerate(fileProto.Name);
+ request.AddProtoFile(fileProto);
+ }
+ }
+ }
+
Generator generator = Generator.CreateGenerator(options);
- generator.Generate();
+ var response = new CodeGeneratorResponse.Builder();
+ generator.Generate(request.Build(), response);
+ if (response.HasError)
+ {
+ throw new Exception(response.Error);
+ }
+ foreach (var file in response.FileList)
+ {
+ File.WriteAllText(file.Name, file.Content);
+ }
return 0;
}
catch (Exception e)