Skip to content

Commit 9155891

Browse files
committed
Update extractor to deal with type parameters on alias types
1 parent ed02748 commit 9155891

File tree

9 files changed

+16
-4
lines changed

9 files changed

+16
-4
lines changed

go/extractor/extractor.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -475,12 +475,12 @@ func extractObjects(tw *trap.Writer, scope *types.Scope, scopeLabel trap.Label)
475475
populateTypeParamParents(funcObj.Type().(*types.Signature).TypeParams(), obj)
476476
populateTypeParamParents(funcObj.Type().(*types.Signature).RecvTypeParams(), obj)
477477
}
478-
// Populate type parameter parents for named types. Note that we
479-
// skip type aliases as the original type should be the parent
480-
// of any type parameters.
481-
if typeNameObj, ok := obj.(*types.TypeName); ok && !typeNameObj.IsAlias() {
478+
// Populate type parameter parents for named types.
479+
if typeNameObj, ok := obj.(*types.TypeName); ok {
482480
if tp, ok := typeNameObj.Type().(*types.Named); ok {
483481
populateTypeParamParents(tp.TypeParams(), obj)
482+
} else if tp, ok := typeNameObj.Type().(*types.Alias); ok {
483+
populateTypeParamParents(tp.TypeParams(), obj)
484484
}
485485
}
486486
extractObject(tw, obj, lbl)

go/ql/test/library-tests/semmle/go/Types/Aliases.expected

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ entities
1414
| aliases.go | aliases.go:22:6:22:6 | T | 1 | aliases.go:19:6:19:7 | S3 |
1515
| aliases.go | aliases.go:25:6:25:6 | H | 1 | file://:0:0:0:0 | signature type |
1616
| aliases.go | aliases.go:25:8:25:11 | Afs3 | 1 | aliases.go:19:6:19:7 | S3 |
17+
| aliases.go | aliases.go:29:6:29:9 | User | 1 | aliases.go:29:6:29:9 | User |
18+
| aliases.go | aliases.go:29:11:29:15 | UserT | 1 | file://:0:0:0:0 | type parameter type |
19+
| aliases.go | aliases.go:29:30:29:30 | x | 1 | file://:0:0:0:0 | type parameter type |
20+
| aliases.go | aliases.go:32:6:32:14 | UserAlias | 1 | aliases.go:29:6:29:9 | User |
21+
| aliases.go | aliases.go:32:16:32:25 | UserAliasT | 1 | file://:0:0:0:0 | type parameter type |
1722
#select
1823
| F | func(struct { x int }) int |
1924
| G | func(struct { x int }) int |

go/ql/test/library-tests/semmle/go/Types/Field_getPackage.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
| aliases.go:6:26:6:26 | x | package codeql-go-types |
22
| aliases.go:8:26:8:26 | x | package codeql-go-types |
33
| aliases.go:19:17:19:17 | x | package codeql-go-types |
4+
| aliases.go:29:30:29:30 | x | package codeql-go-types |
45
| cyclic.go:4:3:4:3 | s | package codeql-go-types |
56
| cyclic.go:8:3:8:3 | u | package codeql-go-types |
67
| cyclic.go:9:2:9:2 | f | package codeql-go-types |

go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName2.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
| aliases.go:6:26:6:26 | x | codeql-go-types.S3 | x |
22
| aliases.go:8:26:8:26 | x | codeql-go-types.S3 | x |
33
| aliases.go:19:17:19:17 | x | codeql-go-types.S3 | x |
4+
| aliases.go:29:30:29:30 | x | codeql-go-types.User | x |
45
| cyclic.go:4:3:4:3 | s | codeql-go-types.s | s |
56
| cyclic.go:8:3:8:3 | u | codeql-go-types.t | u |
67
| cyclic.go:8:3:8:3 | u | codeql-go-types.u | u |

go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName3.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
| aliases.go:6:26:6:26 | x | codeql-go-types | S3 | x |
22
| aliases.go:8:26:8:26 | x | codeql-go-types | S3 | x |
33
| aliases.go:19:17:19:17 | x | codeql-go-types | S3 | x |
4+
| aliases.go:29:30:29:30 | x | codeql-go-types | User | x |
45
| cyclic.go:4:3:4:3 | s | codeql-go-types | s | s |
56
| cyclic.go:8:3:8:3 | u | codeql-go-types | t | u |
67
| cyclic.go:8:3:8:3 | u | codeql-go-types | u | u |

go/ql/test/library-tests/semmle/go/Types/GenericTypeInstantiationExpr.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
| aliases.go:32:34:32:49 | generic type instantiation expression | aliases.go:32:34:32:37 | User | 0 | aliases.go:32:39:32:48 | UserAliasT |
12
| generic.go:12:16:12:40 | generic type instantiation expression | generic.go:12:16:12:37 | CircularGenericStruct1 | 0 | generic.go:12:39:12:39 | T |
23
| generic.go:16:7:16:31 | generic type instantiation expression | generic.go:16:7:16:28 | CircularGenericStruct1 | 0 | generic.go:16:30:16:30 | T |
34
| generic.go:20:14:20:30 | generic type instantiation expression | generic.go:20:14:20:27 | GenericStruct1 | 0 | generic.go:20:29:20:29 | S |

go/ql/test/library-tests/semmle/go/Types/QualifiedNames.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
| aliases.go:19:6:19:7 | S3 | codeql-go-types.S3 |
2+
| aliases.go:29:6:29:9 | User | codeql-go-types.User |
23
| cyclic.go:3:6:3:6 | s | codeql-go-types.s |
34
| cyclic.go:7:6:7:6 | t | codeql-go-types.t |
45
| cyclic.go:12:6:12:6 | u | codeql-go-types.u |

go/ql/test/library-tests/semmle/go/Types/StructFields.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
| aliases.go:19:6:19:7 | S3 | aliases.go:6:18:6:37 | struct type | x | int |
22
| aliases.go:19:6:19:7 | S3 | aliases.go:8:18:8:37 | struct type | x | int |
33
| aliases.go:19:6:19:7 | S3 | aliases.go:19:9:19:23 | struct type | x | int |
4+
| aliases.go:29:6:29:9 | User | aliases.go:29:22:29:38 | struct type | x | UserT |
45
| cyclic.go:3:6:3:6 | s | cyclic.go:3:8:5:1 | struct type | s | * s |
56
| cyclic.go:7:6:7:6 | t | cyclic.go:7:8:10:1 | struct type | f | int |
67
| cyclic.go:7:6:7:6 | t | cyclic.go:7:8:10:1 | struct type | t | t |

go/ql/test/library-tests/semmle/go/Types/Types.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
| aliases.go:19:6:19:7 | S3 | S3 |
2+
| aliases.go:29:6:29:9 | User | User |
23
| cyclic.go:3:6:3:6 | s | s |
34
| cyclic.go:7:6:7:6 | t | t |
45
| cyclic.go:12:6:12:6 | u | u |

0 commit comments

Comments
 (0)