Эх сурвалжийг харах

output file naming logic, configurable file extension, comment rewording

Jan Tattermusch 10 жил өмнө
parent
commit
f61e1791c0

+ 21 - 6
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(), '$');

+ 1 - 1
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;
 }
 

+ 2 - 9
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() {