aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Jan Tattermusch <jtattermusch@google.com>2015-04-13 15:10:07 -0700
committerGravatar Jan Tattermusch <jtattermusch@google.com>2015-04-13 15:10:07 -0700
commitf61e1791c0df2a518103b5924ee76098d5b72fab (patch)
treedcd5c9413b925d8a58e5d736ef3a25f08d31cb2c
parent8cec65e761a90a6370e4f4439abd072f43834505 (diff)
output file naming logic, configurable file extension, comment rewording
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_generator.cc27
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_helpers.cc2
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc11
3 files changed, 24 insertions, 16 deletions
diff --git a/src/google/protobuf/compiler/csharp/csharp_generator.cc b/src/google/protobuf/compiler/csharp/csharp_generator.cc
index deb3d205..61ed37ad 100644
--- a/src/google/protobuf/compiler/csharp/csharp_generator.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_generator.cc
@@ -49,6 +49,11 @@ namespace protobuf {
namespace compiler {
namespace csharp {
+std::string GetOutputFile(const google::protobuf::FileDescriptor* file, const std::string file_extension)
+{
+ return GetFileUmbrellaClassname(file) + file_extension;
+}
+
void GenerateFile(const google::protobuf::FileDescriptor* file,
Writer* writer) {
UmbrellaClassGenerator umbrellaGenerator(file);
@@ -61,13 +66,23 @@ bool Generator::Generate(
GeneratorContext* generator_context,
string* error) const {
- // TODO(jtattermusch): parse generator parameters:
- // cls_compliance
- // file_extension
+ vector<pair<string, string> > options;
+ ParseGeneratorParameter(parameter, &options);
+
+ std::string file_extension = ".cs";
+ for (int i = 0; i < options.size(); i++) {
+ if (options[i].first == "no_cls_compliance") {
+ *error = "Turning off CLS compliance is not implemented yet.";
+ return false;
+ } else if (options[i].first == "file_extension") {
+ file_extension = options[i].second;
+ } else {
+ *error = "Unknown generator option: " + options[i].first;
+ return false;
+ }
+ }
- // TODO(jtattermusch): rework output file naming logic
- std::string filename =
- StripDotProto(file->name()) + ".cs";
+ std::string filename = GetOutputFile(file, file_extension);
scoped_ptr<io::ZeroCopyOutputStream> output(
generator_context->Open(filename));
io::Printer printer(output.get(), '$');
diff --git a/src/google/protobuf/compiler/csharp/csharp_helpers.cc b/src/google/protobuf/compiler/csharp/csharp_helpers.cc
index 55ce3285..5829c61e 100644
--- a/src/google/protobuf/compiler/csharp/csharp_helpers.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_helpers.cc
@@ -364,7 +364,7 @@ FieldGeneratorBase* CreateFieldGenerator(const FieldDescriptor* descriptor,
}
bool HasRequiredFields(const Descriptor* descriptor) {
- // TODO(jtattermusch): implement this.
+ // TODO(jtattermusch): implement HasRequiredFields logic.
return true;
}
diff --git a/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc b/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc
index ed016b46..e39911ee 100644
--- a/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc
@@ -62,18 +62,11 @@ SourceGeneratorBase::~SourceGeneratorBase() {
}
void SourceGeneratorBase::WriteGeneratedCodeAttributes(Writer* writer) {
- // TODO(jtattermusch):
- //if (descriptor.File.CSharpOptions.GeneratedCodeAttributes)
- // {
- // writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]");
- // writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]",
- // GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version);
- // }
+ // This hook can be used to reintroduce generated code attributes in the future.
}
std::string SourceGeneratorBase::class_access_level() {
- // TODO(jtattermusch): implement this
- return "public";
+ return "public"; // public_classes is always on.
}
bool SourceGeneratorBase::cls_compliance() {