From 7cc05ecb3a6fecf97604ab89803e7cbb34838268 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Mon, 13 Apr 2015 16:32:54 -0700 Subject: [PATCH] fixing implementation of GetFileUmbrellaNamespace --- .../compiler/csharp/csharp_helpers.cc | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/google/protobuf/compiler/csharp/csharp_helpers.cc b/src/google/protobuf/compiler/csharp/csharp_helpers.cc index fd6e37220f..c7e9e4cc7b 100644 --- a/src/google/protobuf/compiler/csharp/csharp_helpers.cc +++ b/src/google/protobuf/compiler/csharp/csharp_helpers.cc @@ -127,26 +127,30 @@ std::string GetFileUmbrellaClassname(const FileDescriptor* descriptor) { } std::string GetFileUmbrellaNamespace(const FileDescriptor* descriptor) { - if (!descriptor->options().has_csharp_umbrella_namespace()) { - bool collision = false; - // TODO(jtattermusch): detect collisions! -// foreach (IDescriptor d in MessageTypes) -// { -// collision |= d.Name == builder.UmbrellaClassname; -// } -// foreach (IDescriptor d in Services) -// { -// collision |= d.Name == builder.UmbrellaClassname; -// } -// foreach (IDescriptor d in EnumTypes) -// { -// collision |= d.Name == builder.UmbrellaClassname; -// } - if (collision) { - return "Proto"; + if (descriptor->options().has_csharp_umbrella_namespace()) { + return descriptor->options().csharp_umbrella_namespace(); + } + bool collision = false; + std::string umbrella_classname = GetFileUmbrellaClassname(descriptor); + for(int i = 0; i < descriptor->message_type_count(); i++) { + if (descriptor->message_type(i)->name() == umbrella_classname) { + collision = true; + break; + } + } + for (int i = 0; i < descriptor->service_count(); i++) { + if (descriptor->service(i)->name() == umbrella_classname) { + collision = true; + break; + } + } + for (int i = 0; i < descriptor->enum_type_count(); i++) { + if (descriptor->enum_type(i)->name() == umbrella_classname) { + collision = true; + break; } } - return ""; + return collision ? "Proto" : ""; } // TODO(jtattermusch): can we reuse a utility function?