[SR-14162] Index store does not relate static property getter used as subscript key.
swift-ci opened this issue · 6 comments
swift-ci commented
Previous ID | SR-14162 |
Radar | rdar://problem/74102056 |
Original Reporter | Leitch (JIRA User) |
Type | Bug |
Environment
Swift 5.3 & 5.4 beta (Xcode 12.5 beta 1)
Additional Detail from JIRA
Votes | 1 |
Component/s | Source Tooling |
Labels | Bug |
Assignee | None |
Priority | Medium |
md5: 7c96ce342087142383568e877034f2d5
Issue Description:
Given the following code:
enum FixtureEnum128 {
static let someVar = ""
}
class FixtureClass128 {
func someFunc() {
var s: [String: Int] = [:]
s[FixtureEnum128.someVar] = 0
}
}
The index store does not relate the someVar
getter when used as a subscript key. It does however relate the setter, which is also incorrect.
1:6 | enum/Swift | FixtureEnum128 | s:14swift_ide_test14FixtureEnum128O | Def | rel: 0
2:16 | static-property/Swift | someVar | s:14swift_ide_test14FixtureEnum128O7someVarSSvpZ | Def,RelChild | rel: 1
RelChild | enum/Swift | FixtureEnum128 | s:14swift_ide_test14FixtureEnum128O
2:16 | static-method/acc-get/Swift | getter:someVar | s:14swift_ide_test14FixtureEnum128O7someVarSSvgZ | Def,Impl,RelChild,RelAcc | rel: 1
RelChild,RelAcc | static-property/Swift | someVar | s:14swift_ide_test14FixtureEnum128O7someVarSSvpZ
2:16 | static-method/acc-set/Swift | setter:someVar | s:14swift_ide_test14FixtureEnum128O7someVarSSvsZ | Def,Impl,RelChild,RelAcc | rel: 1
RelChild,RelAcc | static-property/Swift | someVar | s:14swift_ide_test14FixtureEnum128O7someVarSSvpZ
5:7 | class/Swift | FixtureClass128 | s:14swift_ide_test15FixtureClass128C | Def | rel: 0
6:10 | instance-method/Swift | someFunc() | s:14swift_ide_test15FixtureClass128C8someFuncyyF | Def,Dyn,RelChild | rel: 1
RelChild | class/Swift | FixtureClass128 | s:14swift_ide_test15FixtureClass128C
7:17 | struct/Swift | String | s:SS | Ref,RelCont | rel: 1
RelCont | instance-method/Swift | someFunc() | s:14swift_ide_test15FixtureClass128C8someFuncyyF
7:25 | struct/Swift | Int | s:Si | Ref,RelCont | rel: 1
RelCont | instance-method/Swift | someFunc() | s:14swift_ide_test15FixtureClass128C8someFuncyyF
8:10 | instance-property/subscript/Swift | subscript(_:) | s:SDyq_Sgxcip | Ref,Writ,RelCont | rel: 1
RelCont | instance-method/Swift | someFunc() | s:14swift_ide_test15FixtureClass128C8someFuncyyF
8:10 | instance-method/acc-set/Swift | setter:subscript(_:) | s:SDyq_Sgxcis | Ref,Call,Impl,RelCall,RelCont | rel: 1
RelCall,RelCont | instance-method/Swift | someFunc() | s:14swift_ide_test15FixtureClass128C8someFuncyyF
8:11 | enum/Swift | FixtureEnum128 | s:14swift_ide_test14FixtureEnum128O | Ref,RelCont | rel: 1
RelCont | instance-method/Swift | someFunc() | s:14swift_ide_test15FixtureClass128C8someFuncyyF
8:26 | static-property/Swift | someVar | s:14swift_ide_test14FixtureEnum128O7someVarSSvpZ | Ref,Writ,RelCont | rel: 1
RelCont | instance-method/Swift | someFunc() | s:14swift_ide_test15FixtureClass128C8someFuncyyF
8:26 | static-method/acc-set/Swift | setter:someVar | s:14swift_ide_test14FixtureEnum128O7someVarSSvsZ | Ref,Call,Impl,RelRec,RelCall,RelCont | rel: 2
RelCall,RelCont | instance-method/Swift | someFunc() | s:14swift_ide_test15FixtureClass128C8someFuncyyF
RelRec | enum/Swift | FixtureEnum128 | s:14swift_ide_test14FixtureEnum128O
5:7 | constructor/Swift | init() | s:14swift_ide_test15FixtureClass128CACycfc | Def,Impl,RelChild | rel: 1
RelChild | class/Swift | FixtureClass128 | s:14swift_ide_test15FixtureClass128C
swift-ci commented
Comment by Ian Leitch (JIRA)
/cc @benlangmuir
benlangmuir commented
@swift-ci create
swift-ci commented
Comment by Michael Thole (JIRA)
Ran into this today using Periphery to find dead code; false positive attributable to this bug. Xcode 13.
keith commented
Looks like this is fixed in at least swift 5.7:
/*
enum=FixtureEnum128=s:3foo14FixtureEnum128O=definition
v */
enum FixtureEnum128 {
/*
staticMethod.accessorGetter=getter:someVar=s:3foo14FixtureEnum128O7someVarSSvgZ=definition, implicit, childOf, accessorOf
staticMethod.accessorSetter=setter:someVar=s:3foo14FixtureEnum128O7someVarSSvsZ=definition, implicit, childOf, accessorOf
staticProperty=someVar=s:3foo14FixtureEnum128O7someVarSSvpZ=definition, childOf
v */
static let someVar = ""
}
/*
constructor=init()=s:3foo15FixtureClass128CACycfc=definition, implicit, childOf
class=FixtureClass128=s:3foo15FixtureClass128C=definition
v */
class FixtureClass128 {
/*
instanceMethod=someFunc()=s:3foo15FixtureClass128C8someFuncyyF=definition, dynamic, childOf
v */
func someFunc() {
/*
struct=String=s:SS=reference, containedBy
| struct=Int=s:Si=reference, containedBy
v v */
var s: [String: Int] = [:]
/*
instanceMethod.accessorSetter=setter:subscript(_:)=s:SDyq_Sgxcis=reference, call, implicit, calledBy, containedBy
instanceProperty.swiftSubscript=subscript(_:)=s:SDyq_Sgxcip=reference, write, containedBy
|enum=FixtureEnum128=s:3foo14FixtureEnum128O=reference, containedBy
|| staticMethod.accessorSetter=setter:someVar=s:3foo14FixtureEnum128O7someVarSSvsZ=reference, call, implicit, calledBy, containedBy
|| staticProperty=someVar=s:3foo14FixtureEnum128O7someVarSSvpZ=reference, write, containedBy
vv v */
s[FixtureEnum128.someVar] = 0
}
}
AnthonyLatsis commented
Looks like this is fixed in at least swift 5.7
@keith Is it really fixed? In your output I only see a seemingly incorrect reference to the setter, but not the getter.
keith commented
ah sorry I misunderstood