diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 2dbc4186a32cc..fab54591b8faa 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -657,7 +657,7 @@ static void serializeInfo(const RecordInfo &I, json::Object &Obj,
if (!PubMembersArrayRef.empty())
insertArray(Obj, PublicMembersArray, "PublicMembers");
if (!ProtMembersArrayRef.empty())
- Obj["ProtectedMembers"] = ProtectedMembersArray;
+ insertArray(Obj, ProtectedMembersArray, "ProtectedMembers");
if (!PrivateMembersArrayRef.empty())
insertArray(Obj, PrivateMembersArray, "PrivateMembers");
}
diff --git a/clang-tools-extra/clang-doc/assets/class-template.mustache b/clang-tools-extra/clang-doc/assets/class-template.mustache
index 498fc5f079901..19e6e6adf1b44 100644
--- a/clang-tools-extra/clang-doc/assets/class-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/class-template.mustache
@@ -31,22 +31,22 @@
{{/HasPublicMembers}}
- {{#ProtectedMembers}}
+ {{#HasProtectedMembers}}
- {{#Obj}}
+ {{#ProtectedMembers}}
- {{/Obj}}
+ {{/ProtectedMembers}}
- {{/ProtectedMembers}}
+ {{/HasProtectedMembers}}
{{#HasPublicFunctions}}
@@ -178,23 +178,18 @@
{{/HasPublicMembers}}
- {{#ProtectedMembers}}
+ {{#HasProtectedMembers}}
Protected Members
- {{#Obj}}
+ {{#ProtectedMembers}}
{{#IsStatic}}static {{/IsStatic}}{{Type}} {{Name}}
- {{#MemberComments}}
-
- {{>Comments}}
-
- {{/MemberComments}}
- {{/Obj}}
+ {{/ProtectedMembers}}
- {{/ProtectedMembers}}
+ {{/HasProtectedMembers}}
{{#HasPublicFunctions}}
Public Methods
diff --git a/clang-tools-extra/test/clang-doc/json/class.cpp b/clang-tools-extra/test/clang-doc/json/class.cpp
index 9b45f86ff3292..6356aee14c16c 100644
--- a/clang-tools-extra/test/clang-doc/json/class.cpp
+++ b/clang-tools-extra/test/clang-doc/json/class.cpp
@@ -170,6 +170,7 @@ struct MyClass {
// CHECK-NEXT: "HasEnums": true,
// CHECK-NEXT: "HasFriends": true,
// CHECK-NEXT: "HasPrivateMembers": true,
+// CHECK-NEXT: "HasProtectedMembers": true,
// CHECK-NEXT: "HasPublicFunctions": true,
// CHECK-NEXT: "HasPublicMembers": true,
// CHECK-NEXT: "HasRecords": true,
@@ -320,6 +321,14 @@ struct MyClass {
// HTML-NEXT:
// HTML-NEXT:
// HTML-NEXT:
+// HTML:
+// HTML-NEXT: Protected Members
+// HTML-NEXT:
+// HTML-NEXT:
+// HTML-NEXT:
int ProtectedField
+// HTML-NEXT:
+// HTML-NEXT:
+// HTML-NEXT:
// HTML:
// HTML-NEXT: Inner Classes
// HTML-NEXT:
diff --git a/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
index ee2c11061d706..d4260ebae3123 100644
--- a/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
+++ b/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
@@ -117,6 +117,7 @@ TEST_F(JSONGeneratorTest, emitRecordJSON) {
],
"HasEnums": true,
"HasParents": true,
+ "HasProtectedMembers": true,
"HasPublicFunctions": true,
"HasRecords": true,
"HasVirtualParents": true,