From e46cd1ef8a43c564c7dd06b44a7bf76f3c7da4e2 Mon Sep 17 00:00:00 2001 From: "frederik.jatzkowski" Date: Tue, 4 Mar 2025 14:52:03 +0100 Subject: [PATCH 1/2] added speaking names for cleanup functions --- .../wire/testdata/Cleanup/want/wire_gen.go | 8 ++-- .../testdata/CleanupNameCollision/foo/foo.go | 46 +++++++++++++++++++ .../testdata/CleanupNameCollision/foo/wire.go | 27 +++++++++++ .../wire/testdata/CleanupNameCollision/pkg | 1 + .../CleanupNameCollision/want/program_out.txt | 2 + .../CleanupNameCollision/want/wire_gen.go | 18 ++++++++ .../testdata/PartialCleanup/want/wire_gen.go | 14 +++--- internal/wire/wire.go | 2 +- 8 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 internal/wire/testdata/CleanupNameCollision/foo/foo.go create mode 100644 internal/wire/testdata/CleanupNameCollision/foo/wire.go create mode 100644 internal/wire/testdata/CleanupNameCollision/pkg create mode 100644 internal/wire/testdata/CleanupNameCollision/want/program_out.txt create mode 100644 internal/wire/testdata/CleanupNameCollision/want/wire_gen.go 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..017a188b --- /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 := injectBar() + fmt.Println(*bar) + cleanup() + fmt.Println(*bar) +} + +type Cleanup int +type Bar int + +func provideCleanup() (*Cleanup, func()) { + foo := new(Cleanup) + *foo = 42 + return foo, func() { *foo = 0 } +} + +func provideBar(cleanup *Cleanup) (*Bar, func()) { + bar := new(Bar) + *bar = 77 + return bar, func() { + if *cleanup == 0 { + panic("foo cleaned up before bar") + } + *bar = 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..fe9605f1 --- /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 injectBar() (*Bar, func()) { + wire.Build(provideCleanup, provideBar) + 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..9fa8bedc --- /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 injectBar() (*Bar, func()) { + cleanup, cleanupCleanup := provideCleanup() + bar, barCleanup := provideBar(cleanup) + return bar, func() { + barCleanup() + cleanupCleanup() + } +} 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) } From ea288c404d8ff2545199de9c6fbeb8ea27efb7dc Mon Sep 17 00:00:00 2001 From: "frederik.jatzkowski" Date: Tue, 4 Mar 2025 15:17:19 +0100 Subject: [PATCH 2/2] improved test --- .../testdata/CleanupNameCollision/foo/foo.go | 24 +++++++++---------- .../testdata/CleanupNameCollision/foo/wire.go | 4 ++-- .../CleanupNameCollision/want/wire_gen.go | 12 +++++----- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/internal/wire/testdata/CleanupNameCollision/foo/foo.go b/internal/wire/testdata/CleanupNameCollision/foo/foo.go index 017a188b..5f964799 100644 --- a/internal/wire/testdata/CleanupNameCollision/foo/foo.go +++ b/internal/wire/testdata/CleanupNameCollision/foo/foo.go @@ -19,28 +19,28 @@ import ( ) func main() { - bar, cleanup := injectBar() + bar, cleanup := injectFooCleanup() fmt.Println(*bar) cleanup() fmt.Println(*bar) } -type Cleanup int -type Bar int +type Foo int +type FooCleanup int -func provideCleanup() (*Cleanup, func()) { - foo := new(Cleanup) +func provideFoo() (*Foo, func()) { + foo := new(Foo) *foo = 42 return foo, func() { *foo = 0 } } -func provideBar(cleanup *Cleanup) (*Bar, func()) { - bar := new(Bar) - *bar = 77 - return bar, func() { - if *cleanup == 0 { - panic("foo cleaned up before bar") +func provideFooCleanup(foo *Foo) (*FooCleanup, func()) { + fooCleanup := new(FooCleanup) + *fooCleanup = 77 + return fooCleanup, func() { + if *foo == 0 { + panic("foo cleaned up before foo cleanup") } - *bar = 0 + *fooCleanup = 0 } } diff --git a/internal/wire/testdata/CleanupNameCollision/foo/wire.go b/internal/wire/testdata/CleanupNameCollision/foo/wire.go index fe9605f1..c11f9092 100644 --- a/internal/wire/testdata/CleanupNameCollision/foo/wire.go +++ b/internal/wire/testdata/CleanupNameCollision/foo/wire.go @@ -21,7 +21,7 @@ import ( "github.com/google/wire" ) -func injectBar() (*Bar, func()) { - wire.Build(provideCleanup, provideBar) +func injectFooCleanup() (*FooCleanup, func()) { + wire.Build(provideFoo, provideFooCleanup) return nil, nil } diff --git a/internal/wire/testdata/CleanupNameCollision/want/wire_gen.go b/internal/wire/testdata/CleanupNameCollision/want/wire_gen.go index 9fa8bedc..6c1e7af4 100644 --- a/internal/wire/testdata/CleanupNameCollision/want/wire_gen.go +++ b/internal/wire/testdata/CleanupNameCollision/want/wire_gen.go @@ -8,11 +8,11 @@ package main // Injectors from wire.go: -func injectBar() (*Bar, func()) { - cleanup, cleanupCleanup := provideCleanup() - bar, barCleanup := provideBar(cleanup) - return bar, func() { - barCleanup() - cleanupCleanup() +func injectFooCleanup() (*FooCleanup, func()) { + foo, fooCleanup := provideFoo() + mainFooCleanup, mainFooCleanupCleanup := provideFooCleanup(foo) + return mainFooCleanup, func() { + mainFooCleanupCleanup() + fooCleanup() } }