Skip to content

Commit e07fda5

Browse files
committed
[Sema] Factor out callback version of TypeChecker::checkAvailability
Allow the caller to use their own diagnostic logic.
1 parent 7ea2b3d commit e07fda5

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2098,15 +2098,15 @@ static void fixAvailability(SourceRange ReferenceRange,
20982098
}
20992099

21002100
static void diagnosePotentialUnavailability(
2101-
SourceRange ReferenceRange, Diag<StringRef, llvm::VersionTuple> Diag,
2101+
SourceRange ReferenceRange,
2102+
llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
2103+
Diagnose,
21022104
const DeclContext *ReferenceDC, const AvailabilityRange &Availability) {
21032105
ASTContext &Context = ReferenceDC->getASTContext();
21042106

21052107
{
2106-
auto Err = Context.Diags.diagnose(
2107-
ReferenceRange.Start, Diag,
2108-
Context.getTargetPlatformStringForDiagnostics(),
2109-
Availability.getRawMinimumVersion());
2108+
auto Err = Diagnose(Context.getTargetPlatformStringForDiagnostics(),
2109+
Availability.getRawMinimumVersion());
21102110

21112111
// Direct a fixit to the error if an existing guard is nearly-correct
21122112
if (fixAvailabilityByNarrowingNearbyVersionCheck(
@@ -2116,10 +2116,11 @@ static void diagnosePotentialUnavailability(
21162116
fixAvailability(ReferenceRange, ReferenceDC, Availability, Context);
21172117
}
21182118

2119-
bool TypeChecker::checkAvailability(SourceRange ReferenceRange,
2120-
AvailabilityRange RequiredAvailability,
2121-
Diag<StringRef, llvm::VersionTuple> Diag,
2122-
const DeclContext *ReferenceDC) {
2119+
bool TypeChecker::checkAvailability(
2120+
SourceRange ReferenceRange, AvailabilityRange RequiredAvailability,
2121+
const DeclContext *ReferenceDC,
2122+
llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
2123+
Diagnose) {
21232124
ASTContext &ctx = ReferenceDC->getASTContext();
21242125
if (ctx.LangOpts.DisableAvailabilityChecking)
21252126
return false;
@@ -2128,14 +2129,27 @@ bool TypeChecker::checkAvailability(SourceRange ReferenceRange,
21282129
TypeChecker::overApproximateAvailabilityAtLocation(ReferenceRange.Start,
21292130
ReferenceDC);
21302131
if (!availabilityAtLocation.isContainedIn(RequiredAvailability)) {
2131-
diagnosePotentialUnavailability(ReferenceRange, Diag, ReferenceDC,
2132+
diagnosePotentialUnavailability(ReferenceRange, Diagnose, ReferenceDC,
21322133
RequiredAvailability);
21332134
return true;
21342135
}
21352136

21362137
return false;
21372138
}
21382139

2140+
bool TypeChecker::checkAvailability(SourceRange ReferenceRange,
2141+
AvailabilityRange RequiredAvailability,
2142+
Diag<StringRef, llvm::VersionTuple> Diag,
2143+
const DeclContext *ReferenceDC) {
2144+
auto &Diags = ReferenceDC->getASTContext().Diags;
2145+
return TypeChecker::checkAvailability(
2146+
ReferenceRange, RequiredAvailability, ReferenceDC,
2147+
[&](StringRef platformName, llvm::VersionTuple version) {
2148+
return Diags.diagnose(ReferenceRange.Start, Diag, platformName,
2149+
version);
2150+
});
2151+
}
2152+
21392153
void TypeChecker::checkConcurrencyAvailability(SourceRange ReferenceRange,
21402154
const DeclContext *ReferenceDC) {
21412155
checkAvailability(

lib/Sema/TypeChecker.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,6 +1052,12 @@ checkConformanceAvailability(const RootProtocolConformance *Conf,
10521052
const ExtensionDecl *Ext,
10531053
const ExportContext &Where);
10541054

1055+
bool checkAvailability(
1056+
SourceRange ReferenceRange, AvailabilityRange RequiredAvailability,
1057+
const DeclContext *ReferenceDC,
1058+
llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
1059+
Diagnose);
1060+
10551061
bool checkAvailability(SourceRange ReferenceRange,
10561062
AvailabilityRange RequiredAvailability,
10571063
Diag<StringRef, llvm::VersionTuple> Diag,

0 commit comments

Comments
 (0)