diff --git a/src/google/protobuf/compiler/csharp/csharp_generator.cc b/src/google/protobuf/compiler/csharp/csharp_generator.cc index deb3d20504..61ed37ad63 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 > 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 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 55ce3285e6..5829c61e7f 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 ed016b46c7..e39911ee71 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() {