Skip to content

Commit be4b155

Browse files
authored
Merge pull request #23033 from hvitved/unified/static-name-binding-prevent-self-inheritence
Unified: Add `UnqualifiedMemberAccess` name binding tests
2 parents 682545f + 3da2f7b commit be4b155

4 files changed

Lines changed: 78 additions & 9 deletions

File tree

‎unified/ql/test/library-tests/static-name-binding/inheritance.swift‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,21 @@ class O: N { // $ access=N
7171
}
7272
}
7373

74+
class Base {
75+
func f(x: Int) {} // $ access=Int
76+
}
77+
78+
class Outer: Base { // $ access=Base
79+
func f() {}
80+
81+
class Inner: Outer { // $ access=Outer
82+
func test() {
83+
f() // $ access=Base.f access=Outer.f
84+
f(x: 42) // $ access=Base.f access=Outer.f
85+
}
86+
}
87+
}
88+
7489
// Members of base classes can be accessed through derived classes
7590
func t1() {
7691
let x1: D = D() // $ access=D
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
testFailures
2+
unqualifiedMemberAccess
3+
| extensions.swift:3:9:3:17 | ownMethod | extensions.swift:2:10:2:18 | ownMethod | extensions.swift:1:1:7:1 | class A |
4+
| extensions.swift:4:9:4:24 | extensionMethod1 | extensions.swift:10:10:10:25 | extensionMethod1 | extensions.swift:1:1:7:1 | class A |
5+
| extensions.swift:5:9:5:24 | extensionMethod2 | extensions.swift:18:10:18:25 | extensionMethod2 | extensions.swift:1:1:7:1 | class A |
6+
| extensions.swift:11:9:11:17 | ownMethod | extensions.swift:2:10:2:18 | ownMethod | extensions.swift:1:1:7:1 | class A |
7+
| extensions.swift:12:9:12:24 | extensionMethod1 | extensions.swift:10:10:10:25 | extensionMethod1 | extensions.swift:9:1:15:1 | extension A |
8+
| extensions.swift:13:9:13:24 | extensionMethod2 | extensions.swift:18:10:18:25 | extensionMethod2 | extensions.swift:1:1:7:1 | class A |
9+
| extensions.swift:19:9:19:17 | ownMethod | extensions.swift:2:10:2:18 | ownMethod | extensions.swift:1:1:7:1 | class A |
10+
| extensions.swift:20:9:20:24 | extensionMethod1 | extensions.swift:10:10:10:25 | extensionMethod1 | extensions.swift:1:1:7:1 | class A |
11+
| extensions.swift:21:9:21:24 | extensionMethod2 | extensions.swift:18:10:18:25 | extensionMethod2 | extensions.swift:17:1:23:1 | extension A |
12+
| extensions.swift:34:20:34:20 | C | extensions.swift:29:11:29:11 | C | extensions.swift:25:1:26:1 | class B |
13+
| extensions.swift:35:17:35:17 | D | extensions.swift:30:15:30:15 | D | extensions.swift:34:5:36:5 | class B.Nested |
14+
| extensions.swift:51:9:51:18 | baseMethod | extensions.swift:61:10:61:19 | baseMethod | extensions.swift:49:1:58:1 | class X |
15+
| extensions.swift:52:9:52:24 | baseMethodNoImpl | extensions.swift:42:10:42:25 | baseMethodNoImpl | extensions.swift:49:1:58:1 | class X |
16+
| extensions.swift:53:9:53:21 | baseMethodExt | extensions.swift:46:10:46:22 | baseMethodExt | extensions.swift:49:1:58:1 | class X |
17+
| extensions.swift:56:9:56:29 | baseMethodDefaultImpl | extensions.swift:43:10:43:30 | baseMethodDefaultImpl | extensions.swift:49:1:58:1 | class X |
18+
| extensions.swift:56:9:56:29 | baseMethodDefaultImpl | extensions.swift:47:10:47:30 | baseMethodDefaultImpl | extensions.swift:49:1:58:1 | class X |
19+
| extensions.swift:66:9:66:18 | baseMethod | extensions.swift:71:10:71:19 | baseMethod | extensions.swift:64:1:69:1 | class Y |
20+
| extensions.swift:67:9:67:29 | baseMethodDefaultImpl | extensions.swift:72:10:72:30 | baseMethodDefaultImpl | extensions.swift:64:1:69:1 | class Y |
21+
| implicit-instance-field-access.swift:5:16:5:16 | x | implicit-instance-field-access.swift:2:9:2:9 | x | implicit-instance-field-access.swift:1:1:7:1 | class A |
22+
| implicit-instance-field-access.swift:11:16:11:16 | x | implicit-instance-field-access.swift:2:9:2:9 | x | implicit-instance-field-access.swift:9:1:13:1 | class B |
23+
| inheritance.swift:83:13:83:13 | f | inheritance.swift:75:10:75:10 | f | inheritance.swift:81:5:86:5 | class Outer.Inner |
24+
| inheritance.swift:83:13:83:13 | f | inheritance.swift:79:10:79:10 | f | inheritance.swift:81:5:86:5 | class Outer.Inner |
25+
| inheritance.swift:84:13:84:13 | f | inheritance.swift:75:10:75:10 | f | inheritance.swift:81:5:86:5 | class Outer.Inner |
26+
| inheritance.swift:84:13:84:13 | f | inheritance.swift:79:10:79:10 | f | inheritance.swift:81:5:86:5 | class Outer.Inner |
27+
| not-a-package/Main/Runner.swift:9:14:9:19 | Nested | not-a-package/Main/Drivers/Driver.swift:2:11:2:16 | Nested | not-a-package/Main/Runner.swift:8:1:10:1 | class MyDriver |
28+
| not-a-package/Mock/Runner.swift:9:14:9:19 | Nested | not-a-package/Mock/Drivers/Driver.swift:2:11:2:16 | Nested | not-a-package/Mock/Runner.swift:8:1:10:1 | class MyDriver |
29+
| package1/Sources/Target1/File1.swift:6:9:6:30 | target2ExtensionMethod | package1/Sources/Target2/File3.swift:10:10:10:31 | target2ExtensionMethod | package1/Sources/Target1/File1.swift:4:1:8:1 | class ScopedExtensionTarget |
30+
| test.swift:8:24:8:24 | B | test.swift:4:11:4:11 | B | test.swift:3:1:11:1 | class A |
31+
| test.swift:37:13:37:13 | A | test.swift:32:11:32:11 | A | test.swift:31:1:39:1 | class E |
32+
| test.swift:38:13:38:13 | A | test.swift:32:11:32:11 | A | test.swift:31:1:39:1 | class E |
33+
| unqualified-access.swift:8:13:8:13 | B | unqualified-access.swift:2:11:2:11 | B | unqualified-access.swift:7:1:20:1 | class ASub |
34+
| unqualified-access.swift:9:13:9:13 | B | unqualified-access.swift:2:11:2:11 | B | unqualified-access.swift:7:1:20:1 | class ASub |
35+
| unqualified-access.swift:11:17:11:17 | B | unqualified-access.swift:2:11:2:11 | B | unqualified-access.swift:7:1:20:1 | class ASub |
36+
| unqualified-access.swift:12:17:12:17 | B | unqualified-access.swift:2:11:2:11 | B | unqualified-access.swift:7:1:20:1 | class ASub |
37+
| unqualified-access.swift:13:17:13:17 | C | unqualified-access.swift:3:15:3:15 | C | unqualified-access.swift:11:5:14:5 | class ASub.BSub |
38+
| unqualified-access.swift:16:18:16:18 | B | unqualified-access.swift:2:11:2:11 | B | unqualified-access.swift:7:1:20:1 | class ASub |
39+
| unqualified-access.swift:18:17:18:17 | C | unqualified-access.swift:17:15:17:15 | C | unqualified-access.swift:16:5:19:5 | class ASub.BSub2 |
40+
| unqualified-access.swift:24:16:24:19 | Leaf | unqualified-access.swift:23:11:23:14 | Leaf | unqualified-access.swift:23:5:26:5 | class Node.Leaf |
41+
| unqualified-access.swift:24:23:24:26 | Leaf | unqualified-access.swift:23:11:23:14 | Leaf | unqualified-access.swift:23:5:26:5 | class Node.Leaf |

‎unified/ql/test/library-tests/static-name-binding/test.ql‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,9 @@ module StaticDeclAccess implements TestSig {
1919
}
2020

2121
import MakeTest<StaticDeclAccess>
22+
23+
query predicate unqualifiedMemberAccess(
24+
UnqualifiedMemberAccess uma, NameBinding target, ClassLikeDeclaration accessingClass
25+
) {
26+
unqualifiedMemberAccess(uma, _, target, accessingClass)
27+
}

‎unified/ql/test/library-tests/static-name-binding/unqualified-access.swift‎

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,24 @@ class A {
44
}
55
}
66

7-
class ASub : A { // $ access=A
8-
let x1: B = nil; // $ access=A.B
9-
let x2: B.C = nil; // $ access=A.B access=A.B.C
7+
class ASub: A { // $ access=A
8+
let x1: B = nil // $ access=A.B
9+
let x2: B.C = nil // $ access=A.B access=A.B.C
1010

11-
class BSub : B { // $ access=A.B
12-
let x3: B = nil; // $ access=A.B
13-
let x4: C = nil; // $ access=A.B.C
11+
class BSub: B { // $ access=A.B
12+
let x3: B = nil // $ access=A.B
13+
let x4: C = nil // $ access=A.B.C
1414
}
1515

16-
class BSub2 : B { // $ access=A.B
17-
class C {} // shadow the inherited C
18-
let x5: C = nil; // $ access=ASub.BSub2.C
16+
class BSub2: B { // $ access=A.B
17+
class C {} // shadow the inherited C
18+
let x5: C = nil // $ access=ASub.BSub2.C
19+
}
20+
}
21+
22+
class Node {
23+
class Leaf: Node { // $ access=Node
24+
let x: Leaf = Leaf() // $ access=Node.Leaf
25+
let y: Node.Leaf.Leaf.Leaf.Leaf = nil // $ access=Node access=Node.Leaf
1926
}
2027
}

0 commit comments

Comments
 (0)