aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
diff options
context:
space:
mode:
authorSofía Rodríguez <sofilin2000@icloud.com>2024-01-19 11:56:53 +0100
committerGitHub <noreply@github.com>2024-01-19 10:56:53 +0000
commit3d4128f7ff1cd44b95e5057295704f86c0f0b162 (patch)
tree1386b0a31f59f7b4752eecd3cea39e537382ccd2 /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
parenta90347ecc7e32c25a3b3820723f8405369f3abdc (diff)
downloadllvm-3d4128f7ff1cd44b95e5057295704f86c0f0b162.zip
llvm-3d4128f7ff1cd44b95e5057295704f86c0f0b162.tar.gz
llvm-3d4128f7ff1cd44b95e5057295704f86c0f0b162.tar.bz2
[clang][ExtractAPI] Record availability information only for the target platform (#76823)
Currently, ExtractAPI provides availability information for all platforms within a given domain. With this change, we narrow down the output to include availability details only for the specified target platform, so users can generate the symbol graph with only the availability information they need, omitting information of the other platforms. This change reverts the functionality introduced in [`57c9780`](https://github.com/llvm/llvm-project/commit/57c9780). rdar://120419037
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r--clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp56
1 files changed, 25 insertions, 31 deletions
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
index 53b2229..ee424a1 100644
--- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -147,46 +147,40 @@ Object serializeSourceRange(const PresumedLoc &BeginLoc,
/// Serialize the availability attributes of a symbol.
///
/// Availability information contains the introduced, deprecated, and obsoleted
-/// versions of the symbol for a given domain (roughly corresponds to a
-/// platform) as semantic versions, if not default. Availability information
-/// also contains flags to indicate if the symbol is unconditionally unavailable
-/// or deprecated, i.e. \c __attribute__((unavailable)) and \c
-/// __attribute__((deprecated)).
+/// versions of the symbol as semantic versions, if not default.
+/// Availability information also contains flags to indicate if the symbol is
+/// unconditionally unavailable or deprecated,
+/// i.e. \c __attribute__((unavailable)) and \c __attribute__((deprecated)).
///
/// \returns \c std::nullopt if the symbol has default availability attributes,
-/// or an \c Array containing the formatted availability information.
-std::optional<Array>
-serializeAvailability(const AvailabilitySet &Availabilities) {
- if (Availabilities.isDefault())
+/// or an \c Array containing an object with the formatted availability
+/// information.
+std::optional<Array> serializeAvailability(const AvailabilityInfo &Avail) {
+ if (Avail.isDefault())
return std::nullopt;
+ Object Availability;
Array AvailabilityArray;
-
- if (Availabilities.isUnconditionallyDeprecated()) {
+ Availability["domain"] = Avail.Domain;
+ serializeObject(Availability, "introduced",
+ serializeSemanticVersion(Avail.Introduced));
+ serializeObject(Availability, "deprecated",
+ serializeSemanticVersion(Avail.Deprecated));
+ serializeObject(Availability, "obsoleted",
+ serializeSemanticVersion(Avail.Obsoleted));
+ if (Avail.isUnconditionallyDeprecated()) {
Object UnconditionallyDeprecated;
UnconditionallyDeprecated["domain"] = "*";
UnconditionallyDeprecated["isUnconditionallyDeprecated"] = true;
AvailabilityArray.emplace_back(std::move(UnconditionallyDeprecated));
}
-
- // Note unconditionally unavailable records are skipped.
-
- for (const auto &AvailInfo : Availabilities) {
- Object Availability;
- Availability["domain"] = AvailInfo.Domain;
- if (AvailInfo.Unavailable)
- Availability["isUnconditionallyUnavailable"] = true;
- else {
- serializeObject(Availability, "introduced",
- serializeSemanticVersion(AvailInfo.Introduced));
- serializeObject(Availability, "deprecated",
- serializeSemanticVersion(AvailInfo.Deprecated));
- serializeObject(Availability, "obsoleted",
- serializeSemanticVersion(AvailInfo.Obsoleted));
- }
- AvailabilityArray.emplace_back(std::move(Availability));
+ if (Avail.isUnconditionallyUnavailable()) {
+ Object UnconditionallyUnavailable;
+ UnconditionallyUnavailable["domain"] = "*";
+ UnconditionallyUnavailable["isUnconditionallyUnavailable"] = true;
+ AvailabilityArray.emplace_back(std::move(UnconditionallyUnavailable));
}
-
+ AvailabilityArray.emplace_back(std::move(Availability));
return AvailabilityArray;
}
@@ -738,7 +732,7 @@ bool SymbolGraphSerializer::shouldSkip(const APIRecord &Record) const {
return true;
// Skip unconditionally unavailable symbols
- if (Record.Availabilities.isUnconditionallyUnavailable())
+ if (Record.Availability.isUnconditionallyUnavailable())
return true;
// Filter out symbols prefixed with an underscored as they are understood to
@@ -764,7 +758,7 @@ SymbolGraphSerializer::serializeAPIRecord(const RecordTy &Record) const {
Obj, "location",
serializeSourceLocation(Record.Location, /*IncludeFileURI=*/true));
serializeArray(Obj, "availability",
- serializeAvailability(Record.Availabilities));
+ serializeAvailability(Record.Availability));
serializeObject(Obj, "docComment", serializeDocComment(Record.Comment));
serializeArray(Obj, "declarationFragments",
serializeDeclarationFragments(Record.Declaration));