|
|
|
@ -84,33 +84,6 @@ std::string RenameEmpty(const std::string& name) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::string MessagePrefix(const Descriptor* message) { |
|
|
|
|
// Empty cannot be php class name.
|
|
|
|
|
if (message->name() == "Empty" && |
|
|
|
|
message->file()->package() == "google.protobuf") { |
|
|
|
|
return "GPB"; |
|
|
|
|
} else { |
|
|
|
|
return (message->file()->options()).php_class_prefix(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::string MessageName(const Descriptor* message, bool is_descriptor) { |
|
|
|
|
string message_name = message->name(); |
|
|
|
|
const Descriptor* descriptor = message->containing_type(); |
|
|
|
|
while (descriptor != NULL) { |
|
|
|
|
message_name = descriptor->name() + '_' + message_name; |
|
|
|
|
descriptor = descriptor->containing_type(); |
|
|
|
|
} |
|
|
|
|
message_name = MessagePrefix(message) + message_name; |
|
|
|
|
|
|
|
|
|
if (message->file()->package() == "") { |
|
|
|
|
return message_name; |
|
|
|
|
} else { |
|
|
|
|
return PhpName(message->file()->package(), is_descriptor) + '\\' + |
|
|
|
|
message_name; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::string MessageFullName(const Descriptor* message, bool is_descriptor) { |
|
|
|
|
if (is_descriptor) { |
|
|
|
|
return StringReplace(message->full_name(), |
|
|
|
@ -131,19 +104,34 @@ std::string EnumFullName(const EnumDescriptor* envm, bool is_descriptor) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::string EnumClassName(const EnumDescriptor* envm) { |
|
|
|
|
string enum_class_name = envm->name(); |
|
|
|
|
const Descriptor* descriptor = envm->containing_type(); |
|
|
|
|
while (descriptor != NULL) { |
|
|
|
|
enum_class_name = descriptor->name() + '_' + enum_class_name; |
|
|
|
|
descriptor = descriptor->containing_type(); |
|
|
|
|
template <typename DescriptorType> |
|
|
|
|
std::string ClassNamePrefix(const DescriptorType* desc) { |
|
|
|
|
// Empty cannot be php class name.
|
|
|
|
|
if (desc->name() == "Empty" && |
|
|
|
|
desc->file()->package() == "google.protobuf") { |
|
|
|
|
return "GPB"; |
|
|
|
|
} else { |
|
|
|
|
return (desc->file()->options()).php_class_prefix(); |
|
|
|
|
} |
|
|
|
|
return enum_class_name; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::string EnumName(const EnumDescriptor* envm, bool is_descriptor) { |
|
|
|
|
string enum_name = EnumClassName(envm); |
|
|
|
|
return PhpName(envm->file()->package(), is_descriptor) + '\\' + enum_name; |
|
|
|
|
|
|
|
|
|
template <typename DescriptorType> |
|
|
|
|
std::string FullClassName(const DescriptorType* desc, bool is_descriptor) { |
|
|
|
|
string classname = desc->name(); |
|
|
|
|
const Descriptor* containing = desc->containing_type(); |
|
|
|
|
while (containing != NULL) { |
|
|
|
|
classname = containing->name() + '_' + classname; |
|
|
|
|
containing = containing->containing_type(); |
|
|
|
|
} |
|
|
|
|
classname = ClassNamePrefix(desc) + classname; |
|
|
|
|
|
|
|
|
|
if (desc->file()->package() == "") { |
|
|
|
|
return classname; |
|
|
|
|
} else { |
|
|
|
|
return PhpName(desc->file()->package(), is_descriptor) + '\\' + |
|
|
|
|
classname; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::string PhpName(const std::string& full_name, bool is_descriptor) { |
|
|
|
@ -231,7 +219,7 @@ std::string GeneratedMetadataFileName(const std::string& proto_file, |
|
|
|
|
|
|
|
|
|
std::string GeneratedMessageFileName(const Descriptor* message, |
|
|
|
|
bool is_descriptor) { |
|
|
|
|
std::string result = MessageName(message, is_descriptor); |
|
|
|
|
std::string result = FullClassName(message, is_descriptor); |
|
|
|
|
for (int i = 0; i < result.size(); i++) { |
|
|
|
|
if (result[i] == '\\') { |
|
|
|
|
result[i] = '/'; |
|
|
|
@ -242,7 +230,7 @@ std::string GeneratedMessageFileName(const Descriptor* message, |
|
|
|
|
|
|
|
|
|
std::string GeneratedEnumFileName(const EnumDescriptor* en, |
|
|
|
|
bool is_descriptor) { |
|
|
|
|
std::string result = EnumName(en, is_descriptor); |
|
|
|
|
std::string result = FullClassName(en, is_descriptor); |
|
|
|
|
for (int i = 0; i < result.size(); i++) { |
|
|
|
|
if (result[i] == '\\') { |
|
|
|
|
result[i] = '/'; |
|
|
|
@ -456,12 +444,12 @@ void GenerateFieldAccessor(const FieldDescriptor* field, bool is_descriptor, |
|
|
|
|
printer->Print( |
|
|
|
|
", \\^class_name^);\n", |
|
|
|
|
"class_name", |
|
|
|
|
MessageName(value->message_type(), is_descriptor) + "::class"); |
|
|
|
|
FullClassName(value->message_type(), is_descriptor) + "::class"); |
|
|
|
|
} else if (value->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) { |
|
|
|
|
printer->Print( |
|
|
|
|
", ^class_name^);\n", |
|
|
|
|
", \\^class_name^);\n", |
|
|
|
|
"class_name", |
|
|
|
|
EnumName(value->enum_type(), is_descriptor) + "::class"); |
|
|
|
|
FullClassName(value->enum_type(), is_descriptor) + "::class"); |
|
|
|
|
} else { |
|
|
|
|
printer->Print(");\n"); |
|
|
|
|
} |
|
|
|
@ -474,23 +462,23 @@ void GenerateFieldAccessor(const FieldDescriptor* field, bool is_descriptor, |
|
|
|
|
printer->Print( |
|
|
|
|
", \\^class_name^);\n", |
|
|
|
|
"class_name", |
|
|
|
|
MessageName(field->message_type(), is_descriptor) + "::class"); |
|
|
|
|
FullClassName(field->message_type(), is_descriptor) + "::class"); |
|
|
|
|
} else if (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) { |
|
|
|
|
printer->Print( |
|
|
|
|
", ^class_name^);\n", |
|
|
|
|
", \\^class_name^);\n", |
|
|
|
|
"class_name", |
|
|
|
|
EnumName(field->enum_type(), is_descriptor) + "::class"); |
|
|
|
|
FullClassName(field->enum_type(), is_descriptor) + "::class"); |
|
|
|
|
} else { |
|
|
|
|
printer->Print(");\n"); |
|
|
|
|
} |
|
|
|
|
} else if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { |
|
|
|
|
printer->Print( |
|
|
|
|
"GPBUtil::checkMessage($var, \\^class_name^::class);\n", |
|
|
|
|
"class_name", MessageName(field->message_type(), is_descriptor)); |
|
|
|
|
"class_name", FullClassName(field->message_type(), is_descriptor)); |
|
|
|
|
} else if (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) { |
|
|
|
|
printer->Print( |
|
|
|
|
"GPBUtil::checkEnum($var, \\^class_name^::class);\n", |
|
|
|
|
"class_name", EnumName(field->enum_type(), is_descriptor)); |
|
|
|
|
"class_name", FullClassName(field->enum_type(), is_descriptor)); |
|
|
|
|
} else if (field->cpp_type() == FieldDescriptor::CPPTYPE_STRING) { |
|
|
|
|
printer->Print( |
|
|
|
|
"GPBUtil::checkString($var, ^utf8^);\n", |
|
|
|
|