@@ -137,6 +137,9 @@ func (t *templateData) processAST(f *ast.File) error {
137137 case * ast.MapType :
138138 t .addMapType (x , ts .Name .String (), fieldName .String (), false )
139139 continue
140+ case * ast.ArrayType :
141+ t .addArrayType (x , ts .Name .String (), fieldName .String (), false )
142+ continue
140143 }
141144
142145 logf ("Skipping field type %T, fieldName=%v" , field .Type , fieldName )
@@ -145,7 +148,7 @@ func (t *templateData) processAST(f *ast.File) error {
145148
146149 switch x := se .X .(type ) {
147150 case * ast.ArrayType :
148- t .addArrayType (x , ts .Name .String (), fieldName .String ())
151+ t .addArrayType (x , ts .Name .String (), fieldName .String (), true )
149152 case * ast.Ident :
150153 t .addIdent (x , ts .Name .String (), fieldName .String ())
151154 case * ast.MapType :
@@ -218,17 +221,26 @@ func newGetter(receiverType, fieldName, fieldType, zeroValue string, namedStruct
218221 }
219222}
220223
221- func (t * templateData ) addArrayType (x * ast.ArrayType , receiverType , fieldName string ) {
224+ func (t * templateData ) addArrayType (x * ast.ArrayType , receiverType , fieldName string , isAPointer bool ) {
222225 var eltType string
226+ var ng * getter
223227 switch elt := x .Elt .(type ) {
224228 case * ast.Ident :
225229 eltType = elt .String ()
230+ ng = newGetter (receiverType , fieldName , "[]" + eltType , "nil" , false )
231+ case * ast.StarExpr :
232+ ident , ok := elt .X .(* ast.Ident )
233+ if ! ok {
234+ return
235+ }
236+ ng = newGetter (receiverType , fieldName , "[]*" + ident .String (), "nil" , false )
226237 default :
227238 logf ("addArrayType: type %q, field %q: unknown elt type: %T %+v; skipping." , receiverType , fieldName , elt , elt )
228239 return
229240 }
230241
231- t .Getters = append (t .Getters , newGetter (receiverType , fieldName , "[]" + eltType , "nil" , false ))
242+ ng .ArrayType = ! isAPointer
243+ t .Getters = append (t .Getters , ng )
232244}
233245
234246func (t * templateData ) addIdent (x * ast.Ident , receiverType , fieldName string ) {
@@ -322,6 +334,7 @@ type getter struct {
322334 ZeroValue string
323335 NamedStruct bool // Getter for named struct.
324336 MapType bool
337+ ArrayType bool
325338}
326339
327340type byName []* getter
@@ -356,8 +369,8 @@ func ({{.ReceiverVar}} *{{.ReceiverType}}) Get{{.FieldName}}() *{{.FieldType}} {
356369 }
357370 return {{.ReceiverVar}}.{{.FieldName}}
358371}
359- {{else if .MapType}}
360- // Get{{.FieldName}} returns the {{.FieldName}} map if it's non-nil, an empty map otherwise.
372+ {{else if or .MapType .ArrayType }}
373+ // Get{{.FieldName}} returns the {{.FieldName}} {{if .MapType}} map{{else if .ArrayType }}array{{end}} if it's non-nil, an empty map otherwise.
361374func ({{.ReceiverVar}} *{{.ReceiverType}}) Get{{.FieldName}}() {{.FieldType}} {
362375 if {{.ReceiverVar}} == nil || {{.ReceiverVar}}.{{.FieldName}} == nil {
363376 return {{.ZeroValue}}
@@ -402,7 +415,7 @@ func Test{{.ReceiverType}}_Get{{.FieldName}}(tt *testing.T) {
402415 {{.ReceiverVar}} = nil
403416 {{.ReceiverVar}}.Get{{.FieldName}}()
404417}
405- {{else if .MapType}}
418+ {{else if or .MapType .ArrayType }}
406419func Test{{.ReceiverType}}_Get{{.FieldName}}(tt *testing.T) {
407420 zeroValue := {{.FieldType}}{}
408421 {{.ReceiverVar}} := &{{.ReceiverType}}{ {{.FieldName}}: zeroValue }
0 commit comments