From 729eb32f13088756853120da55c28a3c1ad47340 Mon Sep 17 00:00:00 2001 From: limpo1989 Date: Wed, 15 Nov 2023 15:30:44 +0800 Subject: [PATCH] Fix the panic caused by the closure bean --- gs/gs.go | 32 +++++++++++++++++--------------- gs/gs_test.go | 6 +++++- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/gs/gs.go b/gs/gs.go index fc4392ba..37b3fce7 100644 --- a/gs/gs.go +++ b/gs/gs.go @@ -489,23 +489,25 @@ func (c *container) resolveBean(b *BeanDefinition) error { if b.method { selector, ok := b.f.Arg(0) if !ok || selector == "" { - selector, _ = b.f.In(0) + selector, ok = b.f.In(0) } - parents, err := c.findBean(selector) - if err != nil { - return err - } - n := len(parents) - if n > 1 { - msg := fmt.Sprintf("found %d parent beans, bean:%q type:%q [", n, selector, b.t.In(0)) - for _, b := range parents { - msg += "( " + b.String() + " ), " + if ok { + parents, err := c.findBean(selector) + if err != nil { + return err + } + n := len(parents) + if n > 1 { + msg := fmt.Sprintf("found %d parent beans, bean:%q type:%q [", n, selector, b.t.In(0)) + for _, b := range parents { + msg += "( " + b.String() + " ), " + } + msg = msg[:len(msg)-2] + "]" + return errors.New(msg) + } else if n == 0 { + b.status = Deleted + return nil } - msg = msg[:len(msg)-2] + "]" - return errors.New(msg) - } else if n == 0 { - b.status = Deleted - return nil } } diff --git a/gs/gs_test.go b/gs/gs_test.go index 5b43d36d..bd05533a 100644 --- a/gs/gs_test.go +++ b/gs/gs_test.go @@ -3070,10 +3070,14 @@ func (tac *testAutoConfiguration) NewEmpty() *BeanDefinition { return NewBean(new(struct{})).Name("empty") } -func (tac *testAutoConfiguration) NewFoo() *testFoo { +func (tac *testAutoConfiguration) newFoo() *testFoo { return &testFoo{prefix: tac.Prefix} } +func (tac *testAutoConfiguration) NewFoo() *BeanDefinition { + return NewBean(tac.newFoo) +} + func (tac *testAutoConfiguration) NewBar(foo *testFoo) (*testBar, error) { return &testBar{foo: foo}, nil }