@@ -832,6 +832,9 @@ func (g *graph) see(obj interface{}) *node {
832
832
if fn , ok := obj .(* types.Func ); ok {
833
833
obj = typeparams .OriginMethod (fn )
834
834
}
835
+ if t , ok := obj .(* types.Named ); ok {
836
+ obj = typeparams .NamedTypeOrigin (t )
837
+ }
835
838
836
839
// add new node to graph
837
840
node , _ := g .node (obj )
@@ -871,6 +874,13 @@ func (g *graph) use(used, by interface{}, kind edgeKind) {
871
874
by = typeparams .OriginMethod (fn )
872
875
}
873
876
877
+ if t , ok := used .(* types.Named ); ok {
878
+ used = typeparams .NamedTypeOrigin (t )
879
+ }
880
+ if t , ok := by .(* types.Named ); ok {
881
+ by = typeparams .NamedTypeOrigin (t )
882
+ }
883
+
874
884
usedNode , new := g .node (used )
875
885
assert (! new )
876
886
if by == nil {
@@ -1427,13 +1437,14 @@ func (g *graph) typ(t types.Type, parent types.Type) {
1427
1437
// Nothing to do
1428
1438
case * types.Named :
1429
1439
// (9.3) types use their underlying and element types
1430
- g .seeAndUse (t .Underlying (), t , edgeUnderlyingType )
1440
+ origin := typeparams .NamedTypeOrigin (t )
1441
+ g .seeAndUse (origin .Underlying (), t , edgeUnderlyingType )
1431
1442
g .seeAndUse (t .Obj (), t , edgeTypeName )
1432
1443
g .seeAndUse (t , t .Obj (), edgeNamedType )
1433
1444
1434
1445
// (2.4) named types use the pointer type
1435
1446
if _ , ok := t .Underlying ().(* types.Interface ); ! ok && t .NumMethods () > 0 {
1436
- g .seeAndUse (g .newPointer (t ), t , edgePointerType )
1447
+ g .seeAndUse (g .newPointer (origin ), t , edgePointerType )
1437
1448
}
1438
1449
1439
1450
// (2.5) named types use their type parameters
@@ -1462,7 +1473,7 @@ func (g *graph) typ(t types.Type, parent types.Type) {
1462
1473
g .function (g .pkg .IR .Prog .FuncValue (t .Method (i )))
1463
1474
}
1464
1475
1465
- g .typ (t .Underlying (), t )
1476
+ g .typ (origin .Underlying (), t )
1466
1477
case * types.Slice :
1467
1478
// (9.3) types use their underlying and element types
1468
1479
g .seeAndUse (t .Elem (), t , edgeElementType )
0 commit comments