2020 funcSignature string
2121 handlers []* Handler
2222 imports map [string ]struct {}
23+ extraImports map [string ]struct {}
2324 root * Tree
2425 inScopeVars map [string ]struct {}
2526 trailer string
@@ -41,10 +42,11 @@ type (
4142
4243func NewEmitter (mode Mode ) * Emitter {
4344 return & Emitter {
44- mode : mode ,
45- imports : make (map [string ]struct {}),
46- root : NewTree (),
47- inScopeVars : map [string ]struct {}{},
45+ mode : mode ,
46+ imports : make (map [string ]struct {}),
47+ extraImports : make (map [string ]struct {}),
48+ root : NewTree (),
49+ inScopeVars : map [string ]struct {}{},
4850 }
4951}
5052
@@ -63,6 +65,10 @@ func (e *Emitter) AddHandler(include func(string) bool, invocation func(string)
6365 })
6466}
6567
68+ func (e * Emitter ) AddImport (s string ) {
69+ e .extraImports [s ] = struct {}{}
70+ }
71+
6672func (e * Emitter ) Visit (mt protoreflect.MessageType ) {
6773 if e .mode == Gogo122Version &&
6874 shouldIgnoreTypeIfDoesntExistIn122 (string (mt .Descriptor ().FullName ())) {
@@ -161,6 +167,12 @@ func (e *Emitter) genPreamble(out io.Writer) {
161167 }
162168 writef (out , "%s \" %s\" \n " , alias , imp )
163169 }
170+
171+ for imp := range e .extraImports {
172+ writef (out , "\" %s\" \n " , imp )
173+
174+ }
175+
164176 writeln (out , `)` )
165177}
166178
@@ -177,17 +189,17 @@ func (e *Emitter) emit(out io.Writer, parentVar string, node *Tree) {
177189 defer freeVar ()
178190 writef (out , "for _, %s := range %s.%s {\n " , varName , parentVar , vt .GoGetter ())
179191 e .emit (out , varName , node .Children [vt .GoName ()])
180- fmt . Println ( "}" )
192+ writeln ( out , "}" )
181193 } else if desc .IsList () {
182194 varName , freeVar := e .makeVar ("item" )
183195 defer freeVar ()
184196 writef (out , "for _, %s := range %s.%s {\n " , varName , parentVar , vt .GoGetter ())
185197 e .emit (out , varName , node .Children [vt .GoName ()])
186- fmt . Println ( "}" )
198+ writeln ( out , "}" )
187199 } else if oneof := desc .ContainingOneof (); oneof != nil {
188200 writef (out , "switch oneof := %s.%s.(type) {\n " , parentVar , vt .GoGetter ())
189201 e .emitOneOfCases (out , "oneof" , vt , node .Children [vt .GoName ()])
190- fmt . Println ( "}" )
202+ writeln ( out , "}" )
191203 } else {
192204 varName , freeVar := e .makeVar ("y" )
193205 defer freeVar ()
0 commit comments