Skip to content

[SR-7398] Preserve availability on ObjC subscript getters and setters #49941

@belkadan

Description

@belkadan
Previous ID SR-7398
Radar rdar://problem/18636764
Original Reporter @belkadan
Type Bug
Status Resolved
Resolution Done
Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, ClangImporter, StarterBug
Assignee @ChristopherRogers
Priority Medium

md5: f62fe61cb3743b3aba8e5875b9480892

relates to:

  • SR-7201 Setter should support @available

Issue Description:

@import Foundation;

@interface DeprecatedGetter: NSObject
- (id)objectAtIndexedSubscript:(NSInteger)i __attribute__((deprecated("bad getter")));
- (void)setObject:(id)obj atIndexedSubscript:(NSInteger)i;
@end

@interface DeprecatedSetter: NSObject
- (id)objectAtIndexedSubscript:(NSInteger)i;
- (void)setObject:(id)obj atIndexedSubscript:(NSInteger)i __attribute__((deprecated("bad setter")));
@end

When the Objective-C code above is imported into Swift, the methods are mapped to a true subscript declaration. However, any availability attributes on the original methods are lost…or rather, the getter's availability is copied onto the subscript, but not the setter's.

The relevant functions here are buildSubscriptGetterDecl and buildSubscriptSetterDecl in ClangImporter.cpp; these functions should call Impl.importAttributes to get the correct attributes for the getter and setter. We also need to figure out what's pulling the getter's availability onto the subscript; that's not really correct if the getter is deprecated but the setter is not.

Tests for this would look something like b0e12f4#diff-348ce3800f609e6140007f774b227469R874.

Metadata

Metadata

Labels

bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.compilerThe Swift compiler itselfgood first issueGood for newcomers

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions