aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf/compiler/java/java_enum.cc
diff options
context:
space:
mode:
authorGravatar Feng Xiao <xfxyjwf@gmail.com>2014-11-10 17:34:54 -0800
committerGravatar Feng Xiao <xfxyjwf@gmail.com>2014-11-10 17:34:54 -0800
commit6ef984af4b0c63c1c33127a12dcfc8e6359f0c9e (patch)
treed17c61ff9f3ae28224fbddac6d26bfc59e2cf755 /src/google/protobuf/compiler/java/java_enum.cc
parentbaca1a8a1aa180c42de6278d3b8286c4496c6a10 (diff)
Down-integrate from internal code base.
Diffstat (limited to 'src/google/protobuf/compiler/java/java_enum.cc')
-rw-r--r--src/google/protobuf/compiler/java/java_enum.cc32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/google/protobuf/compiler/java/java_enum.cc b/src/google/protobuf/compiler/java/java_enum.cc
index 668377a3..0353b607 100644
--- a/src/google/protobuf/compiler/java/java_enum.cc
+++ b/src/google/protobuf/compiler/java/java_enum.cc
@@ -111,6 +111,10 @@ void EnumGenerator::Generate(io::Printer* printer) {
"$name$($index$, $number$),\n");
}
+ if (SupportUnknownEnumValue(descriptor_->file())) {
+ printer->Print("UNRECOGNIZED(-1, -1),\n");
+ }
+
printer->Print(
";\n"
"\n");
@@ -141,7 +145,17 @@ void EnumGenerator::Generate(io::Printer* printer) {
printer->Print(
"\n"
- "public final int getNumber() { return value; }\n"
+ "public final int getNumber() {\n");
+ if (SupportUnknownEnumValue(descriptor_->file())) {
+ printer->Print(
+ " if (index == -1) {\n"
+ " throw new java.lang.IllegalArgumentException(\n"
+ " \"Can't get the number of an unknown enum value.\");\n"
+ " }\n");
+ }
+ printer->Print(
+ " return value;\n"
+ "}\n"
"\n"
"public static $classname$ valueOf(int value) {\n"
" switch (value) {\n",
@@ -231,11 +245,12 @@ void EnumGenerator::Generate(io::Printer* printer) {
"index", SimpleItoa(descriptor_->index()));
}
printer->Print(
- "return $immutable_package$.$descriptor_class$.getDescriptor()\n"
+ "return $immutable_package$.$descriptor_class$.$descriptor$\n"
" .getEnumTypes().get($index$);\n",
"immutable_package", FileJavaPackage(descriptor_->file(), true),
"descriptor_class",
name_resolver_->GetDescriptorClassName(descriptor_->file()),
+ "descriptor", "getDescriptor()",
"index", SimpleItoa(descriptor_->index()));
printer->Outdent();
}
@@ -283,11 +298,18 @@ void EnumGenerator::Generate(io::Printer* printer) {
" if (desc.getType() != getDescriptor()) {\n"
" throw new java.lang.IllegalArgumentException(\n"
" \"EnumValueDescriptor is not for this type.\");\n"
- " }\n"
+ " }\n",
+ "classname", descriptor_->name());
+ if (SupportUnknownEnumValue(descriptor_->file())) {
+ printer->Print(
+ " if (desc.getIndex() == -1) {\n"
+ " return UNRECOGNIZED;\n"
+ " }\n");
+ }
+ printer->Print(
" return VALUES[desc.getIndex()];\n"
"}\n"
- "\n",
- "classname", descriptor_->name());
+ "\n");
// index is only used for reflection; lite implementation does not need it
printer->Print("private final int index;\n");