Skip to content

Commit

Permalink
feat(plugin): update concurrent
Browse files Browse the repository at this point in the history
  • Loading branch information
Just-maple committed Nov 17, 2023
1 parent 43cbffa commit 7f6c0e7
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 30 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ go 1.16

require (
github.com/go-sql-driver/mysql v1.7.1
github.com/go-zing/gozz-core v0.0.0-20231103163229-5a75c63fde84
github.com/go-zing/gozz-core v0.0.0-20231117163347-a33e4902150c
github.com/spf13/cobra v1.7.0
)
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-zing/gozz-core v0.0.0-20231103163229-5a75c63fde84 h1:4QvPv/TArHlQny3X4/YxUKacPPB4wQFT8uayZOXZZ/E=
github.com/go-zing/gozz-core v0.0.0-20231103163229-5a75c63fde84/go.mod h1:SAulUrU1emuMCixZXSm7LD++3SN/tgG0ex51zaBbqdA=
github.com/go-zing/gozz-core v0.0.0-20231117163347-a33e4902150c h1:r/LSy4rAJ7GCNlc4iKTD1B6M9qb8XTtSWU3beXS4owM=
github.com/go-zing/gozz-core v0.0.0-20231117163347-a33e4902150c/go.mod h1:SAulUrU1emuMCixZXSm7LD++3SN/tgG0ex51zaBbqdA=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
Expand Down
25 changes: 17 additions & 8 deletions internal/plugins/impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ type (
implDstType struct {
Entities zcore.DeclEntities
Filename string
RecvName string
Methods map[string]*ImplMethod
Files map[string]*zcore.File
}

ImplMethod struct {
Expand Down Expand Up @@ -119,12 +121,11 @@ func (dst *implDstType) init(modifySet *zcore.ModifySet, key implDstKey) {
zcore.Bytesf(implTypeDeclaration, strings.Join(impls, ";"), strings.Join(wires, ""), key.Typename))
}

func (dst *implDstType) apply(set *zcore.ModifySet, key implDstKey) (err error) {
recName := ""
func (dst *implDstType) prepare(set *zcore.ModifySet, key implDstKey) (err error) {
typeDecl := false

// parse package type methods
files, err := zcore.WalkPackage(key.Package, func(file *zcore.File) (err error) {
dst.Files, err = zcore.WalkPackage(key.Package, func(file *zcore.File) (err error) {
// check implement type declared
typeDecl = typeDecl || file.Lookup(key.Typename) != nil

Expand All @@ -145,7 +146,7 @@ func (dst *implDstType) apply(set *zcore.ModifySet, key implDstKey) (err error)

// use exist receiver name
if len(rec.Names) > 0 && len(rec.Names[0].Name) > 0 {
recName = rec.Names[0].Name
dst.RecvName = rec.Names[0].Name
}

// exist method
Expand All @@ -166,11 +167,14 @@ func (dst *implDstType) apply(set *zcore.ModifySet, key implDstKey) (err error)
}

// no exist receiver name found use lower case typename
if len(recName) == 0 {
if len(dst.RecvName) == 0 {
sp := strings.Split(zcore.SnakeCase(key.Typename), "_")
recName = strings.ToLower(sp[len(sp)-1])
dst.RecvName = strings.ToLower(sp[len(sp)-1])
}
return
}

func (dst *implDstType) apply(set *zcore.ModifySet, key implDstKey) (err error) {
// sort by order
names := make([]string, 0, len(dst.Methods))
for name := range dst.Methods {
Expand All @@ -181,7 +185,7 @@ func (dst *implDstType) apply(set *zcore.ModifySet, key implDstKey) (err error)
// implement methods
for _, name := range names {
method := dst.Methods[name]
if f, ok := files[method.Filename]; ok && method.DstFile == nil {
if f, ok := dst.Files[method.Filename]; ok && method.DstFile == nil {
method.DstFile = f
}

Expand All @@ -202,7 +206,7 @@ func (dst *implDstType) apply(set *zcore.ModifySet, key implDstKey) (err error)
// pointer receiver
typename = "*" + typename
}
file.Appends = append(file.Appends, zcore.Bytesf(implMethodTemplate, recName, typename, name, sign))
file.Appends = append(file.Appends, zcore.Bytesf(implMethodTemplate, dst.RecvName, typename, name, sign))
} else if ft := (&ast.FuncType{
Func: token.NoPos, // must unset func position to adjust func type offset
Params: method.DstType.Params, // params types
Expand All @@ -225,8 +229,13 @@ func (i Impl) Run(entities zcore.DeclEntities) (err error) {
sort.Slice(keys, func(i, j int) bool {
return keys[i].Package+keys[i].Typename < keys[j].Package+keys[j].Typename
})

for _, key := range keys {
if dst := group[key]; len(dst.Methods) > 0 {
if err = dst.prepare(set, key); err != nil {
return
}
zcore.Logger.Printf("implement %s:%s\n", key.Package, key.Typename)
if err = dst.apply(set, key); err != nil {
return
}
Expand Down
51 changes: 32 additions & 19 deletions internal/plugins/wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"path/filepath"
"sort"
"strings"
"sync"

zcore "github.com/go-zing/gozz-core"
)
Expand Down Expand Up @@ -237,13 +238,13 @@ func (w Wire) Run(es zcore.DeclEntities) (err error) {
}
}

group := zcore.ErrGroup{}
// generate sets files
if err = w.generateSets(setFiles); err != nil {
return
}

group.Go(func() error { return w.generateSets(setFiles) })
// generate injects files
if err = w.generateInjects(setFiles, injectFiles); err != nil {
group.Go(func() error { return w.generateInjects(setFiles, injectFiles) })

if err = group.Wait(); err != nil {
return
}

Expand All @@ -255,7 +256,7 @@ func (w Wire) Run(es zcore.DeclEntities) (err error) {
if _, err = zcore.ExecCommand(fmt.Sprintf("go list -m %s || go get %s", wireImportPath, wireImportPath), dir); err != nil {
return
}

zcore.Logger.Printf("executing wire %s\n", dir)
// run wire
if _, err = zcore.ExecCommand("wire", dir); err != nil {
return
Expand Down Expand Up @@ -416,12 +417,12 @@ func (w Wire) parseInterfaceMethods(name string, dir string, imports zcore.Impor

func (w Wire) generateSet(dir string, sets map[string]*wireDeclSet) (err error) {
var (
wireSets = make([]WireSet, 0, len(sets))
dstImports = zcore.Imports{"github.com/google/wire": "wire"}
dstImportPath = zcore.GetImportPath(dir)

aopImports = make(zcore.Imports)
aopSets = make(map[string]*WireAop)
aopImportsMutex sync.Mutex
aopImports = make(zcore.Imports)
aopSets = make(map[string]*WireAop)
)

parseDecl := func(decl *zcore.AnnotatedDecl, wd *wireDecl) (el *WireSetElement) {
Expand Down Expand Up @@ -474,7 +475,9 @@ func (w Wire) generateSet(dir string, sets map[string]*wireDeclSet) (err error)
aopType, ok := aopSets[aopTypename]
if !ok {
// aop interface type
aopImportsMutex.Lock()
interfaceName := zcore.FixPackage(bind, el.Path, dstImportPath, srcImports, aopImports)
aopImportsMutex.Unlock()

// add aop generate entry
aopType = &WireAop{
Expand Down Expand Up @@ -523,25 +526,35 @@ func (w Wire) generateSet(dir string, sets map[string]*wireDeclSet) (err error)
}

handleSet := func(decls *wireDeclSet) (ws WireSet) {
for _, decl := range decls.keys {
if el := parseDecl(decl, decls.m[decl]); el != nil && len(el.Decls) > 0 {
wg := sync.WaitGroup{}
wg.Add(len(decls.keys))
els := make([]*WireSetElement, len(decls.keys))
for i := range decls.keys {
decl := decls.keys[i]
go func(i int) { defer wg.Done(); els[i] = parseDecl(decl, decls.m[decl]) }(i)
}
wg.Wait()
for _, el := range els {
if el != nil && len(el.Decls) > 0 {
ws.Elements = append(ws.Elements, el)
}
}
return
}

for set, decls := range sets {
if ws := handleSet(decls); len(ws.Elements) > 0 {
ws.Name = set
wireSets = append(wireSets, ws)
}
}
wg := sync.WaitGroup{}
wg.Add(len(sets))

if len(wireSets) == 0 {
return
wireSets := make([]*WireSet, 0, len(sets))
for set := range sets {
i := len(wireSets)
decls := sets[set]
wireSets = append(wireSets, &WireSet{Name: set})
go func() { defer wg.Done(); wireSets[i].Elements = handleSet(decls).Elements }()
}

wg.Wait()

// package name
pkg := zcore.GetImportName(dir)

Expand Down

0 comments on commit 7f6c0e7

Please sign in to comment.