diff options
-rw-r--r-- | bindings/xml/comment-xml-schema.rng | 36 | ||||
-rw-r--r-- | tools/libclang/CXComment.cpp | 57 |
2 files changed, 92 insertions, 1 deletions
diff --git a/bindings/xml/comment-xml-schema.rng b/bindings/xml/comment-xml-schema.rng index 3942903788..1438e3c351 100644 --- a/bindings/xml/comment-xml-schema.rng +++ b/bindings/xml/comment-xml-schema.rng @@ -79,6 +79,9 @@ <optional> <ref name="Parameters" /> </optional> + <zeroOrMore> + <ref name="Attribute" /> + </zeroOrMore> <optional> <ref name="ResultDiscussion" /> </optional> @@ -284,6 +287,39 @@ </element> </define> + <define name="Attribute"> + <element name="Availability"> + <attribute name="distribution"> + <data type="string" /> + </attribute> + <optional> + <element name="IntroducedInVersion"> + <data type="float" /> + </element> + </optional> + <optional> + <element name="DeprecatedInVersion"> + <data type="float" /> + </element> + </optional> + <optional> + <element name="RemovedAfterVersion"> + <data type="float" /> + </element> + </optional> + <optional> + <element name="DeprecationSummary"> + <data type="string" /> + </element> + </optional> + <optional> + <element name="Unavailable"> + <data type="boolean" /> + </element> + </optional> + </element> + </define> + <define name="Abstract"> <element name="Abstract"> <zeroOrMore> diff --git a/tools/libclang/CXComment.cpp b/tools/libclang/CXComment.cpp index 4e26a9e984..a132a0d1ba 100644 --- a/tools/libclang/CXComment.cpp +++ b/tools/libclang/CXComment.cpp @@ -1170,7 +1170,62 @@ void CommentASTToXMLConverter::visitFullComment(const FullComment *C) { visit(Parts.Returns); Result << "</ResultDiscussion>"; } - + + if (DI->ThisDecl->hasAttrs()) { + const AttrVec &Attrs = DI->ThisDecl->getAttrs(); + for (unsigned i = 0, e = Attrs.size(); i != e;) { + const AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(Attrs[i++]); + if (!AA) + continue; + // availability attribute info. + + Result << "<Availability"; + StringRef distribution; + if (AA->getPlatform()) { + distribution = AA->getPlatform()->getName(); + if (distribution == "macosx") + distribution = "OSX"; + else + distribution = "iOS"; + } + + Result << " distribution=\""; + Result << distribution; + Result << "\">"; + VersionTuple IntroducedInVersion = AA->getIntroduced(); + if (!IntroducedInVersion.empty()) { + Result << " <IntroducedInVersion>"; + Result << IntroducedInVersion.getAsString(); + Result << "</IntroducedInVersion>"; + } + VersionTuple DeprecatedInVersion = AA->getDeprecated(); + if (!DeprecatedInVersion.empty()) { + Result << " <DeprecatedInVersion>"; + Result << DeprecatedInVersion.getAsString(); + Result << "</DeprecatedInVersion>"; + } + VersionTuple RemovedAfterVersion = AA->getObsoleted(); + if (!RemovedAfterVersion.empty()) { + Result << " <RemovedAfterVersion>"; + Result << RemovedAfterVersion.getAsString(); + Result << "</RemovedAfterVersion>"; + } + StringRef DeprecationSummary = AA->getMessage(); + if (!DeprecationSummary.empty()) { + Result << " <DeprecationSummary>"; + Result << DeprecationSummary; + Result << "</DeprecationSummary>"; + } + Result << " <Unavailable>"; + if (AA->getUnavailable()) + Result << "true"; + else + Result << "false"; + Result << "</Unavailable>"; + Result << " </Availability>"; + } + } + { bool StartTagEmitted = false; for (unsigned i = 0, e = Parts.MiscBlocks.size(); i != e; ++i) { |