diff --git a/internal/wire/testdata/Cleanup/want/wire_gen.go b/internal/wire/testdata/Cleanup/want/wire_gen.go index 1519c104..fde45c1a 100644 --- a/internal/wire/testdata/Cleanup/want/wire_gen.go +++ b/internal/wire/testdata/Cleanup/want/wire_gen.go @@ -9,10 +9,10 @@ package main // Injectors from wire.go: func injectBar() (*Bar, func()) { - foo, cleanup := provideFoo() - bar, cleanup2 := provideBar(foo) + foo, fooCleanup := provideFoo() + bar, barCleanup := provideBar(foo) return bar, func() { - cleanup2() - cleanup() + barCleanup() + fooCleanup() } } diff --git a/internal/wire/testdata/CleanupNameCollision/foo/foo.go b/internal/wire/testdata/CleanupNameCollision/foo/foo.go new file mode 100644 index 00000000..5f964799 --- /dev/null +++ b/internal/wire/testdata/CleanupNameCollision/foo/foo.go @@ -0,0 +1,46 @@ +// Copyright 2018 The Wire Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "fmt" +) + +func main() { + bar, cleanup := injectFooCleanup() + fmt.Println(*bar) + cleanup() + fmt.Println(*bar) +} + +type Foo int +type FooCleanup int + +func provideFoo() (*Foo, func()) { + foo := new(Foo) + *foo = 42 + return foo, func() { *foo = 0 } +} + +func provideFooCleanup(foo *Foo) (*FooCleanup, func()) { + fooCleanup := new(FooCleanup) + *fooCleanup = 77 + return fooCleanup, func() { + if *foo == 0 { + panic("foo cleaned up before foo cleanup") + } + *fooCleanup = 0 + } +} diff --git a/internal/wire/testdata/CleanupNameCollision/foo/wire.go b/internal/wire/testdata/CleanupNameCollision/foo/wire.go new file mode 100644 index 00000000..c11f9092 --- /dev/null +++ b/internal/wire/testdata/CleanupNameCollision/foo/wire.go @@ -0,0 +1,27 @@ +// Copyright 2018 The Wire Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build wireinject +// +build wireinject + +package main + +import ( + "github.com/google/wire" +) + +func injectFooCleanup() (*FooCleanup, func()) { + wire.Build(provideFoo, provideFooCleanup) + return nil, nil +} diff --git a/internal/wire/testdata/CleanupNameCollision/pkg b/internal/wire/testdata/CleanupNameCollision/pkg new file mode 100644 index 00000000..f7a5c8ce --- /dev/null +++ b/internal/wire/testdata/CleanupNameCollision/pkg @@ -0,0 +1 @@ +example.com/foo diff --git a/internal/wire/testdata/CleanupNameCollision/want/program_out.txt b/internal/wire/testdata/CleanupNameCollision/want/program_out.txt new file mode 100644 index 00000000..d7706427 --- /dev/null +++ b/internal/wire/testdata/CleanupNameCollision/want/program_out.txt @@ -0,0 +1,2 @@ +77 +0 diff --git a/internal/wire/testdata/CleanupNameCollision/want/wire_gen.go b/internal/wire/testdata/CleanupNameCollision/want/wire_gen.go new file mode 100644 index 00000000..6c1e7af4 --- /dev/null +++ b/internal/wire/testdata/CleanupNameCollision/want/wire_gen.go @@ -0,0 +1,18 @@ +// Code generated by Wire. DO NOT EDIT. + +//go:generate go run -mod=mod github.com/google/wire/cmd/wire +//go:build !wireinject +// +build !wireinject + +package main + +// Injectors from wire.go: + +func injectFooCleanup() (*FooCleanup, func()) { + foo, fooCleanup := provideFoo() + mainFooCleanup, mainFooCleanupCleanup := provideFooCleanup(foo) + return mainFooCleanup, func() { + mainFooCleanupCleanup() + fooCleanup() + } +} diff --git a/internal/wire/testdata/PartialCleanup/want/wire_gen.go b/internal/wire/testdata/PartialCleanup/want/wire_gen.go index 6cf26401..ced10cfb 100644 --- a/internal/wire/testdata/PartialCleanup/want/wire_gen.go +++ b/internal/wire/testdata/PartialCleanup/want/wire_gen.go @@ -9,20 +9,20 @@ package main // Injectors from wire.go: func injectBaz() (Baz, func(), error) { - foo, cleanup := provideFoo() - bar, cleanup2, err := provideBar(foo) + foo, fooCleanup := provideFoo() + bar, barCleanup, err := provideBar(foo) if err != nil { - cleanup() + fooCleanup() return 0, nil, err } baz, err := provideBaz(bar) if err != nil { - cleanup2() - cleanup() + barCleanup() + fooCleanup() return 0, nil, err } return baz, func() { - cleanup2() - cleanup() + barCleanup() + fooCleanup() }, nil } diff --git a/internal/wire/wire.go b/internal/wire/wire.go index 5cedeb1a..e4aa144d 100644 --- a/internal/wire/wire.go +++ b/internal/wire/wire.go @@ -673,7 +673,7 @@ func (ig *injectorGen) funcProviderCall(lname string, c *call, injectSig outputS ig.p("\t%s", lname) prevCleanup := len(ig.cleanupNames) if c.hasCleanup { - cname := disambiguate("cleanup", ig.nameInInjector) + cname := disambiguate(lname+"Cleanup", ig.nameInInjector) ig.cleanupNames = append(ig.cleanupNames, cname) ig.p(", %s", cname) }