|
@@ -624,15 +624,17 @@ void GenerateField(const FieldDescriptor* field, io::Printer* printer,
|
|
printer->Print(
|
|
printer->Print(
|
|
"private $^name^;\n",
|
|
"private $^name^;\n",
|
|
"name", field->name());
|
|
"name", field->name());
|
|
- } else if (field->containing_oneof()) {
|
|
|
|
|
|
+ } else if (field->real_containing_oneof()) {
|
|
// Oneof fields are handled by GenerateOneofField.
|
|
// Oneof fields are handled by GenerateOneofField.
|
|
return;
|
|
return;
|
|
} else {
|
|
} else {
|
|
|
|
+ std::string initial_value =
|
|
|
|
+ field->has_presence() ? "null" : DefaultForField(field);
|
|
GenerateFieldDocComment(printer, field, is_descriptor, kFieldProperty);
|
|
GenerateFieldDocComment(printer, field, is_descriptor, kFieldProperty);
|
|
printer->Print(
|
|
printer->Print(
|
|
- "protected $^name^ = ^default^;\n",
|
|
|
|
|
|
+ "protected $^name^ = ^initial_value^;\n",
|
|
"name", field->name(),
|
|
"name", field->name(),
|
|
- "default", DefaultForField(field));
|
|
|
|
|
|
+ "initial_value", initial_value);
|
|
}
|
|
}
|
|
|
|
|
|
if (is_descriptor) {
|
|
if (is_descriptor) {
|
|
@@ -652,20 +654,41 @@ void GenerateOneofField(const OneofDescriptor* oneof, io::Printer* printer) {
|
|
|
|
|
|
void GenerateFieldAccessor(const FieldDescriptor* field, bool is_descriptor,
|
|
void GenerateFieldAccessor(const FieldDescriptor* field, bool is_descriptor,
|
|
io::Printer* printer) {
|
|
io::Printer* printer) {
|
|
- const OneofDescriptor* oneof = field->containing_oneof();
|
|
|
|
|
|
+ const OneofDescriptor* oneof = field->real_containing_oneof();
|
|
|
|
|
|
// Generate getter.
|
|
// Generate getter.
|
|
|
|
+ GenerateFieldDocComment(printer, field, is_descriptor, kFieldGetter);
|
|
|
|
+
|
|
if (oneof != NULL) {
|
|
if (oneof != NULL) {
|
|
- GenerateFieldDocComment(printer, field, is_descriptor, kFieldGetter);
|
|
|
|
printer->Print(
|
|
printer->Print(
|
|
"public function get^camel_name^()\n"
|
|
"public function get^camel_name^()\n"
|
|
"{\n"
|
|
"{\n"
|
|
" return $this->readOneof(^number^);\n"
|
|
" return $this->readOneof(^number^);\n"
|
|
|
|
+ "}\n\n"
|
|
|
|
+ "public function has^camel_name^()\n"
|
|
|
|
+ "{\n"
|
|
|
|
+ " return $this->hasOneof(^number^);\n"
|
|
"}\n\n",
|
|
"}\n\n",
|
|
"camel_name", UnderscoresToCamelCase(field->name(), true),
|
|
"camel_name", UnderscoresToCamelCase(field->name(), true),
|
|
"number", IntToString(field->number()));
|
|
"number", IntToString(field->number()));
|
|
|
|
+ } else if (field->has_presence()) {
|
|
|
|
+ printer->Print(
|
|
|
|
+ "public function get^camel_name^()\n"
|
|
|
|
+ "{\n"
|
|
|
|
+ " return isset($this->^name^) ? $this->^name^ : ^default_value^;\n"
|
|
|
|
+ "}\n\n"
|
|
|
|
+ "public function has^camel_name^()\n"
|
|
|
|
+ "{\n"
|
|
|
|
+ " return isset($this->^name^);\n"
|
|
|
|
+ "}\n\n"
|
|
|
|
+ "public function clear^camel_name^()\n"
|
|
|
|
+ "{\n"
|
|
|
|
+ " unset($this->^name^);\n"
|
|
|
|
+ "}\n\n",
|
|
|
|
+ "camel_name", UnderscoresToCamelCase(field->name(), true),
|
|
|
|
+ "name", field->name(),
|
|
|
|
+ "default_value", DefaultForField(field));
|
|
} else {
|
|
} else {
|
|
- GenerateFieldDocComment(printer, field, is_descriptor, kFieldGetter);
|
|
|
|
printer->Print(
|
|
printer->Print(
|
|
"public function get^camel_name^()\n"
|
|
"public function get^camel_name^()\n"
|
|
"{\n"
|
|
"{\n"
|
|
@@ -878,7 +901,7 @@ void GenerateMessageToPool(const string& name_prefix, const Descriptor* message,
|
|
"value", ToUpper(val->type_name()),
|
|
"value", ToUpper(val->type_name()),
|
|
"number", StrCat(field->number()),
|
|
"number", StrCat(field->number()),
|
|
"other", EnumOrMessageSuffix(val, true));
|
|
"other", EnumOrMessageSuffix(val, true));
|
|
- } else if (!field->containing_oneof()) {
|
|
|
|
|
|
+ } else if (!field->real_containing_oneof()) {
|
|
printer->Print(
|
|
printer->Print(
|
|
"->^label^('^field^', "
|
|
"->^label^('^field^', "
|
|
"\\Google\\Protobuf\\Internal\\GPBType::^type^, ^number^^other^)\n",
|
|
"\\Google\\Protobuf\\Internal\\GPBType::^type^, ^number^^other^)\n",
|
|
@@ -891,7 +914,7 @@ void GenerateMessageToPool(const string& name_prefix, const Descriptor* message,
|
|
}
|
|
}
|
|
|
|
|
|
// oneofs.
|
|
// oneofs.
|
|
- for (int i = 0; i < message->oneof_decl_count(); i++) {
|
|
|
|
|
|
+ for (int i = 0; i < message->real_oneof_decl_count(); i++) {
|
|
const OneofDescriptor* oneof = message->oneof_decl(i);
|
|
const OneofDescriptor* oneof = message->oneof_decl(i);
|
|
printer->Print("->oneof(^name^)\n",
|
|
printer->Print("->oneof(^name^)\n",
|
|
"name", oneof->name());
|
|
"name", oneof->name());
|
|
@@ -1414,7 +1437,7 @@ void GenerateMessageFile(const FileDescriptor* file, const Descriptor* message,
|
|
const FieldDescriptor* field = message->field(i);
|
|
const FieldDescriptor* field = message->field(i);
|
|
GenerateField(field, &printer, is_descriptor);
|
|
GenerateField(field, &printer, is_descriptor);
|
|
}
|
|
}
|
|
- for (int i = 0; i < message->oneof_decl_count(); i++) {
|
|
|
|
|
|
+ for (int i = 0; i < message->real_oneof_decl_count(); i++) {
|
|
const OneofDescriptor* oneof = message->oneof_decl(i);
|
|
const OneofDescriptor* oneof = message->oneof_decl(i);
|
|
GenerateOneofField(oneof, &printer);
|
|
GenerateOneofField(oneof, &printer);
|
|
}
|
|
}
|
|
@@ -1443,7 +1466,7 @@ void GenerateMessageFile(const FileDescriptor* file, const Descriptor* message,
|
|
const FieldDescriptor* field = message->field(i);
|
|
const FieldDescriptor* field = message->field(i);
|
|
GenerateFieldAccessor(field, is_descriptor, &printer);
|
|
GenerateFieldAccessor(field, is_descriptor, &printer);
|
|
}
|
|
}
|
|
- for (int i = 0; i < message->oneof_decl_count(); i++) {
|
|
|
|
|
|
+ for (int i = 0; i < message->real_oneof_decl_count(); i++) {
|
|
const OneofDescriptor* oneof = message->oneof_decl(i);
|
|
const OneofDescriptor* oneof = message->oneof_decl(i);
|
|
printer.Print(
|
|
printer.Print(
|
|
"/**\n"
|
|
"/**\n"
|