func (g *generator) Generate(pkg *model.Package, pkgName string) error { g.p("// Automatically generated by MockGen. DO NOT EDIT!") if g.filename != "" { g.p("// Source: %v", g.filename) } else { g.p("// Source: %v (interfaces: %v)", g.srcPackage, g.srcInterfaces) } g.p("") // Get all required imports, and generate unique names for them all. im := pkg.Imports() im[gomockImportPath] = true g.packageMap = make(map[string]string, len(im)) localNames := make(map[string]bool, len(im)) for pth := range im { base := sanitize(path.Base(pth)) // Local names for an imported package can usually be the basename of the import path. // A couple of situations don't permit that, such as duplicate local names // (e.g. importing "html/template" and "text/template"), or where the basename is // a keyword (e.g. "foo/case"). // try base0, base1, ... pkgName := base i := 0 for localNames[pkgName] || token.Lookup(pkgName).IsKeyword() { pkgName = base + strconv.Itoa(i) i++ } g.packageMap[pth] = pkgName localNames[pkgName] = true } g.p("package %v", pkgName) g.p("") g.p("import (") g.in() for path, pkg := range g.packageMap { if path == *selfPackage { continue } g.p("%v %q", pkg, path) } for _, path := range pkg.DotImports { g.p(". %q", path) } g.out() g.p(")") for _, intf := range pkg.Interfaces { if err := g.GenerateMockInterface(intf); err != nil { return err } } return nil }
func (g *generator) Generate(pkg *model.Package, pkgName string) error { g.p("// Automatically generated by MockGen. DO NOT EDIT!") if g.filename != "" { g.p("// Source: %v", g.filename) } else { g.p("// Source: %v (interfaces: %v)", g.srcPackage, g.srcInterfaces) } g.p("") // Get all required imports, and generate unique names for them all. im := pkg.Imports() im[gomockImportPath] = true g.packageMap = make(map[string]string, len(im)) localNames := make(map[string]bool, len(im)) for pth := range im { base := sanitize(path.Base(pth)) // try base0, base1, ... pkgName := base i := 0 for localNames[pkgName] { pkgName = base + strconv.Itoa(i) i++ } g.packageMap[pth] = pkgName localNames[pkgName] = true } g.p("package %v", pkgName) g.p("") g.p("import (") g.in() for path, pkg := range g.packageMap { if path == *selfPackage { continue } g.p("%v %q", pkg, path) } for _, path := range pkg.DotImports { g.p(". %q", path) } g.out() g.p(")") for _, intf := range pkg.Interfaces { if err := g.GenerateMockInterface(intf); err != nil { return err } } return nil }