diff --git a/dev/src/DocFx/Node/XrefTrait.php b/dev/src/DocFx/Node/XrefTrait.php
index 924eabb7dd33..7bfe0d90570d 100644
--- a/dev/src/DocFx/Node/XrefTrait.php
+++ b/dev/src/DocFx/Node/XrefTrait.php
@@ -17,6 +17,8 @@
namespace Google\Cloud\Dev\DocFx\Node;
+use Google\Cloud\Dev\DocFx\ReservedNames;
+
/**
* @internal
*/
@@ -115,6 +117,14 @@ function ($matches) {
$classParts = empty($class) ? [] : explode('.', $class);
+ // check for reserved names
+ $classParts = array_map(
+ fn ($name) => (false === array_search(
+ strtolower($name), ReservedNames::RESERVED_NAMES
+ ) ? '' : 'PB') . $name,
+ $classParts
+ );
+
if ($property) {
// Convert the underscore property name to camel case getter method name
$property = ltrim($property, '.');
diff --git a/dev/src/DocFx/ReservedNames.php b/dev/src/DocFx/ReservedNames.php
new file mode 100644
index 000000000000..dd246dfe518d
--- /dev/null
+++ b/dev/src/DocFx/ReservedNames.php
@@ -0,0 +1,31 @@
+ 'Google\\Cloud\\AIPlatform\\V1',
'google.bigtable.admin.v2' => 'Google\\Cloud\\Bigtable\\Admin\\V2',
+ 'google.bigtable.v2' => 'Google\\Cloud\\Bigtable\\V2',
'google.logging.v2' => 'Google\\Cloud\\Logging\\V2',
+ 'google.cloud.servicedirectory.v1' => 'Google\\Cloud\\ServiceDirectory\\V1',
];
public function replace(string $description) {
return $this->replaceProtoRef($description);
@@ -273,6 +275,17 @@ public function provideReplaceProtoRefWithXref()
. ' instance_schema_uri.'
],
[
+ // Reserved word used in class name
+ '[Namespace][google.cloud.servicedirectory.v1.Namespace]',
+ 'Namespace',
+ ],
+ [
+ // Reserved word used in path name
+ '[Encoding][google.bigtable.v2.Type.String.Encoding]',
+ 'Encoding',
+ ],
+ [
+ // Parenthesis in code samples should not be modified
'Testing that a code sample like $foo["bar"]["baz"] does not get replaced',
'Testing that a code sample like $foo["bar"]["baz"] does not get replaced'
],