Skip to content

Commit b28b003

Browse files
committed
Fix archive mode does not support type aliases
Fixes #263
1 parent 6a0445c commit b28b003

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

mockgen/model/model_gotypes.go

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,6 @@ func parameterFromGoTypesType(v *types.Var, variadic bool) (*Parameter, error) {
7474
}
7575

7676
func typeFromGoTypesType(t types.Type) (Type, error) {
77-
if t, ok := t.(*types.Named); ok {
78-
tn := t.Obj()
79-
if tn.Pkg() == nil {
80-
return PredeclaredType(tn.Name()), nil
81-
}
82-
return &NamedType{
83-
Package: tn.Pkg().Path(),
84-
Type: tn.Name(),
85-
}, nil
86-
}
87-
88-
// only unnamed or predeclared types after here
89-
9077
// Lots of types have element types. Let's do the parsing and error checking for all of them.
9178
var elemType Type
9279
if t, ok := t.(interface{ Elem() types.Type }); ok {
@@ -154,6 +141,39 @@ func typeFromGoTypesType(t types.Type) (Type, error) {
154141
return PredeclaredType("struct{}"), nil
155142
}
156143
// TODO: UnsafePointer
144+
case *types.Named, *types.Alias:
145+
object := t.(interface{ Obj() *types.TypeName })
146+
name := object.Obj().Name()
147+
var pkg string
148+
if object.Obj().Pkg() != nil {
149+
pkg = object.Obj().Pkg().Path()
150+
}
151+
152+
// TypeArgs method not available for aliases in go1.22
153+
genericType, ok := t.(interface{ TypeArgs() *types.TypeList })
154+
if !ok || genericType.TypeArgs() == nil {
155+
return &NamedType{
156+
Package: pkg,
157+
Type: name,
158+
}, nil
159+
}
160+
161+
typeParams := &TypeParametersType{TypeParameters: make([]Type, genericType.TypeArgs().Len())}
162+
for i := range genericType.TypeArgs().Len() {
163+
typeParam := genericType.TypeArgs().At(i)
164+
typedParam, err := typeFromGoTypesType(typeParam)
165+
if err != nil {
166+
return nil, fmt.Errorf("parse type parameter %v: %w", typeParam.String(), err)
167+
}
168+
169+
typeParams.TypeParameters[i] = typedParam
170+
}
171+
172+
return &NamedType{
173+
Package: pkg,
174+
Type: name,
175+
TypeParams: typeParams,
176+
}, nil
157177
}
158178

159179
return nil, fmt.Errorf("can't yet turn %v (%T) into a model.Type", t.String(), t)

0 commit comments

Comments
 (0)