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.
|
||||
conf := &loader.Config{
|
||||
Build: new(build.Context),
|
||||
Build: bctx,
|
||||
Cwd: wd,
|
||||
TypeCheckFuncBodies: func(path string) bool {
|
||||
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)
|
||||
|
||||
prog, err := conf.Load()
|
||||
|
||||
Reference in New Issue
Block a user