Skip to content

Commit

Permalink
fix(depinject): move non-thread safe write (#12484)
Browse files Browse the repository at this point in the history
* fix(depinject): move non-thread safe write

* remove whitespace

* Push invoker descriptor mutation down one more layer

Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com>
  • Loading branch information
kocubinski and alexanderbez authored Jul 7, 2022
1 parent a96f8e2 commit d025cf0
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 8 deletions.
2 changes: 1 addition & 1 deletion core/appmodule/option.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func Provide(providers ...interface{}) Option {
func Invoke(invokers ...interface{}) Option {
return funcOption(func(initializer *internal.ModuleInitializer) error {
for _, invoker := range invokers {
desc, err := depinject.ExtractProviderDescriptor(invoker)
desc, err := depinject.ExtractInvokerDescriptor(invoker)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion depinject/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ func InvokeInModule(moduleName string, invokers ...interface{}) Config {

func invoke(ctr *container, key *moduleKey, invokers []interface{}) error {
for _, c := range invokers {
rc, err := ExtractProviderDescriptor(c)
rc, err := ExtractInvokerDescriptor(c)
if err != nil {
return errors.WithStack(err)
}
Expand Down
6 changes: 0 additions & 6 deletions depinject/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -365,12 +365,6 @@ func (c *container) addInvoker(provider *ProviderDescriptor, key *moduleKey) err
return fmt.Errorf("invoker function %s should not return any outputs", provider.Location)
}

// make all inputs optional
for i, input := range provider.Inputs {
input.Optional = true
provider.Inputs[i] = input
}

c.invokers = append(c.invokers, invoker{
fn: provider,
modKey: key,
Expand Down
20 changes: 20 additions & 0 deletions depinject/provider_desc.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,26 @@ func ExtractProviderDescriptor(provider interface{}) (ProviderDescriptor, error)
return expandStructArgsProvider(rctr)
}

func ExtractInvokerDescriptor(provider interface{}) (ProviderDescriptor, error) {
rctr, ok := provider.(ProviderDescriptor)
if !ok {
var err error
rctr, err = doExtractProviderDescriptor(provider)

// mark all inputs as optional
for i, input := range rctr.Inputs {
input.Optional = true
rctr.Inputs[i] = input
}

if err != nil {
return ProviderDescriptor{}, err
}
}

return expandStructArgsProvider(rctr)
}

func doExtractProviderDescriptor(ctr interface{}) (ProviderDescriptor, error) {
val := reflect.ValueOf(ctr)
typ := val.Type()
Expand Down

0 comments on commit d025cf0

Please sign in to comment.