aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2013-06-07 14:46:45 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-06-07 14:46:45 -0700
commitad5805216d946d262985aa947c3960801a67917f (patch)
tree757f656fb756b4e8266723f07dca1f9631f09b27
parent5f492841b31d0880e28dad37ee55419cd8a5adc2 (diff)
parent661f87ceb8d729cfdf634fc859b3077eccaa5ed7 (diff)
downloadprotobuf-ad5805216d946d262985aa947c3960801a67917f.tar.gz
protobuf-ad5805216d946d262985aa947c3960801a67917f.tar.bz2
protobuf-ad5805216d946d262985aa947c3960801a67917f.zip
am 9459b5c4: Merge "Fix enum field references with java_multiple_files."
* commit '9459b5c45b0ad33bea9376c2afb66cf93da610ac': Fix enum field references with java_multiple_files.
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_helpers.cc18
-rw-r--r--src/google/protobuf/unittest_enum_multiplejava_nano.proto4
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 78395567..42cb1339 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 d2da6c6a..adf017d5 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;
+}