File tree Expand file tree Collapse file tree 2 files changed +56
-6
lines changed Expand file tree Collapse file tree 2 files changed +56
-6
lines changed Original file line number Diff line number Diff line change @@ -403,12 +403,35 @@ void AvailabilityContext::print(llvm::raw_ostream &os) const {
403403 os << " version=" << stringForAvailability (getPlatformRange ());
404404
405405 auto domainInfos = storage->getDomainInfos ();
406- if (domainInfos.size () > 0 ) {
407- os << " unavailable=" ;
408- llvm::interleave (
409- domainInfos, os,
410- [&](const DomainInfo &domainInfo) { domainInfo.getDomain ().print (os); },
411- " ," );
406+ if (!domainInfos.empty ()) {
407+ auto availableInfos = llvm::make_filter_range (
408+ domainInfos, [](auto info) { return !info.isUnavailable (); });
409+
410+ if (!availableInfos.empty ()) {
411+ os << " available=" ;
412+ llvm::interleave (
413+ availableInfos, os,
414+ [&](const DomainInfo &domainInfo) {
415+ domainInfo.getDomain ().print (os);
416+ if (domainInfo.getDomain ().isVersioned () &&
417+ domainInfo.getRange ().hasMinimumVersion ())
418+ os << " >=" << domainInfo.getRange ().getAsString ();
419+ },
420+ " ," );
421+ }
422+
423+ auto unavailableInfos = llvm::make_filter_range (
424+ domainInfos, [](auto info) { return info.isUnavailable (); });
425+
426+ if (!unavailableInfos.empty ()) {
427+ os << " unavailable=" ;
428+ llvm::interleave (
429+ unavailableInfos, os,
430+ [&](const DomainInfo &domainInfo) {
431+ domainInfo.getDomain ().print (os);
432+ },
433+ " ," );
434+ }
412435 }
413436
414437 if (isDeprecated ())
Original file line number Diff line number Diff line change 1+ // RUN: %target-swift-frontend -typecheck %s \
2+ // RUN: -enable-experimental-feature CustomAvailability \
3+ // RUN: -define-enabled-availability-domain A \
4+ // RUN: -define-enabled-availability-domain B \
5+ // RUN: -dump-availability-scopes > %t.dump 2>&1
6+ // RUN: %FileCheck --strict-whitespace %s < %t.dump
7+
8+ // REQUIRES: swift_feature_CustomAvailability
9+
10+ // CHECK: {{^}}(root version={{.*}}
11+ // CHECK: {{^}} (decl version={{.*}} available=A decl=availableInA()
12+ @available ( A)
13+ func availableInA( ) { }
14+
15+ // CHECK: {{^}} (decl version={{.*}} unavailable=A decl=unavailableInA()
16+ @available ( A, unavailable)
17+ func unavailableInA( ) { }
18+
19+ // CHECK: {{^}} (decl version={{.*}} available=A,B decl=availableInAB()
20+ @available ( A)
21+ @available ( B)
22+ func availableInAB( ) { }
23+
24+ // FIXME: [availability] Should be "available=A"
25+ // CHECK: {{^}} (decl version={{.*}} deprecated decl=deprecatedInA()
26+ @available ( A, deprecated)
27+ func deprecatedInA( ) { }
You can’t perform that action at this time.
0 commit comments