wire: only apply wireinject build tag to generated package (google/go-cloud#176)
This commit is contained in:
23
internal/wire/testdata/BuildTagsMainOnly/bar/bar.go
vendored
Normal file
23
internal/wire/testdata/BuildTagsMainOnly/bar/bar.go
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// Copyright 2018 Google LLC
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
//+build !wireinject
|
||||||
|
|
||||||
|
// Package bar includes both wireinject and non-wireinject variants.
|
||||||
|
package bar
|
||||||
|
|
||||||
|
import "github.com/google/go-cloud/wire"
|
||||||
|
|
||||||
|
// Set provides a friendly user greeting.
|
||||||
|
var Set = wire.NewSet(wire.Value("Hello, World!"))
|
||||||
22
internal/wire/testdata/BuildTagsMainOnly/bar/bar_inject.go
vendored
Normal file
22
internal/wire/testdata/BuildTagsMainOnly/bar/bar_inject.go
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
// Copyright 2018 Google LLC
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
//+build wireinject
|
||||||
|
|
||||||
|
package bar
|
||||||
|
|
||||||
|
import "github.com/google/go-cloud/wire"
|
||||||
|
|
||||||
|
// Set provides an unfriendly user greeting.
|
||||||
|
var Set = wire.NewSet(wire.Value("Bah humbug! This is the wrong variant!"))
|
||||||
21
internal/wire/testdata/BuildTagsMainOnly/foo/foo.go
vendored
Normal file
21
internal/wire/testdata/BuildTagsMainOnly/foo/foo.go
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
// Copyright 2018 Google LLC
|
||||||
|
//
|
||||||
|
// 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() {
|
||||||
|
fmt.Println(injectedMessage())
|
||||||
|
}
|
||||||
28
internal/wire/testdata/BuildTagsMainOnly/foo/wire.go
vendored
Normal file
28
internal/wire/testdata/BuildTagsMainOnly/foo/wire.go
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2018 Google LLC
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
//+build wireinject
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bar"
|
||||||
|
|
||||||
|
"github.com/google/go-cloud/wire"
|
||||||
|
)
|
||||||
|
|
||||||
|
func injectedMessage() string {
|
||||||
|
wire.Build(bar.Set)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
1
internal/wire/testdata/BuildTagsMainOnly/out.txt
vendored
Normal file
1
internal/wire/testdata/BuildTagsMainOnly/out.txt
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Hello, World!
|
||||||
1
internal/wire/testdata/BuildTagsMainOnly/pkg
vendored
Normal file
1
internal/wire/testdata/BuildTagsMainOnly/pkg
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
foo
|
||||||
@@ -45,16 +45,26 @@ func Generate(bctx *build.Context, wd string, pkg string) ([]byte, []error) {
|
|||||||
}
|
}
|
||||||
// TODO(light): Stop errors from printing to stderr.
|
// TODO(light): Stop errors from printing to stderr.
|
||||||
conf := &loader.Config{
|
conf := &loader.Config{
|
||||||
Build: new(build.Context),
|
Build: bctx,
|
||||||
Cwd: wd,
|
Cwd: wd,
|
||||||
TypeCheckFuncBodies: func(path string) bool {
|
TypeCheckFuncBodies: func(path string) bool {
|
||||||
return path == mainPkg.ImportPath
|
return path == mainPkg.ImportPath
|
||||||
},
|
},
|
||||||
|
FindPackage: func(bctx *build.Context, importPath, fromDir string, mode build.ImportMode) (*build.Package, error) {
|
||||||
|
if importPath == mainPkg.ImportPath {
|
||||||
|
// Load in the generated package with the wireinject build tag
|
||||||
|
// to pick up the injector template. The imported packages
|
||||||
|
// should be imported as normal. Since the *build.Context is
|
||||||
|
// shared between calls to FindPackage, this uses a copy.
|
||||||
|
bctx2 := new(build.Context)
|
||||||
|
*bctx2 = *bctx
|
||||||
|
n := len(bctx2.BuildTags)
|
||||||
|
bctx2.BuildTags = append(bctx2.BuildTags[:n:n], "wireinject")
|
||||||
|
bctx = bctx2
|
||||||
|
}
|
||||||
|
return bctx.Import(importPath, fromDir, mode)
|
||||||
|
},
|
||||||
}
|
}
|
||||||
*conf.Build = *bctx
|
|
||||||
n := len(conf.Build.BuildTags)
|
|
||||||
// TODO(light): Only apply wireinject build tag on main package.
|
|
||||||
conf.Build.BuildTags = append(conf.Build.BuildTags[:n:n], "wireinject")
|
|
||||||
conf.Import(pkg)
|
conf.Import(pkg)
|
||||||
|
|
||||||
prog, err := conf.Load()
|
prog, err := conf.Load()
|
||||||
|
|||||||
Reference in New Issue
Block a user