From bd7d7cc02a370180c25b20096b450b79ba2713b8 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Wed, 10 Aug 2016 14:05:32 -0700 Subject: [PATCH] changes to generators --- .../test_apis/testgroup.k8s.io/register.go | 6 +++-- .../test_apis/testgroup.k8s.io/v1/register.go | 6 +++-- .../conversion-gen/generators/conversion.go | 24 +++++++++++-------- .../deepcopy-gen/generators/deepcopy.go | 21 +++++++++------- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/register.go b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/register.go index e3ed2a2906d..4dcf320b97e 100644 --- a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/register.go +++ b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/register.go @@ -30,14 +30,16 @@ var ( ) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &TestType{}, &TestTypeList{}, ) scheme.AddKnownTypes(SchemeGroupVersion, - &api.ListOptions{}) + &api.ListOptions{}, + ) + return nil } func (obj *TestType) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1/register.go b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1/register.go index e693fa86ab8..8cc6b0accb8 100644 --- a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1/register.go +++ b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1/register.go @@ -31,7 +31,7 @@ var ( ) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &TestType{}, &TestTypeList{}, @@ -41,8 +41,10 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.ListOptions{}, &v1.DeleteOptions{}, &unversioned.Status{}, - &v1.ExportOptions{}) + &v1.ExportOptions{}, + ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } func (obj *TestType) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/cmd/libs/go2idl/conversion-gen/generators/conversion.go b/cmd/libs/go2idl/conversion-gen/generators/conversion.go index b28c1c133e5..228811b7fb4 100644 --- a/cmd/libs/go2idl/conversion-gen/generators/conversion.go +++ b/cmd/libs/go2idl/conversion-gen/generators/conversion.go @@ -396,7 +396,7 @@ func areTypesAliased(in, out *types.Type) bool { } const ( - apiPackagePath = "k8s.io/kubernetes/pkg/api" + runtimePackagePath = "k8s.io/kubernetes/pkg/runtime" conversionPackagePath = "k8s.io/kubernetes/pkg/conversion" ) @@ -541,20 +541,24 @@ func (g *genConversion) preexists(inType, outType *types.Type) (*types.Type, boo } func (g *genConversion) Init(c *generator.Context, w io.Writer) error { - scheme := c.Universe.Package(apiPackagePath).Variable("Scheme") - sw := generator.NewSnippetWriter(w, c, "$", "$") sw.Do("func init() {\n", nil) - sw.Do("if err := $.scheme|raw$.AddGeneratedConversionFuncs(\n", generator.Args{ - "scheme": scheme, - }) + sw.Do("SchemeBuilder.Register(RegisterConversions)\n", nil) + sw.Do("}\n", nil) + + scheme := c.Universe.Type(types.Name{Package: runtimePackagePath, Name: "Scheme"}) + schemePtr := &types.Type{ + Kind: types.Pointer, + Elem: scheme, + } + sw.Do("// RegisterConversions adds conversion functions to the given scheme.\n", nil) + sw.Do("// Public to allow building arbitrary schemes.\n", nil) + sw.Do("func RegisterConversions(scheme $.|raw$) error {\n", schemePtr) + sw.Do("return scheme.AddGeneratedConversionFuncs(\n", nil) for _, conv := range g.typesForInit { sw.Do(nameTmpl+",\n", argsFromType(conv.inType, conv.outType)) } - sw.Do("); err != nil {\n", nil) - sw.Do("// if one of the conversion functions is malformed, detect it immediately.\n", nil) - sw.Do("panic(err)\n", nil) - sw.Do("}\n", nil) + sw.Do(")\n", nil) sw.Do("}\n\n", nil) return sw.Error() } diff --git a/cmd/libs/go2idl/deepcopy-gen/generators/deepcopy.go b/cmd/libs/go2idl/deepcopy-gen/generators/deepcopy.go index b8f256615f4..a8d58c61e49 100644 --- a/cmd/libs/go2idl/deepcopy-gen/generators/deepcopy.go +++ b/cmd/libs/go2idl/deepcopy-gen/generators/deepcopy.go @@ -375,21 +375,26 @@ func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error { } glog.V(5).Infof("registering types in pkg %q", g.targetPackage) - scheme := c.Universe.Variable(types.Name{Package: apiPackagePath, Name: "Scheme"}) sw := generator.NewSnippetWriter(w, c, "$", "$") sw.Do("func init() {\n", nil) - sw.Do("if err := $.scheme|raw$.AddGeneratedDeepCopyFuncs(\n", generator.Args{ - "scheme": scheme, - }) + sw.Do("SchemeBuilder.Register(RegisterDeepCopies)\n", nil) + sw.Do("}\n\n", nil) + + scheme := c.Universe.Type(types.Name{Package: runtimePackagePath, Name: "Scheme"}) + schemePtr := &types.Type{ + Kind: types.Pointer, + Elem: scheme, + } + sw.Do("// RegisterDeepCopies adds deep-copy functions to the given scheme. Public\n", nil) + sw.Do("// to allow building arbitrary schemes.\n", nil) + sw.Do("func RegisterDeepCopies(scheme $.|raw$) error {\n", schemePtr) + sw.Do("return scheme.AddGeneratedDeepCopyFuncs(\n", nil) for _, t := range g.typesForInit { args := argsFromType(t). With("typeof", c.Universe.Package("reflect").Function("TypeOf")) sw.Do("conversion.GeneratedDeepCopyFunc{Fn: $.type|dcFnName$, InType: $.typeof|raw$(&$.type|raw${})},\n", args) } - sw.Do("); err != nil {\n", nil) - sw.Do("// if one of the deep copy functions is malformed, detect it immediately.\n", nil) - sw.Do("panic(err)\n", nil) - sw.Do("}\n", nil) + sw.Do(")\n", nil) sw.Do("}\n\n", nil) return sw.Error() }