aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Yang <TeBoring@users.noreply.github.com>2018-05-30 14:40:42 -0700
committerGitHub <noreply@github.com>2018-05-30 14:40:42 -0700
commita239ed2bda4b246c10c9d0d2a11a1f7bb1f52c86 (patch)
tree7c1ee1fb815911af3be04cd0ea163f66abd5a4bc
parentd31864a7ed97c64426ee06c63b48f5992a52104a (diff)
parent4f5eb100bb2086622b1f3aaec472d83768b68b32 (diff)
downloadprotobuf-a239ed2bda4b246c10c9d0d2a11a1f7bb1f52c86.tar.gz
protobuf-a239ed2bda4b246c10c9d0d2a11a1f7bb1f52c86.tar.bz2
protobuf-a239ed2bda4b246c10c9d0d2a11a1f7bb1f52c86.zip
Merge pull request #4702 from TeBoring/3.6.xv3.6.0rc2
Cherry-pick changes into 3.6.x
-rw-r--r--src/google/protobuf/compiler/php/php_generator.cc20
-rw-r--r--src/google/protobuf/compiler/php/php_generator.h11
2 files changed, 26 insertions, 5 deletions
diff --git a/src/google/protobuf/compiler/php/php_generator.cc b/src/google/protobuf/compiler/php/php_generator.cc
index cdb2f509..a58e1754 100644
--- a/src/google/protobuf/compiler/php/php_generator.cc
+++ b/src/google/protobuf/compiler/php/php_generator.cc
@@ -157,7 +157,7 @@ std::string ClassNamePrefix(const string& classname,
}
template <typename DescriptorType>
-std::string GeneratedClassName(const DescriptorType* desc) {
+std::string GeneratedClassNameImpl(const DescriptorType* desc) {
std::string classname = ClassNamePrefix(desc->name(), desc) + desc->name();
const Descriptor* containing = desc->containing_type();
while (containing != NULL) {
@@ -168,11 +168,23 @@ std::string GeneratedClassName(const DescriptorType* desc) {
return classname;
}
-std::string GeneratedClassName(const ServiceDescriptor* desc) {
+std::string GeneratedClassNameImpl(const ServiceDescriptor* desc) {
std::string classname = desc->name();
return ClassNamePrefix(classname, desc) + classname;
}
+std::string GeneratedClassName(const Descriptor* desc) {
+ return GeneratedClassNameImpl(desc);
+}
+
+std::string GeneratedClassName(const EnumDescriptor* desc) {
+ return GeneratedClassNameImpl(desc);
+}
+
+std::string GeneratedClassName(const ServiceDescriptor* desc) {
+ return GeneratedClassNameImpl(desc);
+}
+
template <typename DescriptorType>
std::string LegacyGeneratedClassName(const DescriptorType* desc) {
std::string classname = desc->name();
@@ -242,7 +254,7 @@ std::string RootPhpNamespace(const DescriptorType* desc, bool is_descriptor) {
template <typename DescriptorType>
std::string FullClassName(const DescriptorType* desc, bool is_descriptor) {
- string classname = GeneratedClassName(desc);
+ string classname = GeneratedClassNameImpl(desc);
string php_namespace = RootPhpNamespace(desc, is_descriptor);
if (php_namespace != "") {
return php_namespace + "\\" + classname;
@@ -1074,7 +1086,7 @@ void LegacyGenerateClassFile(const FileDescriptor* file, const DescriptorType* d
Outdent(&printer);
printer.Print("}\n");
printer.Print("class_exists(^new^::class);\n",
- "new", GeneratedClassName(desc));
+ "new", GeneratedClassNameImpl(desc));
printer.Print("@trigger_error('^old^ is deprecated and will be removed in "
"the next major release. Use ^fullname^ instead', E_USER_DEPRECATED);\n\n",
"old", LegacyFullClassName(desc, is_descriptor),
diff --git a/src/google/protobuf/compiler/php/php_generator.h b/src/google/protobuf/compiler/php/php_generator.h
index 1e011511..b851d9b4 100644
--- a/src/google/protobuf/compiler/php/php_generator.h
+++ b/src/google/protobuf/compiler/php/php_generator.h
@@ -48,9 +48,18 @@ class LIBPROTOC_EXPORT Generator
const string& parameter,
GeneratorContext* generator_context,
string* error) const;
-
};
+// To skip reserved keywords in php, some generated classname are prefixed.
+// Other code generators may need following API to figure out the actual
+// classname.
+LIBPROTOC_EXPORT std::string GeneratedClassName(
+ const google::protobuf::Descriptor* desc);
+LIBPROTOC_EXPORT std::string GeneratedClassName(
+ const google::protobuf::EnumDescriptor* desc);
+LIBPROTOC_EXPORT std::string GeneratedClassName(
+ const google::protobuf::ServiceDescriptor* desc);
+
} // namespace php
} // namespace compiler
} // namespace protobuf