Preserve availability on ObjC subscript getters and setters #17105
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Objective-C subscript accessors' attributes were being imported through the alternative declaration (
getAlternateDecls(decl)
) of one of the accessors (usually the getter), and this alternative declaration was the entire subscript declaration, not the getter or setter. Since there is no 1:1 equivalent between Objective-C and Swift of a subscript declaration like there is a property declaration, I opted to not import any attributes to the Swift subscript declaration we generate. The accessor attributes are imported 1:1 to their respective Swift thunks.I noticed that, for "unavailable" subscripts, diagnostics outputs a "note" to point out where the subscript was marked unavailable but it doesn't output where. I would expect it to be able to point out the line in the Objective-C header, but it tries to point out the thunk, which is generated and thus nothing gets output. It seems there are similar problems with normal properties, except that it shows the hidden __ObjC module's generated Swift interface. Therefore I assumed that my fix didn't break those diagnostics.
I changed one
dyn_cast
tocast
because I didn't think there would be a case where it would fail, and a couple of lines down there was a dereference anyways.Resolves SR-7398.