aboutsummaryrefslogtreecommitdiffstats
path: root/src/google/protobuf
diff options
context:
space:
mode:
authorBrian Duff <bduff@google.com>2015-01-09 22:31:42 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-01-09 22:31:43 +0000
commitc7c25812eb19d080087b71e08bfe35aff9f21433 (patch)
tree55c02e666ed6f56c3ac9c337cd63e3ac2d6d66e8 /src/google/protobuf
parent25794277fd65aabe917fc6c01b3162e243740634 (diff)
parent5537d6fe4af105eb769bacc530e8d5d9e0b027cb (diff)
downloadexternal_protobuf-c7c25812eb19d080087b71e08bfe35aff9f21433.zip
external_protobuf-c7c25812eb19d080087b71e08bfe35aff9f21433.tar.gz
external_protobuf-c7c25812eb19d080087b71e08bfe35aff9f21433.tar.bz2
Merge "When no clear() is generated, still initialize fields."
Diffstat (limited to 'src/google/protobuf')
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_message.cc32
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_message.h1
2 files changed, 21 insertions, 12 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_message.cc b/src/google/protobuf/compiler/javanano/javanano_message.cc
index 03c7e18..dcfb870 100644
--- a/src/google/protobuf/compiler/javanano/javanano_message.cc
+++ b/src/google/protobuf/compiler/javanano/javanano_message.cc
@@ -256,14 +256,18 @@ void MessageGenerator::Generate(io::Printer* printer) {
}
printer->Print("}\n");
} else {
+ printer->Print(
+ "\n"
+ "public $classname$() {\n",
+ "classname", descriptor_->name());
if (params_.generate_clear()) {
- printer->Print(
- "\n"
- "public $classname$() {\n"
- " clear();\n"
- "}\n",
- "classname", descriptor_->name());
+ printer->Print(" clear();\n");
+ } else {
+ printer->Indent();
+ GenerateFieldInitializers(printer);
+ printer->Outdent();
}
+ printer->Print("}\n");
}
// Other methods in this class
@@ -462,6 +466,15 @@ void MessageGenerator::GenerateClear(io::Printer* printer) {
"classname", descriptor_->name());
printer->Indent();
+ GenerateFieldInitializers(printer);
+
+ printer->Outdent();
+ printer->Print(
+ " return this;\n"
+ "}\n");
+}
+
+void MessageGenerator::GenerateFieldInitializers(io::Printer* printer) {
// Clear bit fields.
int totalInts = (field_generators_.total_bits() + 31) / 32;
for (int i = 0; i < totalInts; i++) {
@@ -479,12 +492,7 @@ void MessageGenerator::GenerateClear(io::Printer* printer) {
if (params_.store_unknown_fields()) {
printer->Print("unknownFieldData = null;\n");
}
-
- printer->Outdent();
- printer->Print(
- " cachedSize = -1;\n"
- " return this;\n"
- "}\n");
+ printer->Print("cachedSize = -1;\n");
}
void MessageGenerator::GenerateClone(io::Printer* printer) {
diff --git a/src/google/protobuf/compiler/javanano/javanano_message.h b/src/google/protobuf/compiler/javanano/javanano_message.h
index 870f3bb..1bb6557 100644
--- a/src/google/protobuf/compiler/javanano/javanano_message.h
+++ b/src/google/protobuf/compiler/javanano/javanano_message.h
@@ -77,6 +77,7 @@ class MessageGenerator {
const FieldDescriptor* field);
void GenerateClear(io::Printer* printer);
+ void GenerateFieldInitializers(io::Printer* printer);
void GenerateEquals(io::Printer* printer);
void GenerateHashCode(io::Printer* printer);
void GenerateClone(io::Printer* printer);