Skip to content

Commit 6d95c37

Browse files
authored
Fix handling of static properties in UnreadSimplePropertyReferenceEliminator. (#79)
1 parent 9f5bc1a commit 6d95c37

File tree

3 files changed

+29
-18
lines changed

3 files changed

+29
-18
lines changed

Sources/PeripheryKit/Analyzer/Visitors/UnreadSimplePropertyReferenceEliminator.swift

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,36 @@ final class UnreadSimplePropertyReferenceEliminator: SourceGraphVisitor {
1818

1919
func transformToGetterUsr(fromMangledSetterUsr usr: String) -> String {
2020
var usr = usr
21-
assert(usr.last == "s")
22-
usr.removeLast()
23-
usr.append("g")
21+
22+
if usr.hasSuffix("sZ") {
23+
usr.removeLast(2)
24+
usr.append("gZ")
25+
} else if usr.hasSuffix("s") {
26+
usr.removeLast()
27+
usr.append("g")
28+
} else {
29+
fatalError("Unexpected setter usr: '\(usr)'")
30+
}
31+
2432
return usr
2533
}
2634

2735
func transformToPropertyUsr(fromMangledSetterUsr usr: String) -> String {
2836
var usr = usr
29-
assert(usr.last == "s")
30-
usr.removeLast()
31-
usr.append("p")
37+
38+
if usr.hasSuffix("sZ") {
39+
usr.removeLast(2)
40+
usr.append("pZ")
41+
} else if usr.hasSuffix("s") {
42+
usr.removeLast()
43+
usr.append("p")
44+
} else {
45+
fatalError("Unexpected setter usr: '\(usr)'")
46+
}
47+
3248
return usr
3349
}
3450

35-
3651
func visit() {
3752
guard configuration.aggressive else { return }
3853

Tests/PeripheryKitTests/RetentionTest.swift

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -928,6 +928,13 @@ class RetentionTest: XCTestCase {
928928
}
929929
}
930930

931+
func testIdenticallyNamedVarsInStaticAndInstanceScopes() {
932+
analyze(retainPublic: true) {
933+
XCTAssertReferenced((.varInstance, "someVar"))
934+
XCTAssertReferenced((.varStatic, "someVar"))
935+
}
936+
}
937+
931938
// MARK: - Known Failures
932939

933940
func testProtocolConformingMembersAreRetained() {
@@ -1155,17 +1162,6 @@ class RetentionTest: XCTestCase {
11551162
}
11561163
}
11571164

1158-
func testDuplicateGetterUSRBug() {
1159-
guard performKnownFailures else { return }
1160-
1161-
// Broken as of Xcode 10.
1162-
// https://bugreport.apple.com/web/?problemID=44531531
1163-
analyze(retainPublic: true, aggressive: true) {
1164-
XCTAssertReferenced((.varInstance, "someVar"))
1165-
XCTAssertReferenced((.varStatic, "someVar"))
1166-
}
1167-
}
1168-
11691165
func testClassRetainedByUnusedInstanceVariable() {
11701166
guard performKnownFailures else { return }
11711167

0 commit comments

Comments
 (0)