@@ -3035,7 +3035,7 @@ class UnavailabilityDiagnosticInfo {
30353035 : DiagnosticStatus(status), Attr(attr) {};
30363036
30373037 Status getStatus () const { return DiagnosticStatus; }
3038- const AvailableAttr * getAttr () const { return Attr. getParsedAttr () ; }
3038+ SemanticAvailableAttr getAttr () const { return Attr; }
30393039 AvailabilityDomain getDomain () const { return Attr.getDomain (); }
30403040 StringRef getDomainName () const {
30413041 return getDomain ().getNameForDiagnostics ();
@@ -3116,14 +3116,14 @@ bool diagnoseExplicitUnavailability(
31163116 diagnosticInfo->shouldHideDomainNameInUnversionedDiagnostics ()
31173117 ? " "
31183118 : versionedPlatform;
3119- const AvailableAttr * attr = diagnosticInfo->getAttr ();
3119+ auto attr = diagnosticInfo->getAttr ();
31203120
31213121 // Downgrade unavailable Sendable conformance diagnostics where
31223122 // appropriate.
31233123 auto behavior =
31243124 behaviorLimitForExplicitUnavailability (rootConf, where.getDeclContext ());
31253125
3126- EncodedDiagnosticMessage EncodedMessage (attr-> Message );
3126+ EncodedDiagnosticMessage EncodedMessage (attr. getMessage () );
31273127 diags
31283128 .diagnose (loc, diag::conformance_availability_unavailable, type, proto,
31293129 platform.empty (), platform, EncodedMessage.Message )
@@ -3135,17 +3135,17 @@ bool diagnoseExplicitUnavailability(
31353135 diags
31363136 .diagnose (ext, diag::conformance_availability_marked_unavailable, type,
31373137 proto)
3138- .highlight (attr->getRange ());
3138+ .highlight (attr. getParsedAttr () ->getRange ());
31393139 break ;
31403140 case UnavailabilityDiagnosticInfo::Status::IntroducedInVersion:
31413141 diags.diagnose (ext, diag::conformance_availability_introduced_in_version,
3142- type, proto, versionedPlatform, *attr-> Introduced );
3142+ type, proto, versionedPlatform, *attr. getIntroduced () );
31433143 break ;
31443144 case UnavailabilityDiagnosticInfo::Status::Obsoleted:
31453145 diags
31463146 .diagnose (ext, diag::conformance_availability_obsoleted, type, proto,
3147- versionedPlatform, *attr-> Obsoleted )
3148- .highlight (attr->getRange ());
3147+ versionedPlatform, *attr. getObsoleted () )
3148+ .highlight (attr. getParsedAttr () ->getRange ());
31493149 break ;
31503150 }
31513151 return true ;
@@ -3532,9 +3532,8 @@ bool diagnoseExplicitUnavailability(
35323532 if (!diagnosticInfo)
35333533 return false ;
35343534
3535- auto *Attr = diagnosticInfo->getAttr ();
3536- if (Attr->getPlatformAgnosticAvailability () ==
3537- PlatformAgnosticAvailabilityKind::UnavailableInSwift) {
3535+ auto Attr = diagnosticInfo->getAttr ();
3536+ if (Attr.getDomain ().isSwiftLanguage () && !Attr.isVersionSpecific ()) {
35383537 if (shouldAllowReferenceToUnavailableInSwiftDeclaration (D, Where))
35393538 return false ;
35403539 }
@@ -3558,20 +3557,21 @@ bool diagnoseExplicitUnavailability(
35583557 ? DiagnosticBehavior::Warning
35593558 : DiagnosticBehavior::Unspecified;
35603559
3561- if (!Attr->Rename .empty ()) {
3560+ auto message = Attr.getMessage ();
3561+ auto rename = Attr.getRename ();
3562+ if (!rename.empty ()) {
35623563 SmallString<32 > newNameBuf;
35633564 std::optional<ReplacementDeclKind> replaceKind =
3564- describeRename (ctx, Attr-> Rename , D, newNameBuf);
3565+ describeRename (ctx, Attr. getRename () , D, newNameBuf);
35653566 unsigned rawReplaceKind = static_cast <unsigned >(
35663567 replaceKind.value_or (ReplacementDeclKind::None));
3567- StringRef newName = replaceKind ? newNameBuf.str () : Attr->Rename ;
3568- EncodedDiagnosticMessage EncodedMessage (Attr->Message );
3569- auto diag =
3570- diags.diagnose (Loc, diag::availability_decl_unavailable_rename,
3571- D, replaceKind.has_value (),
3572- rawReplaceKind, newName, EncodedMessage.Message );
3573- diag.limitBehavior (limit);
3574- attachRenameFixIts (diag);
3568+ StringRef newName = replaceKind ? newNameBuf.str () : rename;
3569+ EncodedDiagnosticMessage EncodedMessage (message);
3570+ auto diag = diags.diagnose (Loc, diag::availability_decl_unavailable_rename,
3571+ D, replaceKind.has_value (), rawReplaceKind,
3572+ newName, EncodedMessage.Message );
3573+ diag.limitBehavior (limit);
3574+ attachRenameFixIts (diag);
35753575 } else if (isSubscriptReturningString (D, ctx)) {
35763576 diags.diagnose (Loc, diag::availability_string_subscript_migration)
35773577 .highlight (R)
@@ -3582,31 +3582,33 @@ bool diagnoseExplicitUnavailability(
35823582 return true ;
35833583 } else {
35843584 auto unavailableDiagnosticPlatform = platform;
3585- AvailabilityInference::updatePlatformStringForFallback (Attr, ctx, unavailableDiagnosticPlatform);
3586- EncodedDiagnosticMessage EncodedMessage (Attr->Message );
3585+ AvailabilityInference::updatePlatformStringForFallback (
3586+ Attr.getParsedAttr (), ctx, unavailableDiagnosticPlatform);
3587+ EncodedDiagnosticMessage EncodedMessage (message);
35873588 diags
35883589 .diagnose (Loc, diag::availability_decl_unavailable, D, platform.empty (),
35893590 unavailableDiagnosticPlatform, EncodedMessage.Message )
35903591 .highlight (R)
35913592 .limitBehavior (limit);
35923593 }
35933594
3595+ auto sourceRange = Attr.getParsedAttr ()->getRange ();
35943596 switch (diagnosticInfo->getStatus ()) {
35953597 case UnavailabilityDiagnosticInfo::Status::AlwaysUnavailable:
35963598 diags.diagnose (D, diag::availability_marked_unavailable, D)
3597- .highlight (Attr-> getRange () );
3599+ .highlight (sourceRange );
35983600 break ;
35993601 case UnavailabilityDiagnosticInfo::Status::IntroducedInVersion:
36003602 diags
36013603 .diagnose (D, diag::availability_introduced_in_version, D,
3602- versionedPlatform, *Attr-> Introduced )
3603- .highlight (Attr-> getRange () );
3604+ versionedPlatform, *Attr. getIntroduced () )
3605+ .highlight (sourceRange );
36043606 break ;
36053607 case UnavailabilityDiagnosticInfo::Status::Obsoleted:
36063608 diags
36073609 .diagnose (D, diag::availability_obsoleted, D, versionedPlatform,
3608- *Attr-> Obsoleted )
3609- .highlight (Attr-> getRange () );
3610+ *Attr. getObsoleted () )
3611+ .highlight (sourceRange );
36103612 break ;
36113613 }
36123614 return true ;
0 commit comments