File tree Expand file tree Collapse file tree 3 files changed +62
-0
lines changed
go/ql/test/library-tests/semmle/go/aliases/InterfaceImpls Expand file tree Collapse file tree 3 files changed +62
-0
lines changed Original file line number Diff line number Diff line change
1
+ callTargets
2
+ | test.go:38:2:38:24 | call to ImplementMe | test.go:12:1:12:72 | function declaration | ImplementMe |
3
+ | test.go:38:2:38:24 | call to ImplementMe | test.go:17:1:17:67 | function declaration | ImplementMe |
4
+ | test.go:38:2:38:24 | call to ImplementMe | test.go:23:1:23:54 | function declaration | ImplementMe |
5
+ | test.go:38:2:38:24 | call to ImplementMe | test.go:29:1:29:61 | function declaration | ImplementMe |
6
+ | test.go:38:2:38:24 | call to ImplementMe | test.go:35:1:35:74 | function declaration | ImplementMe |
7
+ #select
8
+ | file://:0:0:0:0 | basic interface type | file://:0:0:0:0 | basic interface type |
9
+ | file://:0:0:0:0 | basic interface type | test.go:10:6:10:10 | Impl1 |
10
+ | file://:0:0:0:0 | basic interface type | test.go:15:6:15:10 | Impl2 |
11
+ | file://:0:0:0:0 | basic interface type | test.go:20:6:20:10 | Impl3 |
12
+ | file://:0:0:0:0 | basic interface type | test.go:26:6:26:10 | Impl4 |
13
+ | file://:0:0:0:0 | basic interface type | test.go:32:6:32:10 | Impl5 |
Original file line number Diff line number Diff line change
1
+ package intfs
2
+
3
+ type IntAlias = int
4
+
5
+ type Target = interface {
6
+ ImplementMe (callable func (struct { x IntAlias }))
7
+ }
8
+
9
+ // Simple direct implementation
10
+ type Impl1 struct {}
11
+
12
+ func (recv Impl1 ) ImplementMe (callable func (struct { x IntAlias })) { }
13
+
14
+ // Implementation via unalising
15
+ type Impl2 struct {}
16
+
17
+ func (recv Impl2 ) ImplementMe (callable func (struct { x int })) { }
18
+
19
+ // Implementation via top-level aliasing
20
+ type Impl3 struct {}
21
+
22
+ type Impl3Alias = func (struct { x IntAlias })
23
+ func (recv Impl3 ) ImplementMe (callable Impl3Alias ) { }
24
+
25
+ // Implementation via aliasing the struct
26
+ type Impl4 struct {}
27
+
28
+ type Impl4Alias = struct { x IntAlias }
29
+ func (recv Impl4 ) ImplementMe (callable func (Impl4Alias )) { }
30
+
31
+ // Implementation via aliasing the struct member
32
+ type Impl5 struct {}
33
+
34
+ type Impl5Alias = IntAlias
35
+ func (recv Impl5 ) ImplementMe (callable func (struct { x Impl5Alias })) { }
36
+
37
+ func Caller (target Target ) {
38
+ target .ImplementMe (nil )
39
+ }
Original file line number Diff line number Diff line change
1
+ import go
2
+
3
+ query predicate callTargets ( DataFlow:: CallNode cn , FuncDef target , string targetName ) {
4
+ target = cn .getACallee ( ) and targetName = target .getName ( )
5
+ }
6
+
7
+ from InterfaceType i , Type impl
8
+ where i .hasMethod ( "ImplementMe" , _)
9
+ and impl .implements ( i )
10
+ select i , impl
You can’t perform that action at this time.
0 commit comments