diff options
author | Brian Duff <bduff@google.com> | 2013-06-07 00:12:27 -0700 |
---|---|---|
committer | Brian Duff <bduff@google.com> | 2013-06-07 14:00:05 -0700 |
commit | bf79e2de36143b8b617af136c403496515373bb6 (patch) | |
tree | 824b600fb3ed18615fc3d5528146da24fa08fe57 /src | |
parent | 6f59b38386c8ff883c8e9e0a76068fa07d95bfb1 (diff) | |
download | external_protobuf-bf79e2de36143b8b617af136c403496515373bb6.zip external_protobuf-bf79e2de36143b8b617af136c403496515373bb6.tar.gz external_protobuf-bf79e2de36143b8b617af136c403496515373bb6.tar.bz2 |
Fix enum field references with java_multiple_files.
When the java_multiple_files option is on, enums are placed in java
class files based on the name of the original enum type. This fixes
field references to such enum values to point to the correct class
name when setting the default.
Change-Id: I51a2e251c0d0ab1e45a182ba849d314232a74bac
Diffstat (limited to 'src')
-rw-r--r-- | src/google/protobuf/compiler/javanano/javanano_helpers.cc | 18 | ||||
-rw-r--r-- | src/google/protobuf/unittest_enum_multiplejava_nano.proto | 4 |
2 files changed, 18 insertions, 4 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_helpers.cc b/src/google/protobuf/compiler/javanano/javanano_helpers.cc index 7839556..42cb133 100644 --- a/src/google/protobuf/compiler/javanano/javanano_helpers.cc +++ b/src/google/protobuf/compiler/javanano/javanano_helpers.cc @@ -208,7 +208,8 @@ string ClassName(const Params& params, const EnumDescriptor* descriptor) { const string full_name = descriptor->full_name(); // Remove enum class name as we use int's for enums - string base_name = full_name.substr(0, full_name.find_last_of('.')); + int last_dot_in_name = full_name.find_last_of('.'); + string base_name = full_name.substr(0, last_dot_in_name); if (!file->package().empty()) { if (file->package() == base_name.substr(0, file->package().size())) { @@ -226,13 +227,22 @@ string ClassName(const Params& params, const EnumDescriptor* descriptor) { // Construct the path name from the package and outer class - // Add the java package name if it exsits + // Add the java package name if it exists if (params.has_java_package(file_name)) { result += params.java_package(file_name); } - // Add the outer classname if it exists - if (params.has_java_outer_classname(file_name)) { + // If the java_multiple_files option is present, we will generate enums into separate + // classes, each named after the original enum type. This takes precedence over + // any outer_classname. + if (params.java_multiple_files() && last_dot_in_name != string::npos) { + string enum_simple_name = full_name.substr(last_dot_in_name + 1); + if (!result.empty()) { + result += "."; + } + result += enum_simple_name; + } else if (params.has_java_outer_classname(file_name)) { + // Add the outer classname if it exists if (!result.empty()) { result += "."; } diff --git a/src/google/protobuf/unittest_enum_multiplejava_nano.proto b/src/google/protobuf/unittest_enum_multiplejava_nano.proto index d2da6c6..adf017d 100644 --- a/src/google/protobuf/unittest_enum_multiplejava_nano.proto +++ b/src/google/protobuf/unittest_enum_multiplejava_nano.proto @@ -47,3 +47,7 @@ enum SecondTopLevelEnum { SECOND_TOP_LEVEL_SECOND = 2; } +message SomeMessage { + optional FirstTopLevelEnum first = 1; + optional SecondTopLevelEnum second = 2; +} |