Merge pull request #1862 from pherl/3.0.0-GA

Cherry pick c# changes from master
This commit is contained in:
Jisi Liu 2016-09-02 11:36:30 -07:00 committed by GitHub
commit a098e80933
5 changed files with 18 additions and 16 deletions

View File

@ -230,6 +230,12 @@ namespace Google.Protobuf
[TestCase("foo_bar", "fooBar")] [TestCase("foo_bar", "fooBar")]
[TestCase("bananaBanana", "bananaBanana")] [TestCase("bananaBanana", "bananaBanana")]
[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) public void ToCamelCase(string original, string expected)
{ {
Assert.AreEqual(expected, JsonFormatter.ToCamelCase(original)); Assert.AreEqual(expected, JsonFormatter.ToCamelCase(original));

View File

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

View File

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

View File

@ -83,9 +83,6 @@ bool Generator::Generate(
cli_options.base_namespace_specified = true; cli_options.base_namespace_specified = true;
} else if (options[i].first == "internal_access") { } else if (options[i].first == "internal_access") {
cli_options.internal_access = true; 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 { } else {
*error = "Unknown generator option: " + options[i].first; *error = "Unknown generator option: " + options[i].first;
return false; return false;

View File

@ -45,8 +45,7 @@ struct Options {
file_extension(".cs"), file_extension(".cs"),
base_namespace(""), base_namespace(""),
base_namespace_specified(false), base_namespace_specified(false),
internal_access(false), internal_access(false) {
legacy_enum_values(false) {
} }
// Extension of the generated file. Defaults to ".cs" // Extension of the generated file. Defaults to ".cs"
string file_extension; string file_extension;
@ -69,12 +68,6 @@ struct Options {
// Whether the generated classes should have accessibility level of "internal". // Whether the generated classes should have accessibility level of "internal".
// Defaults to false that generates "public" classes. // Defaults to false that generates "public" classes.
bool internal_access; 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 } // namespace csharp