knative.dev/pkg@v0.0.0-20260602142205-ac97e43f6622/codegen/cmd/injection-gen/generators/factory/fake_factory.go (about) 1 /* 2 Copyright 2019 The Knative Authors 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package factory 18 19 import ( 20 "io" 21 22 "k8s.io/gengo/v2/generator" 23 "k8s.io/gengo/v2/namer" 24 "k8s.io/gengo/v2/types" 25 "k8s.io/klog/v2" 26 ) 27 28 // fakeFactoryGenerator produces a file of listers for a given GroupVersion and 29 // type. 30 type fakeFactoryGenerator struct { 31 generator.GoGenerator 32 outputPackage string 33 imports namer.ImportTracker 34 filtered bool 35 36 factoryInjectionPkg string 37 fakeClientInjectionPkg string 38 sharedInformerFactoryPackage string 39 } 40 41 var _ generator.Generator = (*fakeFactoryGenerator)(nil) 42 43 func (g *fakeFactoryGenerator) Filter(c *generator.Context, t *types.Type) bool { 44 // We generate a single factory, so return true once. 45 if !g.filtered { 46 g.filtered = true 47 return true 48 } 49 return false 50 } 51 52 func (g *fakeFactoryGenerator) Namers(c *generator.Context) namer.NameSystems { 53 return namer.NameSystems{ 54 "raw": namer.NewRawNamer(g.outputPackage, g.imports), 55 } 56 } 57 58 func (g *fakeFactoryGenerator) Imports(c *generator.Context) (imports []string) { 59 imports = append(imports, g.imports.ImportLines()...) 60 return imports 61 } 62 63 func (g *fakeFactoryGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { 64 sw := generator.NewSnippetWriter(w, c, "{{", "}}") 65 66 klog.V(5).Info("processing type ", t) 67 68 m := map[string]interface{}{ 69 "factoryKey": c.Universe.Type(types.Name{Package: g.factoryInjectionPkg, Name: "Key"}), 70 "factoryGet": c.Universe.Function(types.Name{Package: g.factoryInjectionPkg, Name: "Get"}), 71 "clientGet": c.Universe.Function(types.Name{Package: g.fakeClientInjectionPkg, Name: "Get"}), 72 "informersNewSharedInformerFactoryWithOptions": c.Universe.Function(types.Name{Package: g.sharedInformerFactoryPackage, Name: "NewSharedInformerFactoryWithOptions"}), 73 "informersSharedInformerOption": c.Universe.Function(types.Name{Package: g.sharedInformerFactoryPackage, Name: "SharedInformerOption"}), 74 "informersWithNamespace": c.Universe.Function(types.Name{Package: g.sharedInformerFactoryPackage, Name: "WithNamespace"}), 75 "injectionRegisterInformerFactory": c.Universe.Function(types.Name{ 76 Package: "knative.dev/pkg/injection", 77 Name: "Fake.RegisterInformerFactory", 78 }), 79 "injectionHasNamespace": c.Universe.Type(types.Name{Package: "knative.dev/pkg/injection", Name: "HasNamespaceScope"}), 80 "injectionGetNamespace": c.Universe.Type(types.Name{Package: "knative.dev/pkg/injection", Name: "GetNamespaceScope"}), 81 "controllerGetResyncPeriod": c.Universe.Type(types.Name{Package: "knative.dev/pkg/controller", Name: "GetResyncPeriod"}), 82 "contextContext": c.Universe.Type(types.Name{ 83 Package: "context", 84 Name: "Context", 85 }), 86 } 87 88 sw.Do(injectionFakeInformerFactory, m) 89 90 return sw.Error() 91 } 92 93 var injectionFakeInformerFactory = ` 94 var Get = {{.factoryGet|raw}} 95 96 func init() { 97 {{.injectionRegisterInformerFactory|raw}}(withInformerFactory) 98 } 99 100 func withInformerFactory(ctx {{.contextContext|raw}}) {{.contextContext|raw}} { 101 c := {{.clientGet|raw}}(ctx) 102 opts := make([]{{.informersSharedInformerOption|raw}}, 0, 1) 103 if {{.injectionHasNamespace|raw}}(ctx) { 104 opts = append(opts, {{.informersWithNamespace|raw}}({{.injectionGetNamespace|raw}}(ctx))) 105 } 106 return context.WithValue(ctx, {{.factoryKey|raw}}{}, 107 {{.informersNewSharedInformerFactoryWithOptions|raw}}(c, {{.controllerGetResyncPeriod|raw}}(ctx), opts...)) 108 } 109 `