Преглед изворни кода

Merge pull request #1862 from pherl/3.0.0-GA

Cherry pick c# changes from master
Jisi Liu пре 9 година
родитељ
комит
a098e80933

+ 6 - 0
csharp/src/Google.Protobuf.Test/JsonFormatterTest.cs

@@ -230,6 +230,12 @@ namespace Google.Protobuf
         [TestCase("foo_bar", "fooBar")]
         [TestCase("bananaBanana", "bananaBanana")]
         [TestCase("BANANABanana", "bananaBanana")]
+        [TestCase("simple", "simple")]
+        [TestCase("ACTION_AND_ADVENTURE", "actionAndAdventure")]
+        [TestCase("action_and_adventure", "actionAndAdventure")]
+        [TestCase("kFoo", "kFoo")]
+        [TestCase("HTTPServer", "httpServer")]
+        [TestCase("CLIENT", "client")]
         public void ToCamelCase(string original, string expected)
         {
             Assert.AreEqual(expected, JsonFormatter.ToCamelCase(original));

+ 10 - 2
csharp/src/Google.Protobuf/JsonFormatter.cs

@@ -274,7 +274,6 @@ namespace Google.Protobuf
         }
 
         // Converted from src/google/protobuf/util/internal/utility.cc ToCamelCase
-        // TODO: Use the new field in FieldDescriptor.
         internal static string ToCamelCase(string input)
         {
             bool capitalizeNext = false;
@@ -305,6 +304,7 @@ namespace Google.Protobuf
                         (!wasCap || (i + 1 < input.Length && char.IsLower(input[i + 1]))))
                     {
                         firstWord = false;
+                        result.Append(input[i]);
                     }
                     else
                     {
@@ -320,8 +320,16 @@ namespace Google.Protobuf
                         result.Append(char.ToUpperInvariant(input[i]));
                         continue;
                     }
+                    else
+                    {
+                        result.Append(input[i]);
+                        continue;
+                    }
+                }
+                else
+                {
+                    result.Append(char.ToLowerInvariant(input[i]));
                 }
-                result.Append(input[i]);
             }
             return result.ToString();
         }

+ 1 - 3
src/google/protobuf/compiler/csharp/csharp_enum.cc

@@ -68,9 +68,7 @@ void EnumGenerator::Generate(io::Printer* printer) {
   for (int i = 0; i < descriptor_->value_count(); i++) {
       WriteEnumValueDocComment(printer, descriptor_->value(i));
       string original_name = descriptor_->value(i)->name();
-      string name = options()->legacy_enum_values
-          ? descriptor_->value(i)->name()
-          : GetEnumValueName(descriptor_->name(), descriptor_->value(i)->name());
+      string name = GetEnumValueName(descriptor_->name(), descriptor_->value(i)->name());
       // Make sure we don't get any duplicate names due to prefix removal.
       while (!used_names.insert(name).second) {
         // It's possible we'll end up giving this warning multiple times, but that's better than not at all.

+ 0 - 3
src/google/protobuf/compiler/csharp/csharp_generator.cc

@@ -83,9 +83,6 @@ bool Generator::Generate(
       cli_options.base_namespace_specified = true;
     } else if (options[i].first == "internal_access") {
       cli_options.internal_access = true;
-    } else if (options[i].first == "legacy_enum_values") {
-      // TODO: Remove this before final release
-      cli_options.legacy_enum_values = true;
     } else {
       *error = "Unknown generator option: " + options[i].first;
       return false;

+ 1 - 8
src/google/protobuf/compiler/csharp/csharp_options.h

@@ -45,8 +45,7 @@ struct Options {
       file_extension(".cs"),
       base_namespace(""),
       base_namespace_specified(false),
-      internal_access(false),
-      legacy_enum_values(false) {
+      internal_access(false) {
   }
   // Extension of the generated file. Defaults to ".cs"
   string file_extension;
@@ -69,12 +68,6 @@ struct Options {
   // Whether the generated classes should have accessibility level of "internal".
   // Defaults to false that generates "public" classes.
   bool internal_access;
-  // By default, C# codegen now uses PascalCased enum values names, after
-  // removing the enum type name as a prefix (if it *is* a prefix of the value).
-  // Setting this option reverts to the previous behavior of just copying the
-  // value name specified in the .proto file, allowing gradual migration.
-  // This option will be removed before final release.
-  bool legacy_enum_values;
 };
 
 }  // namespace csharp