@@ -637,6 +637,12 @@ func (p *Parser) convertSignature(u types.Universe, t *gotypes.Signature) *types
637637
638638// walkType adds the type, and any necessary child types.
639639func (p * Parser ) walkType (u types.Universe , useName * types.Name , in gotypes.Type ) * types.Type {
640+ var out * types.Type
641+ defer func () {
642+ if out .GetMultiverse () == nil {
643+ out .NewMultiverse (u )
644+ }
645+ }()
640646 // Most of the cases are underlying types of the named type.
641647 name := goNameToName (in .String ())
642648 if useName != nil {
@@ -645,13 +651,13 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
645651
646652 // Handle alias types conditionally on go1.22+.
647653 // Inline this once the minimum supported version is go1.22
648- if out : = p .walkAliasType (u , in ); out != nil {
654+ if out = p .walkAliasType (u , in ); out != nil {
649655 return out
650656 }
651657
652658 switch t := in .(type ) {
653659 case * gotypes.Struct :
654- out : = u .Type (name )
660+ out = u .Type (name )
655661 out .GoType = in
656662 if out .Kind != types .Unknown {
657663 return out
@@ -670,7 +676,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
670676 }
671677 return out
672678 case * gotypes.Map :
673- out : = u .Type (name )
679+ out = u .Type (name )
674680 out .GoType = in
675681 if out .Kind != types .Unknown {
676682 return out
@@ -680,7 +686,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
680686 out .Key = p .walkType (u , nil , t .Key ())
681687 return out
682688 case * gotypes.Pointer :
683- out : = u .Type (name )
689+ out = u .Type (name )
684690 out .GoType = in
685691 if out .Kind != types .Unknown {
686692 return out
@@ -689,7 +695,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
689695 out .Elem = p .walkType (u , nil , t .Elem ())
690696 return out
691697 case * gotypes.Slice :
692- out : = u .Type (name )
698+ out = u .Type (name )
693699 out .GoType = in
694700 if out .Kind != types .Unknown {
695701 return out
@@ -698,7 +704,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
698704 out .Elem = p .walkType (u , nil , t .Elem ())
699705 return out
700706 case * gotypes.Array :
701- out : = u .Type (name )
707+ out = u .Type (name )
702708 out .GoType = in
703709 if out .Kind != types .Unknown {
704710 return out
@@ -708,7 +714,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
708714 out .Len = in .(* gotypes.Array ).Len ()
709715 return out
710716 case * gotypes.Chan :
711- out : = u .Type (name )
717+ out = u .Type (name )
712718 out .GoType = in
713719 if out .Kind != types .Unknown {
714720 return out
@@ -719,7 +725,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
719725 // cannot be properly written.
720726 return out
721727 case * gotypes.Basic :
722- out : = u .Type (types.Name {
728+ out = u .Type (types.Name {
723729 Package : "" , // This is a magic package name in the Universe.
724730 Name : t .Name (),
725731 })
@@ -730,7 +736,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
730736 out .Kind = types .Unsupported
731737 return out
732738 case * gotypes.Signature :
733- out : = u .Type (name )
739+ out = u .Type (name )
734740 out .GoType = in
735741 if out .Kind != types .Unknown {
736742 return out
@@ -739,7 +745,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
739745 out .Signature = p .convertSignature (u , t )
740746 return out
741747 case * gotypes.Interface :
742- out : = u .Type (name )
748+ out = u .Type (name )
743749 out .GoType = in
744750 if out .Kind != types .Unknown {
745751 return out
@@ -758,7 +764,6 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
758764 }
759765 return out
760766 case * gotypes.Named :
761- var out * types.Type
762767 switch t .Underlying ().(type ) {
763768 case * gotypes.Named , * gotypes.Basic , * gotypes.Map , * gotypes.Slice :
764769 name := goNameToName (t .String ())
@@ -785,7 +790,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
785790 name .Name = fmt .Sprintf ("%s[%s]" , strings .SplitN (name .Name , "[" , 2 )[0 ], strings .Join (tpNames , "," ))
786791 }
787792
788- if out : = u .Type (name ); out .Kind != types .Unknown {
793+ if out = u .Type (name ); out .Kind != types .Unknown {
789794 out .GoType = in
790795 return out // short circuit if we've already made this.
791796 }
@@ -797,7 +802,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
797802 // "feature" for users. This flattens those types
798803 // together.
799804 name := goNameToName (t .String ())
800- if out : = u .Type (name ); out .Kind != types .Unknown {
805+ if out = u .Type (name ); out .Kind != types .Unknown {
801806 return out // short circuit if we've already made this.
802807 }
803808 out = p .walkType (u , & name , t .Underlying ())
@@ -827,7 +832,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
827832 Kind : types .TypeParam ,
828833 }
829834 default :
830- out : = u .Type (name )
835+ out = u .Type (name )
831836 out .GoType = in
832837 if out .Kind != types .Unknown {
833838 return out
0 commit comments