add prune and remove unused packages

This commit is contained in:
Michelle Au
2019-03-08 14:54:43 -08:00
parent f59b58d164
commit 8c0accad66
17240 changed files with 27 additions and 4750030 deletions

View File

@@ -1 +0,0 @@
deepcopy-gen

View File

@@ -1,16 +0,0 @@
TOOL=deepcopy-gen
test:
@if ! git diff --quiet HEAD; then \
echo "FAIL: git client is not clean"; \
false; \
fi
@go build -o /tmp/$(TOOL)
@PKGS=$$(go list ./output_tests/... | paste -sd' ' -); \
/tmp/$(TOOL) --logtostderr --v=4 -i $$(echo $$PKGS | sed 's/ /,/g') -O zz_generated
@if ! git diff --quiet HEAD; then \
echo "FAIL: output files changed"; \
git diff; \
false; \
fi

View File

@@ -1,749 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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 generators
import (
"reflect"
"testing"
"k8s.io/gengo/types"
)
func Test_isRootedUnder(t *testing.T) {
testCases := []struct {
path string
roots []string
expect bool
}{
{
path: "/foo/bar",
roots: nil,
expect: false,
},
{
path: "/foo/bar",
roots: []string{},
expect: false,
},
{
path: "/foo/bar",
roots: []string{
"/bad",
},
expect: false,
},
{
path: "/foo/bar",
roots: []string{
"/foo",
},
expect: true,
},
{
path: "/foo/bar",
roots: []string{
"/bad",
"/foo",
},
expect: true,
},
{
path: "/foo/bar/qux/zorb",
roots: []string{
"/foo/bar/qux",
},
expect: true,
},
{
path: "/foo/bar",
roots: []string{
"/foo/bar",
},
expect: true,
},
{
path: "/foo/barn",
roots: []string{
"/foo/bar",
},
expect: false,
},
{
path: "/foo/bar",
roots: []string{
"/foo/barn",
},
expect: false,
},
{
path: "/foo/bar",
roots: []string{
"",
},
expect: true,
},
}
for i, tc := range testCases {
r := isRootedUnder(tc.path, tc.roots)
if r != tc.expect {
t.Errorf("case[%d]: expected %t, got %t for %q in %q", i, tc.expect, r, tc.path, tc.roots)
}
}
}
func Test_deepCopyMethod(t *testing.T) {
testCases := []struct {
typ types.Type
expect bool
error bool
}{
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
// No DeepCopy method.
Methods: map[string]*types.Type{},
},
expect: false,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// No DeepCopy method.
"method": {
Name: types.Name{Package: "pkgname", Name: "func()"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{},
Results: []*types.Type{},
},
},
},
},
expect: false,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature (no result).
"DeepCopy": {
Name: types.Name{Package: "pkgname", Name: "func()"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{},
Results: []*types.Type{},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature (wrong result).
"DeepCopy": {
Name: types.Name{Package: "pkgname", Name: "func() int"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{},
Results: []*types.Type{
{
Name: types.Name{Name: "int"},
Kind: types.Builtin,
},
},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature with pointer receiver, but non-pointer result.
"DeepCopy": {
Name: types.Name{Package: "pkgname", Name: "func() pkgname.typename"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{},
Results: []*types.Type{
{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
},
},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature with non-pointer receiver, but pointer result.
"DeepCopy": {
Name: types.Name{Package: "pkgname", Name: "func() pkgname.typename"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
Parameters: []*types.Type{},
Results: []*types.Type{
{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Correct signature with non-pointer receiver.
"DeepCopy": {
Name: types.Name{Package: "pkgname", Name: "func() pkgname.typename"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
Parameters: []*types.Type{},
Results: []*types.Type{
{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
},
},
},
},
},
},
expect: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Correct signature with pointer receiver.
"DeepCopy": {
Name: types.Name{Package: "pkgname", Name: "func() pkgname.typename"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{},
Results: []*types.Type{
{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
},
},
},
},
},
expect: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature (has params).
"DeepCopy": {
Name: types.Name{Package: "pkgname", Name: "func(int) pkgname.typename"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{
{
Name: types.Name{Name: "int"},
Kind: types.Builtin,
},
},
Results: []*types.Type{
{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
},
},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature (extra results).
"DeepCopy": {
Name: types.Name{Package: "pkgname", Name: "func() (pkgname.typename, int)"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{},
Results: []*types.Type{
{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
},
{
Name: types.Name{Name: "int"},
Kind: types.Builtin,
},
},
},
},
},
},
expect: false,
error: true,
},
}
for i, tc := range testCases {
r, err := deepCopyMethod(&tc.typ)
if tc.error && err == nil {
t.Errorf("case[%d]: expected an error, got none", i)
} else if !tc.error && err != nil {
t.Errorf("case[%d]: expected no error, got: %v", i, err)
} else if !tc.error && (r != nil) != tc.expect {
t.Errorf("case[%d]: expected result %v, got: %v", i, tc.expect, r)
}
}
}
func Test_deepCopyIntoMethod(t *testing.T) {
testCases := []struct {
typ types.Type
expect bool
error bool
}{
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
// No DeepCopyInto method.
Methods: map[string]*types.Type{},
},
expect: false,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// No DeepCopyInto method.
"method": {
Name: types.Name{Package: "pkgname", Name: "func()"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{},
Results: []*types.Type{},
},
},
},
},
expect: false,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature (no parameter).
"DeepCopyInto": {
Name: types.Name{Package: "pkgname", Name: "func()"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{},
Results: []*types.Type{},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature (unexpected result).
"DeepCopyInto": {
Name: types.Name{Package: "pkgname", Name: "func(*pkgname.typename) int"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{
{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
},
Results: []*types.Type{
{
Name: types.Name{Name: "int"},
Kind: types.Builtin,
},
},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature (non-pointer parameter, pointer receiver).
"DeepCopyInto": {
Name: types.Name{Package: "pkgname", Name: "func(pkgname.typename)"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{
{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Results: []*types.Type{},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Wrong signature (non-pointer parameter, non-pointer receiver).
"DeepCopyInto": {
Name: types.Name{Package: "pkgname", Name: "func(pkgname.typename)"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
Parameters: []*types.Type{
{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Results: []*types.Type{},
},
},
},
},
expect: false,
error: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Correct signature with non-pointer receiver.
"DeepCopyInto": {
Name: types.Name{Package: "pkgname", Name: "func(*pkgname.typename)"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
Parameters: []*types.Type{
{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
},
Results: []*types.Type{},
},
},
},
},
expect: true,
},
{
typ: types.Type{
Name: types.Name{Package: "pkgname", Name: "typename"},
Kind: types.Builtin,
Methods: map[string]*types.Type{
// Correct signature with pointer receiver.
"DeepCopyInto": {
Name: types.Name{Package: "pkgname", Name: "func(*pkgname.typename)"},
Kind: types.Func,
Signature: &types.Signature{
Receiver: &types.Type{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
Parameters: []*types.Type{
{
Kind: types.Pointer,
Elem: &types.Type{Kind: types.Struct, Name: types.Name{Package: "pkgname", Name: "typename"}},
},
},
Results: []*types.Type{},
},
},
},
},
expect: true,
},
}
for i, tc := range testCases {
r, err := deepCopyIntoMethod(&tc.typ)
if tc.error && err == nil {
t.Errorf("case[%d]: expected an error, got none", i)
} else if !tc.error && err != nil {
t.Errorf("case[%d]: expected no error, got: %v", i, err)
} else if !tc.error && (r != nil) != tc.expect {
t.Errorf("case[%d]: expected result %v, got: %v", i, tc.expect, r)
}
}
}
func Test_extractTagParams(t *testing.T) {
testCases := []struct {
comments []string
expect *enabledTagValue
}{
{
comments: []string{
"Human comment",
},
expect: nil,
},
{
comments: []string{
"Human comment",
"+k8s:deepcopy-gen",
},
expect: &enabledTagValue{
value: "",
register: false,
},
},
{
comments: []string{
"Human comment",
"+k8s:deepcopy-gen=package",
},
expect: &enabledTagValue{
value: "package",
register: false,
},
},
{
comments: []string{
"Human comment",
"+k8s:deepcopy-gen=package,register",
},
expect: &enabledTagValue{
value: "package",
register: true,
},
},
{
comments: []string{
"Human comment",
"+k8s:deepcopy-gen=package,register=true",
},
expect: &enabledTagValue{
value: "package",
register: true,
},
},
{
comments: []string{
"Human comment",
"+k8s:deepcopy-gen=package,register=false",
},
expect: &enabledTagValue{
value: "package",
register: false,
},
},
}
for i, tc := range testCases {
r := extractEnabledTag(tc.comments)
if r == nil && tc.expect != nil {
t.Errorf("case[%d]: expected non-nil", i)
}
if r != nil && tc.expect == nil {
t.Errorf("case[%d]: expected nil, got %v", i, *r)
}
if r != nil && *r != *tc.expect {
t.Errorf("case[%d]: expected %v, got %v", i, *tc.expect, *r)
}
}
}
func Test_extractInterfacesTag(t *testing.T) {
testCases := []struct {
comments, secondComments []string
expect []string
}{
{
comments: []string{},
expect: nil,
},
{
comments: []string{
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object",
},
expect: []string{
"k8s.io/kubernetes/runtime.Object",
},
},
{
comments: []string{
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object",
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.List",
},
expect: []string{
"k8s.io/kubernetes/runtime.Object",
"k8s.io/kubernetes/runtime.List",
},
},
{
comments: []string{
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object",
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object",
},
expect: []string{
"k8s.io/kubernetes/runtime.Object",
"k8s.io/kubernetes/runtime.Object",
},
},
{
secondComments: []string{
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object",
},
expect: []string{
"k8s.io/kubernetes/runtime.Object",
},
},
{
comments: []string{
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object",
},
secondComments: []string{
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.List",
},
expect: []string{
"k8s.io/kubernetes/runtime.List",
"k8s.io/kubernetes/runtime.Object",
},
},
{
comments: []string{
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object",
},
secondComments: []string{
"+k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object",
},
expect: []string{
"k8s.io/kubernetes/runtime.Object",
"k8s.io/kubernetes/runtime.Object",
},
},
}
for i, tc := range testCases {
typ := &types.Type{
CommentLines: tc.comments,
SecondClosestCommentLines: tc.secondComments,
}
r := extractInterfacesTag(typ)
if r == nil && tc.expect != nil {
t.Errorf("case[%d]: expected non-nil", i)
}
if r != nil && tc.expect == nil {
t.Errorf("case[%d]: expected nil, got %v", i, r)
}
if r != nil && !reflect.DeepEqual(r, tc.expect) {
t.Errorf("case[%d]: expected %v, got %v", i, tc.expect, r)
}
}
}

View File

@@ -1,88 +0,0 @@
/*
Copyright 2015 The Kubernetes 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
http://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.
*/
// deepcopy-gen is a tool for auto-generating DeepCopy functions.
//
// Given a list of input directories, it will generate DeepCopy and DeepCopyInto
// methods that efficiently perform a full deep-copy of each type. If these
// already exist (are predefined by the developer), they are used instead of
// generating new ones.
//
// If interfaces are referenced in types, it is expected that corresponding
// DeepCopyInterfaceName methods exist, e.g. DeepCopyObject for runtime.Object.
// These can be predefined by the developer or generated through tags, see below.
// They must be added to the interfaces themselves manually, e.g.
// type Object interface {
// ...
// DeepCopyObject() Object
// }
//
// All generation is governed by comment tags in the source. Any package may
// request DeepCopy generation by including a comment in the file-comments of
// a doc.go file, of the form:
// // +k8s:deepcopy-gen=package
//
// DeepCopy functions can be generated for individual types, rather than the
// entire package by specifying a comment on the type definion of the form:
// // +k8s:deepcopy-gen=true
//
// When generating for a whole package, individual types may opt out of
// DeepCopy generation by specifying a comment on the type definition of the form:
// // +k8s:deepcopy-gen=false
//
// Additional DeepCopyInterfaceName methods can be generated by specifying a
// comment on the type definition of the form:
// // +k8s:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object,k8s.io/kubernetes/runtime.List
// This leads to the generation of DeepCopyObject and DeepCopyList with the given
// interfaces as return types. We say that the tagged type implements deepcopy for the
// interfaces.
//
// The deepcopy funcs for interfaces using "+k8s:deepcopy-gen:interfaces" use the pointer
// of the type as receiver. For those special cases where the non-pointer object should
// implement the interface, this can be done with:
// // +k8s:deepcopy-gen:nonpointer-interfaces=true
package main
import (
"k8s.io/gengo/args"
"k8s.io/gengo/examples/deepcopy-gen/generators"
"github.com/spf13/pflag"
"k8s.io/klog"
)
func main() {
arguments := args.Default()
// Override defaults.
arguments.OutputFileBaseName = "deepcopy_generated"
// Custom args.
customArgs := &generators.CustomArgs{}
pflag.CommandLine.StringSliceVar(&customArgs.BoundingDirs, "bounding-dirs", customArgs.BoundingDirs,
"Comma-separated list of import paths which bound the types for which deep-copies will be generated.")
arguments.CustomArgs = customArgs
// Run it.
if err := arguments.Execute(
generators.NameSystems(),
generators.DefaultNameSystem(),
generators.Packages,
); err != nil {
klog.Fatalf("Error: %v", err)
}
klog.V(2).Info("Completed successfully.")
}

View File

@@ -1,89 +0,0 @@
/*
Copyright 2018 The Kubernetes 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
http://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.
*/
// +k8s:deepcopy-gen=package
// This is a test package.
package aliases
// Note: the following AliasInterface and AliasAliasInterface +k8s:deepcopy-gen:interfaces tags
// are necessary because Golang flattens interface alias in the type system. I.e. an alias J of
// an interface I is actually equivalent to I. So support deepcopies of those aliases, we have
// to implement all aliases of that interface.
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/aliases.Interface
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/aliases.AliasInterface
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/aliases.AliasAliasInterface
type Foo struct {
X int
}
type Interface interface {
DeepCopyInterface() Interface
DeepCopyAliasInterface() AliasInterface
DeepCopyAliasAliasInterface() AliasAliasInterface
}
type Builtin int
type Slice []int
type Pointer *int
type PointerAlias *Builtin
type Struct Foo
type Map map[string]int
type FooAlias Foo
type FooSlice []Foo
type FooPointer *Foo
type FooMap map[string]Foo
type AliasBuiltin Builtin
type AliasSlice Slice
type AliasPointer Pointer
type AliasStruct Struct
type AliasMap Map
type AliasInterface Interface
type AliasAliasInterface AliasInterface
type AliasInterfaceMap map[string]AliasInterface
type AliasInterfaceSlice []AliasInterface
// Aliases
type Ttest struct {
Builtin Builtin
Slice Slice
Pointer Pointer
PointerAlias PointerAlias
Struct Struct
Map Map
SliceSlice []Slice
MapSlice map[string]Slice
FooAlias FooAlias
FooSlice FooSlice
FooPointer FooPointer
FooMap FooMap
AliasBuiltin AliasBuiltin
AliasSlice AliasSlice
AliasPointer AliasPointer
AliasStruct AliasStruct
AliasMap AliasMap
AliasInterface AliasInterface
AliasAliasInterface AliasAliasInterface
AliasInterfaceMap AliasInterfaceMap
AliasInterfaceSlice AliasInterfaceSlice
}

View File

@@ -1,412 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright The Kubernetes 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
http://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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package aliases
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in AliasInterfaceMap) DeepCopyInto(out *AliasInterfaceMap) {
{
in := &in
*out = make(AliasInterfaceMap, len(*in))
for key, val := range *in {
if val == nil {
(*out)[key] = nil
} else {
(*out)[key] = val.DeepCopyAliasInterface()
}
}
return
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AliasInterfaceMap.
func (in AliasInterfaceMap) DeepCopy() AliasInterfaceMap {
if in == nil {
return nil
}
out := new(AliasInterfaceMap)
in.DeepCopyInto(out)
return *out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in AliasInterfaceSlice) DeepCopyInto(out *AliasInterfaceSlice) {
{
in := &in
*out = make(AliasInterfaceSlice, len(*in))
for i := range *in {
if (*in)[i] != nil {
(*out)[i] = (*in)[i].DeepCopyAliasInterface()
}
}
return
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AliasInterfaceSlice.
func (in AliasInterfaceSlice) DeepCopy() AliasInterfaceSlice {
if in == nil {
return nil
}
out := new(AliasInterfaceSlice)
in.DeepCopyInto(out)
return *out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in AliasMap) DeepCopyInto(out *AliasMap) {
{
in := &in
*out = make(AliasMap, len(*in))
for key, val := range *in {
(*out)[key] = val
}
return
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AliasMap.
func (in AliasMap) DeepCopy() AliasMap {
if in == nil {
return nil
}
out := new(AliasMap)
in.DeepCopyInto(out)
return *out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in AliasSlice) DeepCopyInto(out *AliasSlice) {
{
in := &in
*out = make(AliasSlice, len(*in))
copy(*out, *in)
return
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AliasSlice.
func (in AliasSlice) DeepCopy() AliasSlice {
if in == nil {
return nil
}
out := new(AliasSlice)
in.DeepCopyInto(out)
return *out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *AliasStruct) DeepCopyInto(out *AliasStruct) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AliasStruct.
func (in *AliasStruct) DeepCopy() *AliasStruct {
if in == nil {
return nil
}
out := new(AliasStruct)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Foo) DeepCopyInto(out *Foo) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Foo.
func (in *Foo) DeepCopy() *Foo {
if in == nil {
return nil
}
out := new(Foo)
in.DeepCopyInto(out)
return out
}
// DeepCopyAliasAliasInterface is an autogenerated deepcopy function, copying the receiver, creating a new AliasAliasInterface.
func (in *Foo) DeepCopyAliasAliasInterface() AliasAliasInterface {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyAliasInterface is an autogenerated deepcopy function, copying the receiver, creating a new AliasInterface.
func (in *Foo) DeepCopyAliasInterface() AliasInterface {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Interface.
func (in *Foo) DeepCopyInterface() Interface {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *FooAlias) DeepCopyInto(out *FooAlias) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FooAlias.
func (in *FooAlias) DeepCopy() *FooAlias {
if in == nil {
return nil
}
out := new(FooAlias)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in FooMap) DeepCopyInto(out *FooMap) {
{
in := &in
*out = make(FooMap, len(*in))
for key, val := range *in {
(*out)[key] = val
}
return
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FooMap.
func (in FooMap) DeepCopy() FooMap {
if in == nil {
return nil
}
out := new(FooMap)
in.DeepCopyInto(out)
return *out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in FooSlice) DeepCopyInto(out *FooSlice) {
{
in := &in
*out = make(FooSlice, len(*in))
copy(*out, *in)
return
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FooSlice.
func (in FooSlice) DeepCopy() FooSlice {
if in == nil {
return nil
}
out := new(FooSlice)
in.DeepCopyInto(out)
return *out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in Map) DeepCopyInto(out *Map) {
{
in := &in
*out = make(Map, len(*in))
for key, val := range *in {
(*out)[key] = val
}
return
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Map.
func (in Map) DeepCopy() Map {
if in == nil {
return nil
}
out := new(Map)
in.DeepCopyInto(out)
return *out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in Slice) DeepCopyInto(out *Slice) {
{
in := &in
*out = make(Slice, len(*in))
copy(*out, *in)
return
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Slice.
func (in Slice) DeepCopy() Slice {
if in == nil {
return nil
}
out := new(Slice)
in.DeepCopyInto(out)
return *out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct) DeepCopyInto(out *Struct) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct.
func (in *Struct) DeepCopy() *Struct {
if in == nil {
return nil
}
out := new(Struct)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Ttest) DeepCopyInto(out *Ttest) {
*out = *in
if in.Slice != nil {
in, out := &in.Slice, &out.Slice
*out = make(Slice, len(*in))
copy(*out, *in)
}
if in.Pointer != nil {
in, out := &in.Pointer, &out.Pointer
*out = new(int)
**out = **in
}
if in.PointerAlias != nil {
in, out := &in.PointerAlias, &out.PointerAlias
*out = new(Builtin)
**out = **in
}
out.Struct = in.Struct
if in.Map != nil {
in, out := &in.Map, &out.Map
*out = make(Map, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.SliceSlice != nil {
in, out := &in.SliceSlice, &out.SliceSlice
*out = make([]Slice, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = make(Slice, len(*in))
copy(*out, *in)
}
}
}
if in.MapSlice != nil {
in, out := &in.MapSlice, &out.MapSlice
*out = make(map[string]Slice, len(*in))
for key, val := range *in {
var outVal []int
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = make(Slice, len(*in))
copy(*out, *in)
}
(*out)[key] = outVal
}
}
out.FooAlias = in.FooAlias
if in.FooSlice != nil {
in, out := &in.FooSlice, &out.FooSlice
*out = make(FooSlice, len(*in))
copy(*out, *in)
}
if in.FooPointer != nil {
in, out := &in.FooPointer, &out.FooPointer
*out = new(Foo)
**out = **in
}
if in.FooMap != nil {
in, out := &in.FooMap, &out.FooMap
*out = make(FooMap, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.AliasSlice != nil {
in, out := &in.AliasSlice, &out.AliasSlice
*out = make(AliasSlice, len(*in))
copy(*out, *in)
}
if in.AliasPointer != nil {
in, out := &in.AliasPointer, &out.AliasPointer
*out = new(int)
**out = **in
}
out.AliasStruct = in.AliasStruct
if in.AliasMap != nil {
in, out := &in.AliasMap, &out.AliasMap
*out = make(AliasMap, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.AliasInterface != nil {
out.AliasInterface = in.AliasInterface.DeepCopyAliasInterface()
}
if in.AliasAliasInterface != nil {
out.AliasAliasInterface = in.AliasAliasInterface.DeepCopyAliasAliasInterface()
}
if in.AliasInterfaceMap != nil {
in, out := &in.AliasInterfaceMap, &out.AliasInterfaceMap
*out = make(AliasInterfaceMap, len(*in))
for key, val := range *in {
if val == nil {
(*out)[key] = nil
} else {
(*out)[key] = val.DeepCopyAliasInterface()
}
}
}
if in.AliasInterfaceSlice != nil {
in, out := &in.AliasInterfaceSlice, &out.AliasInterfaceSlice
*out = make(AliasInterfaceSlice, len(*in))
for i := range *in {
if (*in)[i] != nil {
(*out)[i] = (*in)[i].DeepCopyAliasInterface()
}
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ttest.
func (in *Ttest) DeepCopy() *Ttest {
if in == nil {
return nil
}
out := new(Ttest)
in.DeepCopyInto(out)
return out
}

View File

@@ -1,35 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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.
*/
// +k8s:deepcopy-gen=package
// This is a test package.
package builtins
type Ttest struct {
Byte byte
//Int8 int8 //TODO: int8 becomes byte in SnippetWriter
Int16 int16
Int32 int32
Int64 int64
Uint8 uint8
Uint16 uint16
Uint32 uint32
Uint64 uint64
Float32 float32
Float64 float64
String string
}

View File

@@ -1,37 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright The Kubernetes 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
http://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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package builtins
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Ttest) DeepCopyInto(out *Ttest) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ttest.
func (in *Ttest) DeepCopy() *Ttest {
if in == nil {
return nil
}
out := new(Ttest)
in.DeepCopyInto(out)
return out
}

View File

@@ -1,131 +0,0 @@
/*
Copyright 2018 The Kubernetes 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
http://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 output_tests
import (
"github.com/google/gofuzz"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/aliases"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/interfaces"
)
// interfaceFuzzers contains fuzzer that set all interface to nil because our
// JSON deepcopy does not work with it.
// TODO: test also interface deepcopy
var interfaceFuzzers = []interface{}{
func(s *aliases.AliasAliasInterface, c fuzz.Continue) {
if c.RandBool() {
*s = nil
} else {
*s = &aliasAliasInterfaceInstance{X: c.Int()}
}
},
func(s *aliases.AliasInterface, c fuzz.Continue) {
if c.RandBool() {
*s = nil
} else {
*s = &aliasAliasInterfaceInstance{X: c.Int()}
}
},
func(s *aliases.Interface, c fuzz.Continue) {
if c.RandBool() {
*s = nil
} else {
*s = &aliasAliasInterfaceInstance{X: c.Int()}
}
},
func(s *aliases.AliasInterfaceMap, c fuzz.Continue) {
if c.RandBool() {
*s = nil
} else {
*s = make(aliases.AliasInterfaceMap)
for i := 0; i < c.Intn(3); i++ {
if c.RandBool() {
(*s)[c.RandString()] = nil
} else {
(*s)[c.RandString()] = &aliasAliasInterfaceInstance{X: c.Int()}
}
}
}
},
func(s *aliases.AliasInterfaceSlice, c fuzz.Continue) {
if c.RandBool() {
*s = nil
} else {
*s = make(aliases.AliasInterfaceSlice, 0, 0)
for i := 0; i < c.Intn(3); i++ {
if c.RandBool() {
*s = append(*s, nil)
} else {
*s = append(*s, &aliasAliasInterfaceInstance{X: c.Int()})
}
}
}
},
func(s *interfaces.Inner, c fuzz.Continue) {
if c.RandBool() {
*s = nil
} else {
*s = &interfacesInnerInstance{X: c.Float64()}
}
},
}
type aliasAliasInterfaceInstance struct {
X int
}
func (i *aliasAliasInterfaceInstance) DeepCopyInterface() aliases.Interface {
if i == nil {
return nil
}
return &aliasAliasInterfaceInstance{X: i.X}
}
func (i *aliasAliasInterfaceInstance) DeepCopyAliasInterface() aliases.AliasInterface {
if i == nil {
return nil
}
return &aliasAliasInterfaceInstance{X: i.X}
}
func (i *aliasAliasInterfaceInstance) DeepCopyAliasAliasInterface() aliases.AliasAliasInterface {
if i == nil {
return nil
}
return &aliasAliasInterfaceInstance{X: i.X}
}
type interfacesInnerInstance struct {
X float64
}
func (i *interfacesInnerInstance) DeepCopyInner() interfaces.Inner {
if i == nil {
return nil
}
return &interfacesInnerInstance{X: i.X}
}
func (i *interfacesInnerInstance) Function() float64 {
return i.X
}

View File

@@ -1,29 +0,0 @@
/*
Copyright 2017 The Kubernetes 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
http://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.
*/
// +k8s:deepcopy-gen=package
// This is a test package.
package interfaces
type Inner interface {
Function() float64
DeepCopyInner() Inner
}
type Ttest struct {
I []Inner
}

View File

@@ -1,46 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright The Kubernetes 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
http://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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package interfaces
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Ttest) DeepCopyInto(out *Ttest) {
*out = *in
if in.I != nil {
in, out := &in.I, &out.I
*out = make([]Inner, len(*in))
for i := range *in {
if (*in)[i] != nil {
(*out)[i] = (*in)[i].DeepCopyInner()
}
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ttest.
func (in *Ttest) DeepCopy() *Ttest {
if in == nil {
return nil
}
out := new(Ttest)
in.DeepCopyInto(out)
return out
}

View File

@@ -1,43 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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.
*/
// +k8s:deepcopy-gen=package
// This is a test package.
package maps
type Ttest struct {
Byte map[string]byte
//Int8 map[string]int8 //TODO: int8 becomes byte in SnippetWriter
Int16 map[string]int16
Int32 map[string]int32
Int64 map[string]int64
Uint8 map[string]uint8
Uint16 map[string]uint16
Uint32 map[string]uint32
Uint64 map[string]uint64
Float32 map[string]float32
Float64 map[string]float64
String map[string]string
StringPtr map[string]*string
StringPtrPtr map[string]**string
Map map[string]map[string]string
MapPtr map[string]*map[string]string
Slice map[string][]string
SlicePtr map[string]*[]string
Struct map[string]Ttest
StructPtr map[string]*Ttest
}

View File

@@ -1,242 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright The Kubernetes 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
http://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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package maps
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Ttest) DeepCopyInto(out *Ttest) {
*out = *in
if in.Byte != nil {
in, out := &in.Byte, &out.Byte
*out = make(map[string]byte, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Int16 != nil {
in, out := &in.Int16, &out.Int16
*out = make(map[string]int16, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Int32 != nil {
in, out := &in.Int32, &out.Int32
*out = make(map[string]int32, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Int64 != nil {
in, out := &in.Int64, &out.Int64
*out = make(map[string]int64, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Uint8 != nil {
in, out := &in.Uint8, &out.Uint8
*out = make(map[string]byte, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Uint16 != nil {
in, out := &in.Uint16, &out.Uint16
*out = make(map[string]uint16, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Uint32 != nil {
in, out := &in.Uint32, &out.Uint32
*out = make(map[string]uint32, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Uint64 != nil {
in, out := &in.Uint64, &out.Uint64
*out = make(map[string]uint64, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Float32 != nil {
in, out := &in.Float32, &out.Float32
*out = make(map[string]float32, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Float64 != nil {
in, out := &in.Float64, &out.Float64
*out = make(map[string]float64, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.String != nil {
in, out := &in.String, &out.String
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.StringPtr != nil {
in, out := &in.StringPtr, &out.StringPtr
*out = make(map[string]*string, len(*in))
for key, val := range *in {
var outVal *string
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = new(string)
**out = **in
}
(*out)[key] = outVal
}
}
if in.StringPtrPtr != nil {
in, out := &in.StringPtrPtr, &out.StringPtrPtr
*out = make(map[string]**string, len(*in))
for key, val := range *in {
var outVal **string
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = new(*string)
if **in != nil {
in, out := *in, *out
*out = new(string)
**out = **in
}
}
(*out)[key] = outVal
}
}
if in.Map != nil {
in, out := &in.Map, &out.Map
*out = make(map[string]map[string]string, len(*in))
for key, val := range *in {
var outVal map[string]string
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
(*out)[key] = outVal
}
}
if in.MapPtr != nil {
in, out := &in.MapPtr, &out.MapPtr
*out = make(map[string]*map[string]string, len(*in))
for key, val := range *in {
var outVal *map[string]string
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = new(map[string]string)
if **in != nil {
in, out := *in, *out
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
}
(*out)[key] = outVal
}
}
if in.Slice != nil {
in, out := &in.Slice, &out.Slice
*out = make(map[string][]string, len(*in))
for key, val := range *in {
var outVal []string
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = make([]string, len(*in))
copy(*out, *in)
}
(*out)[key] = outVal
}
}
if in.SlicePtr != nil {
in, out := &in.SlicePtr, &out.SlicePtr
*out = make(map[string]*[]string, len(*in))
for key, val := range *in {
var outVal *[]string
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = new([]string)
if **in != nil {
in, out := *in, *out
*out = make([]string, len(*in))
copy(*out, *in)
}
}
(*out)[key] = outVal
}
}
if in.Struct != nil {
in, out := &in.Struct, &out.Struct
*out = make(map[string]Ttest, len(*in))
for key, val := range *in {
(*out)[key] = *val.DeepCopy()
}
}
if in.StructPtr != nil {
in, out := &in.StructPtr, &out.StructPtr
*out = make(map[string]*Ttest, len(*in))
for key, val := range *in {
var outVal *Ttest
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = new(Ttest)
(*in).DeepCopyInto(*out)
}
(*out)[key] = outVal
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ttest.
func (in *Ttest) DeepCopy() *Ttest {
if in == nil {
return nil
}
out := new(Ttest)
in.DeepCopyInto(out)
return out
}

View File

@@ -1,25 +0,0 @@
/*
Copyright 2017 The Kubernetes 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
http://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 otherpkg
type Object interface {
DeepCopyObject() Object
}
type List interface {
DeepCopyList() List
}

View File

@@ -1,157 +0,0 @@
package output_tests
import (
"fmt"
"reflect"
"testing"
"github.com/davecgh/go-spew/spew"
"github.com/google/gofuzz"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/aliases"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/builtins"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/interfaces"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/maps"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/pointer"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/slices"
"k8s.io/gengo/examples/deepcopy-gen/output_tests/structs"
)
func TestWithValueFuzzer(t *testing.T) {
tests := []interface{}{
aliases.Ttest{},
builtins.Ttest{},
interfaces.Ttest{},
maps.Ttest{},
pointer.Ttest{},
slices.Ttest{},
structs.Ttest{},
}
fuzzer := fuzz.New()
fuzzer.NilChance(0.5)
fuzzer.NumElements(0, 2)
fuzzer.Funcs(interfaceFuzzers...)
for _, test := range tests {
t.Run(fmt.Sprintf("%T", test), func(t *testing.T) {
N := 1000
for i := 0; i < N; i++ {
original := reflect.New(reflect.TypeOf(test)).Interface()
fuzzer.Fuzz(original)
reflectCopy := ReflectDeepCopy(original)
if !reflect.DeepEqual(original, reflectCopy) {
t.Errorf("original and reflectCopy are different:\n\n original = %s\n\n jsonCopy = %s", spew.Sdump(original), spew.Sdump(reflectCopy))
}
deepCopy := reflect.ValueOf(original).MethodByName("DeepCopy").Call(nil)[0].Interface()
if !reflect.DeepEqual(original, deepCopy) {
t.Fatalf("original and deepCopy are different:\n\n original = %s\n\n deepCopy() = %s", spew.Sdump(original), spew.Sdump(deepCopy))
}
ValueFuzz(original)
if !reflect.DeepEqual(reflectCopy, deepCopy) {
t.Fatalf("reflectCopy and deepCopy are different:\n\n origin = %s\n\n jsonCopy() = %s", spew.Sdump(original), spew.Sdump(deepCopy))
}
}
})
}
}
func BenchmarkReflectDeepCopy(b *testing.B) {
fourtytwo := "fourtytwo"
fourtytwoPtr := &fourtytwo
var nilMap map[string]string
var nilSlice []string
mapPtr := &map[string]string{"0": "fourtytwo", "1": "fourtytwo"}
slicePtr := &[]string{"fourtytwo", "fourtytwo", "fourtytwo"}
structPtr := &pointer.Ttest{
Builtin: &fourtytwo,
Ptr: &fourtytwoPtr,
}
tests := []interface{}{
maps.Ttest{
Byte: map[string]byte{"0": 42, "1": 42, "3": 42},
Int16: map[string]int16{"0": 42, "1": 42, "3": 42},
Int32: map[string]int32{"0": 42, "1": 42, "3": 42},
Int64: map[string]int64{"0": 42, "1": 42, "3": 42},
Uint8: map[string]uint8{"0": 42, "1": 42, "3": 42},
Uint16: map[string]uint16{"0": 42, "1": 42, "3": 42},
Uint32: map[string]uint32{"0": 42, "1": 42, "3": 42},
Uint64: map[string]uint64{"0": 42, "1": 42, "3": 42},
Float32: map[string]float32{"0": 42.0, "1": 42.0, "3": 42.0},
Float64: map[string]float64{"0": 42, "1": 42, "3": 42},
String: map[string]string{"0": "fourtytwo", "1": "fourtytwo", "3": "fourtytwo"},
StringPtr: map[string]*string{"0": &fourtytwo, "1": &fourtytwo, "3": &fourtytwo},
StringPtrPtr: map[string]**string{"0": &fourtytwoPtr, "1": &fourtytwoPtr, "3": &fourtytwoPtr},
Map: map[string]map[string]string{"0": nil, "1": {"a": fourtytwo, "b": fourtytwo}, "3": {}},
MapPtr: map[string]*map[string]string{"0": nil, "1": {"a": fourtytwo, "b": fourtytwo}, "3": &nilMap},
Slice: map[string][]string{"0": nil, "1": {"a", "b"}, "2": {}},
SlicePtr: map[string]*[]string{"0": nil, "1": {"a", "b"}, "2": &nilSlice},
Struct: map[string]maps.Ttest{"0": {}, "1": {Byte: map[string]byte{"0": 42, "1": 42, "3": 42}}},
StructPtr: map[string]*maps.Ttest{"0": nil, "1": {}, "2": {Byte: map[string]byte{"0": 42, "1": 42, "3": 42}}},
},
slices.Ttest{
Byte: []byte{42, 42, 42},
Int16: []int16{42, 42, 42},
Int32: []int32{42, 42, 42},
Int64: []int64{42, 42, 42},
Uint8: []uint8{42, 42, 42},
Uint16: []uint16{42, 42, 42},
Uint32: []uint32{42, 42, 42},
Uint64: []uint64{42, 42, 42},
Float32: []float32{42.0, 42.0, 42.0},
Float64: []float64{42, 42, 42},
String: []string{"fourtytwo", "fourtytwo", "fourtytwo"},
StringPtr: []*string{&fourtytwo, &fourtytwo, &fourtytwo},
StringPtrPtr: []**string{&fourtytwoPtr, &fourtytwoPtr, &fourtytwoPtr},
Map: []map[string]string{nil, {"a": fourtytwo, "b": fourtytwo}, {}},
MapPtr: []*map[string]string{nil, {"a": fourtytwo, "b": fourtytwo}, &nilMap},
Slice: [][]string{nil, {"a", "b"}, {}},
SlicePtr: []*[]string{nil, {"a", "b"}, &nilSlice},
Struct: []slices.Ttest{{}, {Byte: []byte{42, 42, 42}}},
StructPtr: []*slices.Ttest{nil, {}, {Byte: []byte{42, 42, 42}}},
},
pointer.Ttest{
Builtin: &fourtytwo,
Ptr: &fourtytwoPtr,
Map: &map[string]string{"0": "fourtytwo", "1": "fourtytwo"},
Slice: &[]string{"fourtytwo", "fourtytwo", "fourtytwo"},
MapPtr: &mapPtr,
SlicePtr: &slicePtr,
Struct: &pointer.Ttest{
Builtin: &fourtytwo,
Ptr: &fourtytwoPtr,
},
StructPtr: &structPtr,
},
}
fuzzer := fuzz.New()
fuzzer.NilChance(0.5)
fuzzer.NumElements(0, 2)
fuzzer.Funcs(interfaceFuzzers...)
for _, test := range tests {
b.Run(fmt.Sprintf("%T", test), func(b *testing.B) {
for i := 0; i < b.N; i++ {
switch t := test.(type) {
case maps.Ttest:
t.DeepCopy()
case slices.Ttest:
t.DeepCopy()
case pointer.Ttest:
t.DeepCopy()
default:
b.Fatalf("missing type case in switch for %T", t)
}
}
})
}
}

View File

@@ -1,31 +0,0 @@
/*
Copyright 2017 The Kubernetes 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
http://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.
*/
// +k8s:deepcopy-gen=package
// This is a test package.
package pointer
type Ttest struct {
Builtin *string
Ptr **string
Map *map[string]string
Slice *[]string
MapPtr **map[string]string
SlicePtr **[]string
Struct *Ttest
StructPtr **Ttest
}

View File

@@ -1,113 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright The Kubernetes 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
http://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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package pointer
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Ttest) DeepCopyInto(out *Ttest) {
*out = *in
if in.Builtin != nil {
in, out := &in.Builtin, &out.Builtin
*out = new(string)
**out = **in
}
if in.Ptr != nil {
in, out := &in.Ptr, &out.Ptr
*out = new(*string)
if **in != nil {
in, out := *in, *out
*out = new(string)
**out = **in
}
}
if in.Map != nil {
in, out := &in.Map, &out.Map
*out = new(map[string]string)
if **in != nil {
in, out := *in, *out
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
}
if in.Slice != nil {
in, out := &in.Slice, &out.Slice
*out = new([]string)
if **in != nil {
in, out := *in, *out
*out = make([]string, len(*in))
copy(*out, *in)
}
}
if in.MapPtr != nil {
in, out := &in.MapPtr, &out.MapPtr
*out = new(*map[string]string)
if **in != nil {
in, out := *in, *out
*out = new(map[string]string)
if **in != nil {
in, out := *in, *out
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
}
}
if in.SlicePtr != nil {
in, out := &in.SlicePtr, &out.SlicePtr
*out = new(*[]string)
if **in != nil {
in, out := *in, *out
*out = new([]string)
if **in != nil {
in, out := *in, *out
*out = make([]string, len(*in))
copy(*out, *in)
}
}
}
if in.Struct != nil {
in, out := &in.Struct, &out.Struct
*out = new(Ttest)
(*in).DeepCopyInto(*out)
}
if in.StructPtr != nil {
in, out := &in.StructPtr, &out.StructPtr
*out = new(*Ttest)
if **in != nil {
in, out := *in, *out
*out = new(Ttest)
(*in).DeepCopyInto(*out)
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ttest.
func (in *Ttest) DeepCopy() *Ttest {
if in == nil {
return nil
}
out := new(Ttest)
in.DeepCopyInto(out)
return out
}

View File

@@ -1,81 +0,0 @@
/*
Copyright 2018 The Kubernetes 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
http://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 output_tests
import (
"fmt"
"reflect"
)
// ReflectDeepCopy deep copies the object using reflection.
func ReflectDeepCopy(in interface{}) interface{} {
return reflectDeepCopy(reflect.ValueOf(in)).Interface()
}
func reflectDeepCopy(src reflect.Value) reflect.Value {
switch src.Kind() {
case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice:
if src.IsNil() {
return src
}
}
switch src.Kind() {
case reflect.Chan, reflect.Func, reflect.UnsafePointer, reflect.Uintptr:
panic(fmt.Sprintf("cannot deep copy kind: %s", src.Kind()))
case reflect.Array:
dst := reflect.New(src.Type())
for i := 0; i < src.Len(); i++ {
dst.Elem().Index(i).Set(reflectDeepCopy(src.Index(i)))
}
return dst.Elem()
case reflect.Interface:
return reflectDeepCopy(src.Elem())
case reflect.Map:
dst := reflect.MakeMap(src.Type())
for _, k := range src.MapKeys() {
dst.SetMapIndex(k, reflectDeepCopy(src.MapIndex(k)))
}
return dst
case reflect.Ptr:
dst := reflect.New(src.Type().Elem())
dst.Elem().Set(reflectDeepCopy(src.Elem()))
return dst
case reflect.Slice:
dst := reflect.MakeSlice(src.Type(), 0, src.Len())
for i := 0; i < src.Len(); i++ {
dst = reflect.Append(dst, reflectDeepCopy(src.Index(i)))
}
return dst
case reflect.Struct:
dst := reflect.New(src.Type())
for i := 0; i < src.NumField(); i++ {
if !dst.Elem().Field(i).CanSet() {
// Can't set private fields. At this point, the
// best we can do is a shallow copy. For
// example, time.Time is a value type with
// private members that can be shallow copied.
return src
}
dst.Elem().Field(i).Set(reflectDeepCopy(src.Field(i)))
}
return dst.Elem()
default:
// Value types like numbers, booleans, and strings.
return src
}
}

View File

@@ -1,43 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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.
*/
// +k8s:deepcopy-gen=package
// This is a test package.
package slices
type Ttest struct {
Byte []byte
//Int8 []int8 //TODO: int8 becomes byte in SnippetWriter
Int16 []int16
Int32 []int32
Int64 []int64
Uint8 []uint8
Uint16 []uint16
Uint32 []uint32
Uint64 []uint64
Float32 []float32
Float64 []float64
String []string
StringPtr []*string
StringPtrPtr []**string
Map []map[string]string
MapPtr []*map[string]string
Slice [][]string
SlicePtr []*[]string
Struct []Ttest
StructPtr []*Ttest
}

View File

@@ -1,192 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright The Kubernetes 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
http://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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package slices
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Ttest) DeepCopyInto(out *Ttest) {
*out = *in
if in.Byte != nil {
in, out := &in.Byte, &out.Byte
*out = make([]byte, len(*in))
copy(*out, *in)
}
if in.Int16 != nil {
in, out := &in.Int16, &out.Int16
*out = make([]int16, len(*in))
copy(*out, *in)
}
if in.Int32 != nil {
in, out := &in.Int32, &out.Int32
*out = make([]int32, len(*in))
copy(*out, *in)
}
if in.Int64 != nil {
in, out := &in.Int64, &out.Int64
*out = make([]int64, len(*in))
copy(*out, *in)
}
if in.Uint8 != nil {
in, out := &in.Uint8, &out.Uint8
*out = make([]byte, len(*in))
copy(*out, *in)
}
if in.Uint16 != nil {
in, out := &in.Uint16, &out.Uint16
*out = make([]uint16, len(*in))
copy(*out, *in)
}
if in.Uint32 != nil {
in, out := &in.Uint32, &out.Uint32
*out = make([]uint32, len(*in))
copy(*out, *in)
}
if in.Uint64 != nil {
in, out := &in.Uint64, &out.Uint64
*out = make([]uint64, len(*in))
copy(*out, *in)
}
if in.Float32 != nil {
in, out := &in.Float32, &out.Float32
*out = make([]float32, len(*in))
copy(*out, *in)
}
if in.Float64 != nil {
in, out := &in.Float64, &out.Float64
*out = make([]float64, len(*in))
copy(*out, *in)
}
if in.String != nil {
in, out := &in.String, &out.String
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.StringPtr != nil {
in, out := &in.StringPtr, &out.StringPtr
*out = make([]*string, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = new(string)
**out = **in
}
}
}
if in.StringPtrPtr != nil {
in, out := &in.StringPtrPtr, &out.StringPtrPtr
*out = make([]**string, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = new(*string)
if **in != nil {
in, out := *in, *out
*out = new(string)
**out = **in
}
}
}
}
if in.Map != nil {
in, out := &in.Map, &out.Map
*out = make([]map[string]string, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
}
}
if in.MapPtr != nil {
in, out := &in.MapPtr, &out.MapPtr
*out = make([]*map[string]string, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = new(map[string]string)
if **in != nil {
in, out := *in, *out
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
}
}
}
if in.Slice != nil {
in, out := &in.Slice, &out.Slice
*out = make([][]string, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = make([]string, len(*in))
copy(*out, *in)
}
}
}
if in.SlicePtr != nil {
in, out := &in.SlicePtr, &out.SlicePtr
*out = make([]*[]string, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = new([]string)
if **in != nil {
in, out := *in, *out
*out = make([]string, len(*in))
copy(*out, *in)
}
}
}
}
if in.Struct != nil {
in, out := &in.Struct, &out.Struct
*out = make([]Ttest, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.StructPtr != nil {
in, out := &in.StructPtr, &out.StructPtr
*out = make([]*Ttest, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = new(Ttest)
(*in).DeepCopyInto(*out)
}
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ttest.
func (in *Ttest) DeepCopy() *Ttest {
if in == nil {
return nil
}
out := new(Ttest)
in.DeepCopyInto(out)
return out
}

View File

@@ -1,40 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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.
*/
// +k8s:deepcopy-gen=package
// This is a test package.
package structs
type Inner struct {
Byte byte
//Int8 int8 //TODO: int8 becomes byte in SnippetWriter
Int16 int16
Int32 int32
Int64 int64
Uint8 uint8
Uint16 uint16
Uint32 uint32
Uint64 uint64
Float32 float32
Float64 float64
String string
}
type Ttest struct {
Inner1 Inner
Inner2 Inner
}

View File

@@ -1,55 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright The Kubernetes 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
http://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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package structs
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Inner) DeepCopyInto(out *Inner) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Inner.
func (in *Inner) DeepCopy() *Inner {
if in == nil {
return nil
}
out := new(Inner)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Ttest) DeepCopyInto(out *Ttest) {
*out = *in
out.Inner1 = in.Inner1
out.Inner2 = in.Inner2
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ttest.
func (in *Ttest) DeepCopy() *Ttest {
if in == nil {
return nil
}
out := new(Ttest)
in.DeepCopyInto(out)
return out
}

View File

@@ -1,86 +0,0 @@
/*
Copyright 2018 The Kubernetes 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
http://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 output_tests
import (
"reflect"
)
// ValueFuzz recursively changes all basic type values in an object. Any kind of references will not
// be touched, i.e. the addresses of slices, maps, pointers will stay unchanged.
func ValueFuzz(obj interface{}) {
valueFuzz(reflect.ValueOf(obj))
}
func valueFuzz(obj reflect.Value) {
switch obj.Kind() {
case reflect.Array:
for i := 0; i < obj.Len(); i++ {
valueFuzz(obj.Index(i))
}
case reflect.Slice:
if obj.IsNil() {
// TODO: set non-nil value
} else {
for i := 0; i < obj.Len(); i++ {
valueFuzz(obj.Index(i))
}
}
case reflect.Interface, reflect.Ptr:
if obj.IsNil() {
// TODO: set non-nil value
} else {
valueFuzz(obj.Elem())
}
case reflect.Struct:
for i, n := 0, obj.NumField(); i < n; i++ {
valueFuzz(obj.Field(i))
}
case reflect.Map:
if obj.IsNil() {
// TODO: set non-nil value
} else {
for _, k := range obj.MapKeys() {
// map values are not addressable. We need a copy.
v := obj.MapIndex(k)
copy := reflect.New(v.Type())
copy.Elem().Set(v)
valueFuzz(copy.Elem())
obj.SetMapIndex(k, copy.Elem())
}
// TODO: set some new value
}
case reflect.Func: // ignore, we don't have function types in our API
default:
if !obj.CanSet() {
return
}
switch obj.Kind() {
case reflect.String:
obj.SetString(obj.String() + "x")
case reflect.Bool:
obj.SetBool(!obj.Bool())
case reflect.Float32, reflect.Float64:
obj.SetFloat(obj.Float()*2.0 + 1.0)
case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
obj.SetInt(obj.Int() + 1)
case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:
obj.SetUint(obj.Uint() + 1)
default:
}
}
}

View File

@@ -1,171 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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 wholepkg
import "k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg"
// Trivial
type Struct_Empty struct{}
// Only primitives
type Struct_Primitives struct {
BoolField bool
IntField int
StringField string
FloatField float64
}
type Struct_Primitives_Alias Struct_Primitives
type Struct_Embed_Struct_Primitives struct {
Struct_Primitives
}
type Struct_Embed_Int struct {
int
}
type Struct_Struct_Primitives struct {
StructField Struct_Primitives
}
// Manual DeepCopy method
type ManualStruct struct {
StringField string
}
func (m ManualStruct) DeepCopy() ManualStruct {
return m
}
type ManualStruct_Alias ManualStruct
type Struct_Embed_ManualStruct struct {
ManualStruct
}
// Only pointers to primitives
type Struct_PrimitivePointers struct {
BoolPtrField *bool
IntPtrField *int
StringPtrField *string
FloatPtrField *float64
}
type Struct_PrimitivePointers_Alias Struct_PrimitivePointers
type Struct_Embed_Struct_PrimitivePointers struct {
Struct_PrimitivePointers
}
type Struct_Embed_Pointer struct {
*int
}
type Struct_Struct_PrimitivePointers struct {
StructField Struct_PrimitivePointers
}
// Manual DeepCopy method
type ManualSlice []string
func (m ManualSlice) DeepCopy() ManualSlice {
r := make(ManualSlice, len(m))
copy(r, m)
return r
}
// Slices
type Struct_Slices struct {
SliceBoolField []bool
SliceByteField []byte
SliceIntField []int
SliceStringField []string
SliceFloatField []float64
SliceStructPrimitivesField []Struct_Primitives
SliceStructPrimitivesAliasField []Struct_Primitives_Alias
SliceStructPrimitivePointersField []Struct_PrimitivePointers
SliceStructPrimitivePointersAliasField []Struct_PrimitivePointers_Alias
SliceSliceIntField [][]int
SliceManualStructField []ManualStruct
ManualSliceField ManualSlice
}
type Struct_Slices_Alias Struct_Slices
type Struct_Embed_Struct_Slices struct {
Struct_Slices
}
type Struct_Struct_Slices struct {
StructField Struct_Slices
}
// Everything
type Struct_Everything struct {
BoolField bool
IntField int
StringField string
FloatField float64
StructField Struct_Primitives
EmptyStructField Struct_Empty
ManualStructField ManualStruct
ManualStructAliasField ManualStruct_Alias
BoolPtrField *bool
IntPtrField *int
StringPtrField *string
FloatPtrField *float64
PrimitivePointersField Struct_PrimitivePointers
ManualStructPtrField *ManualStruct
ManualStructAliasPtrField *ManualStruct_Alias
SliceBoolField []bool
SliceByteField []byte
SliceIntField []int
SliceStringField []string
SliceFloatField []float64
SlicesField Struct_Slices
SliceManualStructField []ManualStruct
ManualSliceField ManualSlice
}
// An Object
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg.Object
type Struct_ExplicitObject struct {
x int
}
// An Object which is used a non-pointer
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg.Object
// +k8s:deepcopy-gen:nonpointer-interfaces=true
type Struct_NonPointerExplicitObject struct {
x int
}
// +k8s:deepcopy-gen=false
type Struct_TypeMeta struct {
}
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg.Object
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg.List
type Struct_ObjectAndList struct {
}
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg.Object
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg.Object
type Struct_ObjectAndObject struct {
}
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/wholepkg.Selector
// +k8s:deepcopy-gen:interfaces=k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg.Object
type Struct_ExplicitSelectorExplicitObject struct {
Struct_TypeMeta
}
type Struct_Interfaces struct {
ObjectField otherpkg.Object
NilObjectField otherpkg.Object
SelectorField Selector
}

View File

@@ -1,20 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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 wholepkg
// Another type in another file.
type Struct_B struct{}

View File

@@ -1,145 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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 wholepkg
import (
"reflect"
"testing"
fuzz "github.com/google/gofuzz"
)
func TestDeepCopyPrimitives(t *testing.T) {
x := Struct_Primitives{}
y := Struct_Primitives{}
if !reflect.DeepEqual(&x, &y) {
t.Errorf("objects should be equal to start, but are not")
}
fuzzer := fuzz.New()
fuzzer.Fuzz(&x)
fuzzer.Fuzz(&y)
if reflect.DeepEqual(&x, &y) {
t.Errorf("objects should not be equal, but are")
}
x.DeepCopyInto(&y)
if !reflect.DeepEqual(&x, &y) {
t.Errorf("objects should be equal, but are not")
}
}
func TestDeepCopyInterfaceFields(t *testing.T) {
x := Struct_Interfaces{}
y := Struct_Interfaces{}
if !reflect.DeepEqual(&x, &y) {
t.Errorf("objects should be equal to start, but are not")
}
fuzzer := fuzz.New()
obj := Struct_ExplicitObject{}
fuzzer.Fuzz(&obj)
x.ObjectField = &obj
sel := Struct_ExplicitSelectorExplicitObject{}
fuzzer.Fuzz(&sel)
x.SelectorField = &sel
if reflect.DeepEqual(&x, &y) {
t.Errorf("objects should not be equal, but are")
}
x.DeepCopyInto(&y)
if !reflect.DeepEqual(&x, &y) {
t.Errorf("objects should be equal, but are not")
}
}
func TestNilCopy(t *testing.T) {
var x *Struct_B
y := x.DeepCopy()
if y != nil {
t.Errorf("Expected nil as deepcopy of nil, got %+v", y)
}
}
func assertMethod(t *testing.T, typ reflect.Type, name string) {
if _, found := typ.MethodByName(name); !found {
t.Errorf("Struct_ExplicitObject must have %v method", name)
}
}
func assertNotMethod(t *testing.T, typ reflect.Type, name string) {
if _, found := typ.MethodByName(name); found {
t.Errorf("%v must not have %v method", typ, name)
}
}
func TestInterfaceTypes(t *testing.T) {
explicitObject := reflect.TypeOf(&Struct_ExplicitObject{})
assertMethod(t, explicitObject, "DeepCopyObject")
typeMeta := reflect.TypeOf(&Struct_TypeMeta{})
assertNotMethod(t, typeMeta, "DeepCopy")
objectAndList := reflect.TypeOf(&Struct_ObjectAndList{})
assertMethod(t, objectAndList, "DeepCopyObject")
assertMethod(t, objectAndList, "DeepCopyList")
objectAndObject := reflect.TypeOf(&Struct_ObjectAndObject{})
assertMethod(t, objectAndObject, "DeepCopyObject")
explicitSelectorExplicitObject := reflect.TypeOf(&Struct_ExplicitSelectorExplicitObject{})
assertMethod(t, explicitSelectorExplicitObject, "DeepCopySelector")
assertMethod(t, explicitSelectorExplicitObject, "DeepCopyObject")
}
func TestInterfaceDeepCopy(t *testing.T) {
x := Struct_ExplicitObject{}
fuzzer := fuzz.New()
fuzzer.Fuzz(&x)
y_obj := x.DeepCopyObject()
y, ok := y_obj.(*Struct_ExplicitObject)
if !ok {
t.Fatalf("epxected Struct_ExplicitObject from Struct_ExplicitObject.DeepCopyObject, got: %t", y_obj)
}
if !reflect.DeepEqual(y, &x) {
t.Error("objects should be equal, but are not")
}
}
func TestInterfaceNonPointerDeepCopy(t *testing.T) {
x := Struct_NonPointerExplicitObject{}
fuzzer := fuzz.New()
fuzzer.Fuzz(&x)
y_obj := x.DeepCopyObject()
y, ok := y_obj.(Struct_NonPointerExplicitObject)
if !ok {
t.Fatalf("epxected Struct_NonPointerExplicitObject from Struct_NonPointerExplicitObject.DeepCopyObject, got: %t", y_obj)
}
if !reflect.DeepEqual(y, x) {
t.Error("objects should be equal, but are not")
}
}

View File

@@ -1,20 +0,0 @@
/*
Copyright 2016 The Kubernetes 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
http://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.
*/
// +k8s:deepcopy-gen=package
// This is a test package.
package wholepkg

View File

@@ -1,21 +0,0 @@
/*
Copyright 2017 The Kubernetes 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
http://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 wholepkg
type Selector interface {
DeepCopySelector() Selector
}

View File

@@ -1,760 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright The Kubernetes 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
http://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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package wholepkg
import (
otherpkg "k8s.io/gengo/examples/deepcopy-gen/output_tests/otherpkg"
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in ManualSlice) DeepCopyInto(out *ManualSlice) {
{
in := &in
*out = in.DeepCopy()
return
}
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ManualStruct) DeepCopyInto(out *ManualStruct) {
*out = in.DeepCopy()
return
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ManualStruct_Alias) DeepCopyInto(out *ManualStruct_Alias) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManualStruct_Alias.
func (in *ManualStruct_Alias) DeepCopy() *ManualStruct_Alias {
if in == nil {
return nil
}
out := new(ManualStruct_Alias)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_B) DeepCopyInto(out *Struct_B) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_B.
func (in *Struct_B) DeepCopy() *Struct_B {
if in == nil {
return nil
}
out := new(Struct_B)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Embed_Int) DeepCopyInto(out *Struct_Embed_Int) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Embed_Int.
func (in *Struct_Embed_Int) DeepCopy() *Struct_Embed_Int {
if in == nil {
return nil
}
out := new(Struct_Embed_Int)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Embed_ManualStruct) DeepCopyInto(out *Struct_Embed_ManualStruct) {
*out = *in
out.ManualStruct = in.ManualStruct.DeepCopy()
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Embed_ManualStruct.
func (in *Struct_Embed_ManualStruct) DeepCopy() *Struct_Embed_ManualStruct {
if in == nil {
return nil
}
out := new(Struct_Embed_ManualStruct)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Embed_Pointer) DeepCopyInto(out *Struct_Embed_Pointer) {
*out = *in
if in.int != nil {
in, out := &in.int, &out.int
*out = new(int)
**out = **in
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Embed_Pointer.
func (in *Struct_Embed_Pointer) DeepCopy() *Struct_Embed_Pointer {
if in == nil {
return nil
}
out := new(Struct_Embed_Pointer)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Embed_Struct_PrimitivePointers) DeepCopyInto(out *Struct_Embed_Struct_PrimitivePointers) {
*out = *in
in.Struct_PrimitivePointers.DeepCopyInto(&out.Struct_PrimitivePointers)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Embed_Struct_PrimitivePointers.
func (in *Struct_Embed_Struct_PrimitivePointers) DeepCopy() *Struct_Embed_Struct_PrimitivePointers {
if in == nil {
return nil
}
out := new(Struct_Embed_Struct_PrimitivePointers)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Embed_Struct_Primitives) DeepCopyInto(out *Struct_Embed_Struct_Primitives) {
*out = *in
out.Struct_Primitives = in.Struct_Primitives
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Embed_Struct_Primitives.
func (in *Struct_Embed_Struct_Primitives) DeepCopy() *Struct_Embed_Struct_Primitives {
if in == nil {
return nil
}
out := new(Struct_Embed_Struct_Primitives)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Embed_Struct_Slices) DeepCopyInto(out *Struct_Embed_Struct_Slices) {
*out = *in
in.Struct_Slices.DeepCopyInto(&out.Struct_Slices)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Embed_Struct_Slices.
func (in *Struct_Embed_Struct_Slices) DeepCopy() *Struct_Embed_Struct_Slices {
if in == nil {
return nil
}
out := new(Struct_Embed_Struct_Slices)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Empty) DeepCopyInto(out *Struct_Empty) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Empty.
func (in *Struct_Empty) DeepCopy() *Struct_Empty {
if in == nil {
return nil
}
out := new(Struct_Empty)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Everything) DeepCopyInto(out *Struct_Everything) {
*out = *in
out.StructField = in.StructField
out.EmptyStructField = in.EmptyStructField
out.ManualStructField = in.ManualStructField.DeepCopy()
out.ManualStructAliasField = in.ManualStructAliasField
if in.BoolPtrField != nil {
in, out := &in.BoolPtrField, &out.BoolPtrField
*out = new(bool)
**out = **in
}
if in.IntPtrField != nil {
in, out := &in.IntPtrField, &out.IntPtrField
*out = new(int)
**out = **in
}
if in.StringPtrField != nil {
in, out := &in.StringPtrField, &out.StringPtrField
*out = new(string)
**out = **in
}
if in.FloatPtrField != nil {
in, out := &in.FloatPtrField, &out.FloatPtrField
*out = new(float64)
**out = **in
}
in.PrimitivePointersField.DeepCopyInto(&out.PrimitivePointersField)
if in.ManualStructPtrField != nil {
in, out := &in.ManualStructPtrField, &out.ManualStructPtrField
x := (*in).DeepCopy()
*out = &x
}
if in.ManualStructAliasPtrField != nil {
in, out := &in.ManualStructAliasPtrField, &out.ManualStructAliasPtrField
*out = new(ManualStruct_Alias)
**out = **in
}
if in.SliceBoolField != nil {
in, out := &in.SliceBoolField, &out.SliceBoolField
*out = make([]bool, len(*in))
copy(*out, *in)
}
if in.SliceByteField != nil {
in, out := &in.SliceByteField, &out.SliceByteField
*out = make([]byte, len(*in))
copy(*out, *in)
}
if in.SliceIntField != nil {
in, out := &in.SliceIntField, &out.SliceIntField
*out = make([]int, len(*in))
copy(*out, *in)
}
if in.SliceStringField != nil {
in, out := &in.SliceStringField, &out.SliceStringField
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.SliceFloatField != nil {
in, out := &in.SliceFloatField, &out.SliceFloatField
*out = make([]float64, len(*in))
copy(*out, *in)
}
in.SlicesField.DeepCopyInto(&out.SlicesField)
if in.SliceManualStructField != nil {
in, out := &in.SliceManualStructField, &out.SliceManualStructField
*out = make([]ManualStruct, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
out.ManualSliceField = in.ManualSliceField.DeepCopy()
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Everything.
func (in *Struct_Everything) DeepCopy() *Struct_Everything {
if in == nil {
return nil
}
out := new(Struct_Everything)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_ExplicitObject) DeepCopyInto(out *Struct_ExplicitObject) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_ExplicitObject.
func (in *Struct_ExplicitObject) DeepCopy() *Struct_ExplicitObject {
if in == nil {
return nil
}
out := new(Struct_ExplicitObject)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new otherpkg.Object.
func (in *Struct_ExplicitObject) DeepCopyObject() otherpkg.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_ExplicitSelectorExplicitObject) DeepCopyInto(out *Struct_ExplicitSelectorExplicitObject) {
*out = *in
out.Struct_TypeMeta = in.Struct_TypeMeta
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_ExplicitSelectorExplicitObject.
func (in *Struct_ExplicitSelectorExplicitObject) DeepCopy() *Struct_ExplicitSelectorExplicitObject {
if in == nil {
return nil
}
out := new(Struct_ExplicitSelectorExplicitObject)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new otherpkg.Object.
func (in *Struct_ExplicitSelectorExplicitObject) DeepCopyObject() otherpkg.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopySelector is an autogenerated deepcopy function, copying the receiver, creating a new Selector.
func (in *Struct_ExplicitSelectorExplicitObject) DeepCopySelector() Selector {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Interfaces) DeepCopyInto(out *Struct_Interfaces) {
*out = *in
if in.ObjectField != nil {
out.ObjectField = in.ObjectField.DeepCopyObject()
}
if in.NilObjectField != nil {
out.NilObjectField = in.NilObjectField.DeepCopyObject()
}
if in.SelectorField != nil {
out.SelectorField = in.SelectorField.DeepCopySelector()
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Interfaces.
func (in *Struct_Interfaces) DeepCopy() *Struct_Interfaces {
if in == nil {
return nil
}
out := new(Struct_Interfaces)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_NonPointerExplicitObject) DeepCopyInto(out *Struct_NonPointerExplicitObject) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_NonPointerExplicitObject.
func (in *Struct_NonPointerExplicitObject) DeepCopy() *Struct_NonPointerExplicitObject {
if in == nil {
return nil
}
out := new(Struct_NonPointerExplicitObject)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new otherpkg.Object.
func (in Struct_NonPointerExplicitObject) DeepCopyObject() otherpkg.Object {
return *in.DeepCopy()
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_ObjectAndList) DeepCopyInto(out *Struct_ObjectAndList) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_ObjectAndList.
func (in *Struct_ObjectAndList) DeepCopy() *Struct_ObjectAndList {
if in == nil {
return nil
}
out := new(Struct_ObjectAndList)
in.DeepCopyInto(out)
return out
}
// DeepCopyList is an autogenerated deepcopy function, copying the receiver, creating a new otherpkg.List.
func (in *Struct_ObjectAndList) DeepCopyList() otherpkg.List {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new otherpkg.Object.
func (in *Struct_ObjectAndList) DeepCopyObject() otherpkg.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_ObjectAndObject) DeepCopyInto(out *Struct_ObjectAndObject) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_ObjectAndObject.
func (in *Struct_ObjectAndObject) DeepCopy() *Struct_ObjectAndObject {
if in == nil {
return nil
}
out := new(Struct_ObjectAndObject)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new otherpkg.Object.
func (in *Struct_ObjectAndObject) DeepCopyObject() otherpkg.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_PrimitivePointers) DeepCopyInto(out *Struct_PrimitivePointers) {
*out = *in
if in.BoolPtrField != nil {
in, out := &in.BoolPtrField, &out.BoolPtrField
*out = new(bool)
**out = **in
}
if in.IntPtrField != nil {
in, out := &in.IntPtrField, &out.IntPtrField
*out = new(int)
**out = **in
}
if in.StringPtrField != nil {
in, out := &in.StringPtrField, &out.StringPtrField
*out = new(string)
**out = **in
}
if in.FloatPtrField != nil {
in, out := &in.FloatPtrField, &out.FloatPtrField
*out = new(float64)
**out = **in
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_PrimitivePointers.
func (in *Struct_PrimitivePointers) DeepCopy() *Struct_PrimitivePointers {
if in == nil {
return nil
}
out := new(Struct_PrimitivePointers)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_PrimitivePointers_Alias) DeepCopyInto(out *Struct_PrimitivePointers_Alias) {
*out = *in
if in.BoolPtrField != nil {
in, out := &in.BoolPtrField, &out.BoolPtrField
*out = new(bool)
**out = **in
}
if in.IntPtrField != nil {
in, out := &in.IntPtrField, &out.IntPtrField
*out = new(int)
**out = **in
}
if in.StringPtrField != nil {
in, out := &in.StringPtrField, &out.StringPtrField
*out = new(string)
**out = **in
}
if in.FloatPtrField != nil {
in, out := &in.FloatPtrField, &out.FloatPtrField
*out = new(float64)
**out = **in
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_PrimitivePointers_Alias.
func (in *Struct_PrimitivePointers_Alias) DeepCopy() *Struct_PrimitivePointers_Alias {
if in == nil {
return nil
}
out := new(Struct_PrimitivePointers_Alias)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Primitives) DeepCopyInto(out *Struct_Primitives) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Primitives.
func (in *Struct_Primitives) DeepCopy() *Struct_Primitives {
if in == nil {
return nil
}
out := new(Struct_Primitives)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Primitives_Alias) DeepCopyInto(out *Struct_Primitives_Alias) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Primitives_Alias.
func (in *Struct_Primitives_Alias) DeepCopy() *Struct_Primitives_Alias {
if in == nil {
return nil
}
out := new(Struct_Primitives_Alias)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Slices) DeepCopyInto(out *Struct_Slices) {
*out = *in
if in.SliceBoolField != nil {
in, out := &in.SliceBoolField, &out.SliceBoolField
*out = make([]bool, len(*in))
copy(*out, *in)
}
if in.SliceByteField != nil {
in, out := &in.SliceByteField, &out.SliceByteField
*out = make([]byte, len(*in))
copy(*out, *in)
}
if in.SliceIntField != nil {
in, out := &in.SliceIntField, &out.SliceIntField
*out = make([]int, len(*in))
copy(*out, *in)
}
if in.SliceStringField != nil {
in, out := &in.SliceStringField, &out.SliceStringField
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.SliceFloatField != nil {
in, out := &in.SliceFloatField, &out.SliceFloatField
*out = make([]float64, len(*in))
copy(*out, *in)
}
if in.SliceStructPrimitivesField != nil {
in, out := &in.SliceStructPrimitivesField, &out.SliceStructPrimitivesField
*out = make([]Struct_Primitives, len(*in))
copy(*out, *in)
}
if in.SliceStructPrimitivesAliasField != nil {
in, out := &in.SliceStructPrimitivesAliasField, &out.SliceStructPrimitivesAliasField
*out = make([]Struct_Primitives_Alias, len(*in))
copy(*out, *in)
}
if in.SliceStructPrimitivePointersField != nil {
in, out := &in.SliceStructPrimitivePointersField, &out.SliceStructPrimitivePointersField
*out = make([]Struct_PrimitivePointers, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.SliceStructPrimitivePointersAliasField != nil {
in, out := &in.SliceStructPrimitivePointersAliasField, &out.SliceStructPrimitivePointersAliasField
*out = make([]Struct_PrimitivePointers_Alias, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.SliceSliceIntField != nil {
in, out := &in.SliceSliceIntField, &out.SliceSliceIntField
*out = make([][]int, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = make([]int, len(*in))
copy(*out, *in)
}
}
}
if in.SliceManualStructField != nil {
in, out := &in.SliceManualStructField, &out.SliceManualStructField
*out = make([]ManualStruct, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
out.ManualSliceField = in.ManualSliceField.DeepCopy()
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Slices.
func (in *Struct_Slices) DeepCopy() *Struct_Slices {
if in == nil {
return nil
}
out := new(Struct_Slices)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Slices_Alias) DeepCopyInto(out *Struct_Slices_Alias) {
*out = *in
if in.SliceBoolField != nil {
in, out := &in.SliceBoolField, &out.SliceBoolField
*out = make([]bool, len(*in))
copy(*out, *in)
}
if in.SliceByteField != nil {
in, out := &in.SliceByteField, &out.SliceByteField
*out = make([]byte, len(*in))
copy(*out, *in)
}
if in.SliceIntField != nil {
in, out := &in.SliceIntField, &out.SliceIntField
*out = make([]int, len(*in))
copy(*out, *in)
}
if in.SliceStringField != nil {
in, out := &in.SliceStringField, &out.SliceStringField
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.SliceFloatField != nil {
in, out := &in.SliceFloatField, &out.SliceFloatField
*out = make([]float64, len(*in))
copy(*out, *in)
}
if in.SliceStructPrimitivesField != nil {
in, out := &in.SliceStructPrimitivesField, &out.SliceStructPrimitivesField
*out = make([]Struct_Primitives, len(*in))
copy(*out, *in)
}
if in.SliceStructPrimitivesAliasField != nil {
in, out := &in.SliceStructPrimitivesAliasField, &out.SliceStructPrimitivesAliasField
*out = make([]Struct_Primitives_Alias, len(*in))
copy(*out, *in)
}
if in.SliceStructPrimitivePointersField != nil {
in, out := &in.SliceStructPrimitivePointersField, &out.SliceStructPrimitivePointersField
*out = make([]Struct_PrimitivePointers, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.SliceStructPrimitivePointersAliasField != nil {
in, out := &in.SliceStructPrimitivePointersAliasField, &out.SliceStructPrimitivePointersAliasField
*out = make([]Struct_PrimitivePointers_Alias, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.SliceSliceIntField != nil {
in, out := &in.SliceSliceIntField, &out.SliceSliceIntField
*out = make([][]int, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = make([]int, len(*in))
copy(*out, *in)
}
}
}
if in.SliceManualStructField != nil {
in, out := &in.SliceManualStructField, &out.SliceManualStructField
*out = make([]ManualStruct, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
out.ManualSliceField = in.ManualSliceField.DeepCopy()
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Slices_Alias.
func (in *Struct_Slices_Alias) DeepCopy() *Struct_Slices_Alias {
if in == nil {
return nil
}
out := new(Struct_Slices_Alias)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Struct_PrimitivePointers) DeepCopyInto(out *Struct_Struct_PrimitivePointers) {
*out = *in
in.StructField.DeepCopyInto(&out.StructField)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Struct_PrimitivePointers.
func (in *Struct_Struct_PrimitivePointers) DeepCopy() *Struct_Struct_PrimitivePointers {
if in == nil {
return nil
}
out := new(Struct_Struct_PrimitivePointers)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Struct_Primitives) DeepCopyInto(out *Struct_Struct_Primitives) {
*out = *in
out.StructField = in.StructField
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Struct_Primitives.
func (in *Struct_Struct_Primitives) DeepCopy() *Struct_Struct_Primitives {
if in == nil {
return nil
}
out := new(Struct_Struct_Primitives)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Struct_Struct_Slices) DeepCopyInto(out *Struct_Struct_Slices) {
*out = *in
in.StructField.DeepCopyInto(&out.StructField)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Struct_Struct_Slices.
func (in *Struct_Struct_Slices) DeepCopy() *Struct_Struct_Slices {
if in == nil {
return nil
}
out := new(Struct_Struct_Slices)
in.DeepCopyInto(out)
return out
}