Skip to content

Commit 3716e97

Browse files
committed
SymbolGraphGen: Adopt SemanticAvailableAttr.
1 parent f9f8cfb commit 3716e97

File tree

3 files changed

+22
-35
lines changed

3 files changed

+22
-35
lines changed

lib/SymbolGraphGen/AvailabilityMixin.cpp

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,15 @@ using namespace swift;
1818
using namespace symbolgraphgen;
1919

2020
namespace {
21-
StringRef getDomain(const AvailableAttr &AvAttr) {
22-
switch (AvAttr.getPlatformAgnosticAvailability()) {
23-
// SPM- and Swift-specific availability.
24-
case PlatformAgnosticAvailabilityKind::PackageDescriptionVersionSpecific:
25-
return { "SwiftPM" };
26-
case PlatformAgnosticAvailabilityKind::SwiftVersionSpecific:
27-
case PlatformAgnosticAvailabilityKind::UnavailableInSwift:
28-
return { "Swift" };
29-
// Although these are in the agnostic kinds, they are actually a signal
30-
// that there is either platform-specific or completely platform-agnostic.
31-
// They'll be handled below.
32-
case PlatformAgnosticAvailabilityKind::Deprecated:
33-
case PlatformAgnosticAvailabilityKind::Unavailable:
34-
case PlatformAgnosticAvailabilityKind::None:
35-
case PlatformAgnosticAvailabilityKind::NoAsync:
36-
break;
37-
}
21+
StringRef getDomain(const SemanticAvailableAttr &AvAttr) {
22+
// FIXME: [avalailability] Move the definition of these strings into
23+
// AvailabilityDomain so that new domains are handled automatically.
24+
25+
if (AvAttr.getDomain().isPackageDescription())
26+
return { "SwiftPM" };
27+
28+
if (AvAttr.getDomain().isSwiftLanguage())
29+
return { "Swift" };
3830

3931
// Platform-specific availability.
4032
switch (AvAttr.getPlatform()) {
@@ -73,16 +65,13 @@ StringRef getDomain(const AvailableAttr &AvAttr) {
7365
}
7466
} // end anonymous namespace
7567

76-
Availability::Availability(const AvailableAttr &AvAttr)
77-
: Domain(getDomain(AvAttr)),
78-
Introduced(AvAttr.Introduced),
79-
Deprecated(AvAttr.Deprecated),
80-
Obsoleted(AvAttr.Obsoleted),
81-
Message(AvAttr.Message),
82-
Renamed(AvAttr.Rename),
83-
IsUnconditionallyDeprecated(AvAttr.isUnconditionallyDeprecated()),
84-
IsUnconditionallyUnavailable(AvAttr.isUnconditionallyUnavailable()) {
85-
assert(!Domain.empty());
68+
Availability::Availability(const SemanticAvailableAttr &AvAttr)
69+
: Domain(getDomain(AvAttr)), Introduced(AvAttr.getIntroduced()),
70+
Deprecated(AvAttr.getDeprecated()), Obsoleted(AvAttr.getObsoleted()),
71+
Message(AvAttr.getMessage()), Renamed(AvAttr.getRename()),
72+
IsUnconditionallyDeprecated(AvAttr.isUnconditionallyDeprecated()),
73+
IsUnconditionallyUnavailable(AvAttr.isUnconditionallyUnavailable()) {
74+
assert(!Domain.empty());
8675
}
8776

8877
void

lib/SymbolGraphGen/AvailabilityMixin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ struct Availability {
4949
/// If \c true, is unconditionally unavailable in this \c Domain.
5050
bool IsUnconditionallyUnavailable;
5151

52-
Availability(const AvailableAttr &AvAttr);
52+
Availability(const SemanticAvailableAttr &AvAttr);
5353

5454
/// Update this availability from a duplicate @available
5555
/// attribute with the same platform on the same declaration.

lib/SymbolGraphGen/Symbol.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -637,17 +637,15 @@ void getAvailabilities(const Decl *D,
637637
bool IsParent) {
638638
// DeclAttributes is a linked list in reverse order from where they
639639
// appeared in the source. Let's re-reverse them.
640-
SmallVector<const AvailableAttr *, 4> AvAttrs;
641-
for (const auto *Attr : D->getAttrs()) {
642-
if (const auto *AvAttr = dyn_cast<AvailableAttr>(Attr)) {
643-
AvAttrs.push_back(AvAttr);
644-
}
640+
SmallVector<SemanticAvailableAttr, 4> AvAttrs;
641+
for (auto Attr : D->getSemanticAvailableAttrs(/*includeInactive=*/true)) {
642+
AvAttrs.push_back(Attr);
645643
}
646644
std::reverse(AvAttrs.begin(), AvAttrs.end());
647645

648646
// Now go through them in source order.
649-
for (auto *AvAttr : AvAttrs) {
650-
Availability NewAvailability(*AvAttr);
647+
for (auto AvAttr : AvAttrs) {
648+
Availability NewAvailability(AvAttr);
651649
if (NewAvailability.empty()) {
652650
continue;
653651
}

0 commit comments

Comments
 (0)