mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #110788 from 21kyu/change_reflect_ptr
Change reflect.Ptr to reflect.Pointer
This commit is contained in:
commit
10810ab42b
@ -389,7 +389,7 @@ func collectResourcePaths(t *testing.T, resourcename string, path *field.Path, n
|
|||||||
resourcename = strings.ToLower(resourcename)
|
resourcename = strings.ToLower(resourcename)
|
||||||
resourcePaths := sets.NewString()
|
resourcePaths := sets.NewString()
|
||||||
|
|
||||||
if tp.Kind() == reflect.Ptr {
|
if tp.Kind() == reflect.Pointer {
|
||||||
resourcePaths.Insert(collectResourcePaths(t, resourcename, path, name, tp.Elem()).List()...)
|
resourcePaths.Insert(collectResourcePaths(t, resourcename, path, name, tp.Elem()).List()...)
|
||||||
return resourcePaths
|
return resourcePaths
|
||||||
}
|
}
|
||||||
@ -399,7 +399,7 @@ func collectResourcePaths(t *testing.T, resourcename string, path *field.Path, n
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch tp.Kind() {
|
switch tp.Kind() {
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
resourcePaths.Insert(collectResourcePaths(t, resourcename, path, name, tp.Elem()).List()...)
|
resourcePaths.Insert(collectResourcePaths(t, resourcename, path, name, tp.Elem()).List()...)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
// ObjectMeta is generic and therefore should never have a field with a specific resource's name;
|
// ObjectMeta is generic and therefore should never have a field with a specific resource's name;
|
||||||
|
@ -80,7 +80,7 @@ func TestAllFieldsHaveTags(t *testing.T) {
|
|||||||
|
|
||||||
func fieldsHaveProtobufTags(obj reflect.Type) error {
|
func fieldsHaveProtobufTags(obj reflect.Type) error {
|
||||||
switch obj.Kind() {
|
switch obj.Kind() {
|
||||||
case reflect.Slice, reflect.Map, reflect.Ptr, reflect.Array:
|
case reflect.Slice, reflect.Map, reflect.Pointer, reflect.Array:
|
||||||
return fieldsHaveProtobufTags(obj.Elem())
|
return fieldsHaveProtobufTags(obj.Elem())
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
for i := 0; i < obj.NumField(); i++ {
|
for i := 0; i < obj.NumField(); i++ {
|
||||||
|
@ -266,7 +266,7 @@ func TestPVSecrets(t *testing.T) {
|
|||||||
func collectSecretPaths(t *testing.T, path *field.Path, name string, tp reflect.Type) sets.String {
|
func collectSecretPaths(t *testing.T, path *field.Path, name string, tp reflect.Type) sets.String {
|
||||||
secretPaths := sets.NewString()
|
secretPaths := sets.NewString()
|
||||||
|
|
||||||
if tp.Kind() == reflect.Ptr {
|
if tp.Kind() == reflect.Pointer {
|
||||||
secretPaths.Insert(collectSecretPaths(t, path, name, tp.Elem()).List()...)
|
secretPaths.Insert(collectSecretPaths(t, path, name, tp.Elem()).List()...)
|
||||||
return secretPaths
|
return secretPaths
|
||||||
}
|
}
|
||||||
@ -276,7 +276,7 @@ func collectSecretPaths(t *testing.T, path *field.Path, name string, tp reflect.
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch tp.Kind() {
|
switch tp.Kind() {
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
secretPaths.Insert(collectSecretPaths(t, path, name, tp.Elem()).List()...)
|
secretPaths.Insert(collectSecretPaths(t, path, name, tp.Elem()).List()...)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
// ObjectMeta should not have any field with the word "secret" in it;
|
// ObjectMeta should not have any field with the word "secret" in it;
|
||||||
|
@ -555,7 +555,7 @@ func collectResourcePaths(t *testing.T, resourcename string, path *field.Path, n
|
|||||||
resourcename = strings.ToLower(resourcename)
|
resourcename = strings.ToLower(resourcename)
|
||||||
resourcePaths := sets.NewString()
|
resourcePaths := sets.NewString()
|
||||||
|
|
||||||
if tp.Kind() == reflect.Ptr {
|
if tp.Kind() == reflect.Pointer {
|
||||||
resourcePaths.Insert(collectResourcePaths(t, resourcename, path, name, tp.Elem()).List()...)
|
resourcePaths.Insert(collectResourcePaths(t, resourcename, path, name, tp.Elem()).List()...)
|
||||||
return resourcePaths
|
return resourcePaths
|
||||||
}
|
}
|
||||||
@ -565,7 +565,7 @@ func collectResourcePaths(t *testing.T, resourcename string, path *field.Path, n
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch tp.Kind() {
|
switch tp.Kind() {
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
resourcePaths.Insert(collectResourcePaths(t, resourcename, path, name, tp.Elem()).List()...)
|
resourcePaths.Insert(collectResourcePaths(t, resourcename, path, name, tp.Elem()).List()...)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
// ObjectMeta is generic and therefore should never have a field with a specific resource's name;
|
// ObjectMeta is generic and therefore should never have a field with a specific resource's name;
|
||||||
|
@ -392,7 +392,7 @@ func detectDefaults(t *testing.T, obj runtime.Object, v reflect.Value) map[strin
|
|||||||
t.Logf("unhandled non-primitive map type %s: %s", visit.path, visit.value.Type().Elem())
|
t.Logf("unhandled non-primitive map type %s: %s", visit.path, visit.value.Type().Elem())
|
||||||
}
|
}
|
||||||
|
|
||||||
case visit.value.Kind() == reflect.Ptr:
|
case visit.value.Kind() == reflect.Pointer:
|
||||||
if visit.value.IsNil() {
|
if visit.value.IsNil() {
|
||||||
if visit.value.Type().Elem().Kind() == reflect.Struct {
|
if visit.value.Type().Elem().Kind() == reflect.Struct {
|
||||||
visit.value.Set(reflect.New(visit.value.Type().Elem()))
|
visit.value.Set(reflect.New(visit.value.Type().Elem()))
|
||||||
|
@ -17759,7 +17759,7 @@ func collectResourcePaths(t *testing.T, skipRecurseList sets.String, tp reflect.
|
|||||||
|
|
||||||
paths := sets.NewString()
|
paths := sets.NewString()
|
||||||
switch tp.Kind() {
|
switch tp.Kind() {
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
paths.Insert(collectResourcePaths(t, skipRecurseList, tp.Elem(), path).List()...)
|
paths.Insert(collectResourcePaths(t, skipRecurseList, tp.Elem(), path).List()...)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
for i := 0; i < tp.NumField(); i++ {
|
for i := 0; i < tp.NumField(); i++ {
|
||||||
|
@ -69,7 +69,7 @@ func allPrimitiveFieldPaths(t *testing.T, skipRecurseList sets.String, tp reflec
|
|||||||
|
|
||||||
paths := sets.NewString()
|
paths := sets.NewString()
|
||||||
switch tp.Kind() {
|
switch tp.Kind() {
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
paths.Insert(allPrimitiveFieldPaths(t, skipRecurseList, tp.Elem(), path).List()...)
|
paths.Insert(allPrimitiveFieldPaths(t, skipRecurseList, tp.Elem(), path).List()...)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
for i := 0; i < tp.NumField(); i++ {
|
for i := 0; i < tp.NumField(); i++ {
|
||||||
|
@ -99,7 +99,7 @@ func assertEqualTypes(t *testing.T, path []string, a, b reflect.Type) {
|
|||||||
path = path[:len(path)-1]
|
path = path[:len(path)-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
case reflect.Ptr, reflect.Slice:
|
case reflect.Pointer, reflect.Slice:
|
||||||
aElemType := a.Elem()
|
aElemType := a.Elem()
|
||||||
bElemType := b.Elem()
|
bElemType := b.Elem()
|
||||||
assertEqualTypes(t, path, aElemType, bElemType)
|
assertEqualTypes(t, path, aElemType, bElemType)
|
||||||
@ -170,14 +170,14 @@ func fillField(field reflect.Value, v int) {
|
|||||||
field.Set(slice)
|
field.Set(slice)
|
||||||
first := slice.Index(0)
|
first := slice.Index(0)
|
||||||
|
|
||||||
if first.Type().Kind() == reflect.Ptr {
|
if first.Type().Kind() == reflect.Pointer {
|
||||||
first.Set(reflect.New(first.Type().Elem()))
|
first.Set(reflect.New(first.Type().Elem()))
|
||||||
fillFieldsOffset(first.Interface(), v)
|
fillFieldsOffset(first.Interface(), v)
|
||||||
} else {
|
} else {
|
||||||
fillField(first, v)
|
fillField(first, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
val := reflect.New(field.Type().Elem())
|
val := reflect.New(field.Type().Elem())
|
||||||
field.Set(val)
|
field.Set(val)
|
||||||
fillFieldsOffset(field.Interface(), v)
|
fillFieldsOffset(field.Interface(), v)
|
||||||
|
@ -299,7 +299,7 @@ func findParamField(value reflect.Value, param string) (*reflect.Value, bool) {
|
|||||||
var wordRegex = regexp.MustCompile(`(?:^|\s)("[^"]*"|[^"]\S*)`)
|
var wordRegex = regexp.MustCompile(`(?:^|\s)("[^"]*"|[^"]\S*)`)
|
||||||
|
|
||||||
// Used by ParseRule
|
// Used by ParseRule
|
||||||
var boolPtrType = reflect.PtrTo(reflect.TypeOf(true))
|
var boolPtrType = reflect.PointerTo(reflect.TypeOf(true))
|
||||||
var ipTablesValuePtrType = reflect.TypeOf((*IPTablesValue)(nil))
|
var ipTablesValuePtrType = reflect.TypeOf((*IPTablesValue)(nil))
|
||||||
|
|
||||||
// ParseRule parses rule. If strict is false, it will parse the recognized
|
// ParseRule parses rule. If strict is false, it will parse the recognized
|
||||||
|
@ -118,7 +118,7 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} {
|
|||||||
default:
|
default:
|
||||||
isValue := true
|
isValue := true
|
||||||
switch field.Type.Kind() {
|
switch field.Type.Kind() {
|
||||||
case reflect.Interface, reflect.Map, reflect.Slice, reflect.Ptr:
|
case reflect.Interface, reflect.Map, reflect.Slice, reflect.Pointer:
|
||||||
isValue = false
|
isValue = false
|
||||||
}
|
}
|
||||||
if isValue || c.Intn(10) == 0 {
|
if isValue || c.Intn(10) == 0 {
|
||||||
|
@ -715,7 +715,7 @@ func assertEqualTypes(t *testing.T, path []string, a, b reflect.Type) {
|
|||||||
path = path[:len(path)-1]
|
path = path[:len(path)-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
case reflect.Ptr, reflect.Slice:
|
case reflect.Pointer, reflect.Slice:
|
||||||
aElemType := a.Elem()
|
aElemType := a.Elem()
|
||||||
bElemType := b.Elem()
|
bElemType := b.Elem()
|
||||||
assertEqualTypes(t, path, aElemType, bElemType)
|
assertEqualTypes(t, path, aElemType, bElemType)
|
||||||
|
@ -131,7 +131,7 @@ func (s *Validator) validateExpressions(ctx context.Context, fldPath *field.Path
|
|||||||
if oldObj != nil {
|
if oldObj != nil {
|
||||||
v := reflect.ValueOf(oldObj)
|
v := reflect.ValueOf(oldObj)
|
||||||
switch v.Kind() {
|
switch v.Kind() {
|
||||||
case reflect.Map, reflect.Ptr, reflect.Interface, reflect.Slice:
|
case reflect.Map, reflect.Pointer, reflect.Interface, reflect.Slice:
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
oldObj = nil // +k8s:verify-mutation:reason=clone
|
oldObj = nil // +k8s:verify-mutation:reason=clone
|
||||||
}
|
}
|
||||||
|
@ -200,17 +200,17 @@ func (sv *structValue) AddField(field *Field) {
|
|||||||
func (sv *structValue) ConvertToNative(typeDesc reflect.Type) (interface{}, error) {
|
func (sv *structValue) ConvertToNative(typeDesc reflect.Type) (interface{}, error) {
|
||||||
if typeDesc.Kind() != reflect.Map &&
|
if typeDesc.Kind() != reflect.Map &&
|
||||||
typeDesc.Kind() != reflect.Struct &&
|
typeDesc.Kind() != reflect.Struct &&
|
||||||
typeDesc.Kind() != reflect.Ptr &&
|
typeDesc.Kind() != reflect.Pointer &&
|
||||||
typeDesc.Kind() != reflect.Interface {
|
typeDesc.Kind() != reflect.Interface {
|
||||||
return nil, fmt.Errorf("type conversion error from object to '%v'", typeDesc)
|
return nil, fmt.Errorf("type conversion error from object to '%v'", typeDesc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unwrap pointers, but track their use.
|
// Unwrap pointers, but track their use.
|
||||||
isPtr := false
|
isPtr := false
|
||||||
if typeDesc.Kind() == reflect.Ptr {
|
if typeDesc.Kind() == reflect.Pointer {
|
||||||
tk := typeDesc
|
tk := typeDesc
|
||||||
typeDesc = typeDesc.Elem()
|
typeDesc = typeDesc.Elem()
|
||||||
if typeDesc.Kind() == reflect.Ptr {
|
if typeDesc.Kind() == reflect.Pointer {
|
||||||
return nil, fmt.Errorf("unsupported type conversion to '%v'", tk)
|
return nil, fmt.Errorf("unsupported type conversion to '%v'", tk)
|
||||||
}
|
}
|
||||||
isPtr = true
|
isPtr = true
|
||||||
|
@ -40,7 +40,7 @@ func valueFuzz(obj reflect.Value) {
|
|||||||
valueFuzz(obj.Index(i))
|
valueFuzz(obj.Index(i))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case reflect.Interface, reflect.Ptr:
|
case reflect.Interface, reflect.Pointer:
|
||||||
if obj.IsNil() {
|
if obj.IsNil() {
|
||||||
// TODO: set non-nil value
|
// TODO: set non-nil value
|
||||||
} else {
|
} else {
|
||||||
|
@ -76,7 +76,7 @@ func ensureNoTags(gvk schema.GroupVersionKind, tp reflect.Type, parents []reflec
|
|||||||
parents = append(parents, tp)
|
parents = append(parents, tp)
|
||||||
|
|
||||||
switch tp.Kind() {
|
switch tp.Kind() {
|
||||||
case reflect.Map, reflect.Slice, reflect.Ptr:
|
case reflect.Map, reflect.Slice, reflect.Pointer:
|
||||||
errs = append(errs, ensureNoTags(gvk, tp.Elem(), parents, typesAllowedTags)...)
|
errs = append(errs, ensureNoTags(gvk, tp.Elem(), parents, typesAllowedTags)...)
|
||||||
|
|
||||||
case reflect.String, reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.Interface:
|
case reflect.String, reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.Interface:
|
||||||
@ -106,7 +106,7 @@ func ensureNoTags(gvk schema.GroupVersionKind, tp reflect.Type, parents []reflec
|
|||||||
func ensureTags(gvk schema.GroupVersionKind, tp reflect.Type, parents []reflect.Type, allowedNonstandardJSONNames map[reflect.Type]string) []error {
|
func ensureTags(gvk schema.GroupVersionKind, tp reflect.Type, parents []reflect.Type, allowedNonstandardJSONNames map[reflect.Type]string) []error {
|
||||||
errs := []error{}
|
errs := []error{}
|
||||||
// This type handles its own encoding/decoding and doesn't need json tags
|
// This type handles its own encoding/decoding and doesn't need json tags
|
||||||
if tp.Implements(marshalerType) && (tp.Implements(unmarshalerType) || reflect.PtrTo(tp).Implements(unmarshalerType)) {
|
if tp.Implements(marshalerType) && (tp.Implements(unmarshalerType) || reflect.PointerTo(tp).Implements(unmarshalerType)) {
|
||||||
return errs
|
return errs
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ func ensureTags(gvk schema.GroupVersionKind, tp reflect.Type, parents []reflect.
|
|||||||
parents = append(parents, tp)
|
parents = append(parents, tp)
|
||||||
|
|
||||||
switch tp.Kind() {
|
switch tp.Kind() {
|
||||||
case reflect.Map, reflect.Slice, reflect.Ptr:
|
case reflect.Map, reflect.Slice, reflect.Pointer:
|
||||||
errs = append(errs, ensureTags(gvk, tp.Elem(), parents, allowedNonstandardJSONNames)...)
|
errs = append(errs, ensureTags(gvk, tp.Elem(), parents, allowedNonstandardJSONNames)...)
|
||||||
|
|
||||||
case reflect.String, reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.Interface:
|
case reflect.String, reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.Interface:
|
||||||
|
@ -91,7 +91,7 @@ func fill(dataString string, dataInt int, t reflect.Type, v reflect.Value, fillF
|
|||||||
defer delete(filledTypes, t)
|
defer delete(filledTypes, t)
|
||||||
|
|
||||||
// if nil, populate pointers with a zero-value instance of the underlying type
|
// if nil, populate pointers with a zero-value instance of the underlying type
|
||||||
if t.Kind() == reflect.Ptr && v.IsNil() {
|
if t.Kind() == reflect.Pointer && v.IsNil() {
|
||||||
if v.CanSet() {
|
if v.CanSet() {
|
||||||
v.Set(reflect.New(t.Elem()))
|
v.Set(reflect.New(t.Elem()))
|
||||||
} else if v.IsNil() {
|
} else if v.IsNil() {
|
||||||
@ -155,10 +155,10 @@ func fill(dataString string, dataInt int, t reflect.Type, v reflect.Value, fillF
|
|||||||
fieldType := field.Type
|
fieldType := field.Type
|
||||||
fieldValue := v.Field(i)
|
fieldValue := v.Field(i)
|
||||||
|
|
||||||
fill(dataString, dataInt, reflect.PtrTo(fieldType), fieldValue.Addr(), fillFuncs, filledTypes)
|
fill(dataString, dataInt, reflect.PointerTo(fieldType), fieldValue.Addr(), fillFuncs, filledTypes)
|
||||||
}
|
}
|
||||||
|
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
fill(dataString, dataInt, t.Elem(), v.Elem(), fillFuncs, filledTypes)
|
fill(dataString, dataInt, t.Elem(), v.Elem(), fillFuncs, filledTypes)
|
||||||
|
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
|
@ -97,7 +97,7 @@ func getItemsPtr(list runtime.Object) (interface{}, error) {
|
|||||||
return nil, errExpectFieldItems
|
return nil, errExpectFieldItems
|
||||||
}
|
}
|
||||||
switch items.Kind() {
|
switch items.Kind() {
|
||||||
case reflect.Interface, reflect.Ptr:
|
case reflect.Interface, reflect.Pointer:
|
||||||
target := reflect.TypeOf(items.Interface()).Elem()
|
target := reflect.TypeOf(items.Interface()).Elem()
|
||||||
if target.Kind() != reflect.Slice {
|
if target.Kind() != reflect.Slice {
|
||||||
return nil, errExpectSliceItems
|
return nil, errExpectSliceItems
|
||||||
@ -130,7 +130,7 @@ func EachListItem(obj runtime.Object, fn func(runtime.Object) error) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
takeAddr := false
|
takeAddr := false
|
||||||
if elemType := items.Type().Elem(); elemType.Kind() != reflect.Ptr && elemType.Kind() != reflect.Interface {
|
if elemType := items.Type().Elem(); elemType.Kind() != reflect.Pointer && elemType.Kind() != reflect.Interface {
|
||||||
if !items.Index(0).CanAddr() {
|
if !items.Index(0).CanAddr() {
|
||||||
return fmt.Errorf("unable to take address of items in %T for EachListItem", obj)
|
return fmt.Errorf("unable to take address of items in %T for EachListItem", obj)
|
||||||
}
|
}
|
||||||
|
@ -599,7 +599,7 @@ func (a genericAccessor) SetFinalizers(finalizers []string) {
|
|||||||
func (a genericAccessor) GetOwnerReferences() []metav1.OwnerReference {
|
func (a genericAccessor) GetOwnerReferences() []metav1.OwnerReference {
|
||||||
var ret []metav1.OwnerReference
|
var ret []metav1.OwnerReference
|
||||||
s := a.ownerReferences
|
s := a.ownerReferences
|
||||||
if s.Kind() != reflect.Ptr || s.Elem().Kind() != reflect.Slice {
|
if s.Kind() != reflect.Pointer || s.Elem().Kind() != reflect.Slice {
|
||||||
klog.Errorf("expect %v to be a pointer to slice", s)
|
klog.Errorf("expect %v to be a pointer to slice", s)
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
@ -617,7 +617,7 @@ func (a genericAccessor) GetOwnerReferences() []metav1.OwnerReference {
|
|||||||
|
|
||||||
func (a genericAccessor) SetOwnerReferences(references []metav1.OwnerReference) {
|
func (a genericAccessor) SetOwnerReferences(references []metav1.OwnerReference) {
|
||||||
s := a.ownerReferences
|
s := a.ownerReferences
|
||||||
if s.Kind() != reflect.Ptr || s.Elem().Kind() != reflect.Slice {
|
if s.Kind() != reflect.Pointer || s.Elem().Kind() != reflect.Slice {
|
||||||
klog.Errorf("expect %v to be a pointer to slice", s)
|
klog.Errorf("expect %v to be a pointer to slice", s)
|
||||||
}
|
}
|
||||||
s = s.Elem()
|
s = s.Elem()
|
||||||
|
@ -115,10 +115,10 @@ type ConversionFuncs struct {
|
|||||||
// previously defined functions.
|
// previously defined functions.
|
||||||
func (c ConversionFuncs) AddUntyped(a, b interface{}, fn ConversionFunc) error {
|
func (c ConversionFuncs) AddUntyped(a, b interface{}, fn ConversionFunc) error {
|
||||||
tA, tB := reflect.TypeOf(a), reflect.TypeOf(b)
|
tA, tB := reflect.TypeOf(a), reflect.TypeOf(b)
|
||||||
if tA.Kind() != reflect.Ptr {
|
if tA.Kind() != reflect.Pointer {
|
||||||
return fmt.Errorf("the type %T must be a pointer to register as an untyped conversion", a)
|
return fmt.Errorf("the type %T must be a pointer to register as an untyped conversion", a)
|
||||||
}
|
}
|
||||||
if tB.Kind() != reflect.Ptr {
|
if tB.Kind() != reflect.Pointer {
|
||||||
return fmt.Errorf("the type %T must be a pointer to register as an untyped conversion", b)
|
return fmt.Errorf("the type %T must be a pointer to register as an untyped conversion", b)
|
||||||
}
|
}
|
||||||
c.untyped[typePair{tA, tB}] = fn
|
c.untyped[typePair{tA, tB}] = fn
|
||||||
@ -179,10 +179,10 @@ func (c *Converter) RegisterGeneratedUntypedConversionFunc(a, b interface{}, fn
|
|||||||
func (c *Converter) RegisterIgnoredConversion(from, to interface{}) error {
|
func (c *Converter) RegisterIgnoredConversion(from, to interface{}) error {
|
||||||
typeFrom := reflect.TypeOf(from)
|
typeFrom := reflect.TypeOf(from)
|
||||||
typeTo := reflect.TypeOf(to)
|
typeTo := reflect.TypeOf(to)
|
||||||
if typeFrom.Kind() != reflect.Ptr {
|
if typeFrom.Kind() != reflect.Pointer {
|
||||||
return fmt.Errorf("expected pointer arg for 'from' param 0, got: %v", typeFrom)
|
return fmt.Errorf("expected pointer arg for 'from' param 0, got: %v", typeFrom)
|
||||||
}
|
}
|
||||||
if typeTo.Kind() != reflect.Ptr {
|
if typeTo.Kind() != reflect.Pointer {
|
||||||
return fmt.Errorf("expected pointer arg for 'to' param 1, got: %v", typeTo)
|
return fmt.Errorf("expected pointer arg for 'to' param 1, got: %v", typeTo)
|
||||||
}
|
}
|
||||||
c.ignoredUntypedConversions[typePair{typeFrom, typeTo}] = struct{}{}
|
c.ignoredUntypedConversions[typePair{typeFrom, typeTo}] = struct{}{}
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
// Returns an error if this is not possible.
|
// Returns an error if this is not possible.
|
||||||
func EnforcePtr(obj interface{}) (reflect.Value, error) {
|
func EnforcePtr(obj interface{}) (reflect.Value, error) {
|
||||||
v := reflect.ValueOf(obj)
|
v := reflect.ValueOf(obj)
|
||||||
if v.Kind() != reflect.Ptr {
|
if v.Kind() != reflect.Pointer {
|
||||||
if v.Kind() == reflect.Invalid {
|
if v.Kind() == reflect.Invalid {
|
||||||
return reflect.Value{}, fmt.Errorf("expected pointer, but got invalid kind")
|
return reflect.Value{}, fmt.Errorf("expected pointer, but got invalid kind")
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ func jsonTag(field reflect.StructField) (string, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isPointerKind(kind reflect.Kind) bool {
|
func isPointerKind(kind reflect.Kind) bool {
|
||||||
return kind == reflect.Ptr
|
return kind == reflect.Pointer
|
||||||
}
|
}
|
||||||
|
|
||||||
func isStructKind(kind reflect.Kind) bool {
|
func isStructKind(kind reflect.Kind) bool {
|
||||||
@ -139,7 +139,7 @@ func Convert(obj interface{}) (url.Values, error) {
|
|||||||
}
|
}
|
||||||
var sv reflect.Value
|
var sv reflect.Value
|
||||||
switch reflect.TypeOf(obj).Kind() {
|
switch reflect.TypeOf(obj).Kind() {
|
||||||
case reflect.Ptr, reflect.Interface:
|
case reflect.Pointer, reflect.Interface:
|
||||||
sv = reflect.ValueOf(obj).Elem()
|
sv = reflect.ValueOf(obj).Elem()
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("expecting a pointer or interface")
|
return nil, fmt.Errorf("expecting a pointer or interface")
|
||||||
|
@ -237,7 +237,7 @@ func (c *fromUnstructuredContext) pushKey(key string) {
|
|||||||
func (c *unstructuredConverter) FromUnstructuredWithValidation(u map[string]interface{}, obj interface{}, returnUnknownFields bool) error {
|
func (c *unstructuredConverter) FromUnstructuredWithValidation(u map[string]interface{}, obj interface{}, returnUnknownFields bool) error {
|
||||||
t := reflect.TypeOf(obj)
|
t := reflect.TypeOf(obj)
|
||||||
value := reflect.ValueOf(obj)
|
value := reflect.ValueOf(obj)
|
||||||
if t.Kind() != reflect.Ptr || value.IsNil() {
|
if t.Kind() != reflect.Pointer || value.IsNil() {
|
||||||
return fmt.Errorf("FromUnstructured requires a non-nil pointer to an object, got %v", t)
|
return fmt.Errorf("FromUnstructured requires a non-nil pointer to an object, got %v", t)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,7 +291,7 @@ func fromUnstructured(sv, dv reflect.Value, ctx *fromUnstructuredContext) error
|
|||||||
st, dt := sv.Type(), dv.Type()
|
st, dt := sv.Type(), dv.Type()
|
||||||
|
|
||||||
switch dt.Kind() {
|
switch dt.Kind() {
|
||||||
case reflect.Map, reflect.Slice, reflect.Ptr, reflect.Struct, reflect.Interface:
|
case reflect.Map, reflect.Slice, reflect.Pointer, reflect.Struct, reflect.Interface:
|
||||||
// Those require non-trivial conversion.
|
// Those require non-trivial conversion.
|
||||||
default:
|
default:
|
||||||
// This should handle all simple types.
|
// This should handle all simple types.
|
||||||
@ -353,7 +353,7 @@ func fromUnstructured(sv, dv reflect.Value, ctx *fromUnstructuredContext) error
|
|||||||
return mapFromUnstructured(sv, dv, ctx)
|
return mapFromUnstructured(sv, dv, ctx)
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
return sliceFromUnstructured(sv, dv, ctx)
|
return sliceFromUnstructured(sv, dv, ctx)
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
return pointerFromUnstructured(sv, dv, ctx)
|
return pointerFromUnstructured(sv, dv, ctx)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
return structFromUnstructured(sv, dv, ctx)
|
return structFromUnstructured(sv, dv, ctx)
|
||||||
@ -496,13 +496,13 @@ func sliceFromUnstructured(sv, dv reflect.Value, ctx *fromUnstructuredContext) e
|
|||||||
func pointerFromUnstructured(sv, dv reflect.Value, ctx *fromUnstructuredContext) error {
|
func pointerFromUnstructured(sv, dv reflect.Value, ctx *fromUnstructuredContext) error {
|
||||||
st, dt := sv.Type(), dv.Type()
|
st, dt := sv.Type(), dv.Type()
|
||||||
|
|
||||||
if st.Kind() == reflect.Ptr && sv.IsNil() {
|
if st.Kind() == reflect.Pointer && sv.IsNil() {
|
||||||
dv.Set(reflect.Zero(dt))
|
dv.Set(reflect.Zero(dt))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
dv.Set(reflect.New(dt.Elem()))
|
dv.Set(reflect.New(dt.Elem()))
|
||||||
switch st.Kind() {
|
switch st.Kind() {
|
||||||
case reflect.Ptr, reflect.Interface:
|
case reflect.Pointer, reflect.Interface:
|
||||||
return fromUnstructured(sv.Elem(), dv.Elem(), ctx)
|
return fromUnstructured(sv.Elem(), dv.Elem(), ctx)
|
||||||
default:
|
default:
|
||||||
return fromUnstructured(sv, dv.Elem(), ctx)
|
return fromUnstructured(sv, dv.Elem(), ctx)
|
||||||
@ -579,7 +579,7 @@ func (c *unstructuredConverter) ToUnstructured(obj interface{}) (map[string]inte
|
|||||||
} else {
|
} else {
|
||||||
t := reflect.TypeOf(obj)
|
t := reflect.TypeOf(obj)
|
||||||
value := reflect.ValueOf(obj)
|
value := reflect.ValueOf(obj)
|
||||||
if t.Kind() != reflect.Ptr || value.IsNil() {
|
if t.Kind() != reflect.Pointer || value.IsNil() {
|
||||||
return nil, fmt.Errorf("ToUnstructured requires a non-nil pointer to an object, got %v", t)
|
return nil, fmt.Errorf("ToUnstructured requires a non-nil pointer to an object, got %v", t)
|
||||||
}
|
}
|
||||||
u = map[string]interface{}{}
|
u = map[string]interface{}{}
|
||||||
@ -686,7 +686,7 @@ func toUnstructured(sv, dv reflect.Value) error {
|
|||||||
return mapToUnstructured(sv, dv)
|
return mapToUnstructured(sv, dv)
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
return sliceToUnstructured(sv, dv)
|
return sliceToUnstructured(sv, dv)
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
return pointerToUnstructured(sv, dv)
|
return pointerToUnstructured(sv, dv)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
return structToUnstructured(sv, dv)
|
return structToUnstructured(sv, dv)
|
||||||
@ -790,7 +790,7 @@ func isZero(v reflect.Value) bool {
|
|||||||
case reflect.Map, reflect.Slice:
|
case reflect.Map, reflect.Slice:
|
||||||
// TODO: It seems that 0-len maps are ignored in it.
|
// TODO: It seems that 0-len maps are ignored in it.
|
||||||
return v.IsNil() || v.Len() == 0
|
return v.IsNil() || v.Len() == 0
|
||||||
case reflect.Ptr, reflect.Interface:
|
case reflect.Pointer, reflect.Interface:
|
||||||
return v.IsNil()
|
return v.IsNil()
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
@ -141,7 +141,7 @@ func (s *Scheme) AddKnownTypes(gv schema.GroupVersion, types ...Object) {
|
|||||||
s.addObservedVersion(gv)
|
s.addObservedVersion(gv)
|
||||||
for _, obj := range types {
|
for _, obj := range types {
|
||||||
t := reflect.TypeOf(obj)
|
t := reflect.TypeOf(obj)
|
||||||
if t.Kind() != reflect.Ptr {
|
if t.Kind() != reflect.Pointer {
|
||||||
panic("All types must be pointers to structs.")
|
panic("All types must be pointers to structs.")
|
||||||
}
|
}
|
||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
@ -159,7 +159,7 @@ func (s *Scheme) AddKnownTypeWithName(gvk schema.GroupVersionKind, obj Object) {
|
|||||||
if len(gvk.Version) == 0 {
|
if len(gvk.Version) == 0 {
|
||||||
panic(fmt.Sprintf("version is required on all types: %s %v", gvk, t))
|
panic(fmt.Sprintf("version is required on all types: %s %v", gvk, t))
|
||||||
}
|
}
|
||||||
if t.Kind() != reflect.Ptr {
|
if t.Kind() != reflect.Pointer {
|
||||||
panic("All types must be pointers to structs.")
|
panic("All types must be pointers to structs.")
|
||||||
}
|
}
|
||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
@ -462,7 +462,7 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) (
|
|||||||
} else {
|
} else {
|
||||||
// determine the incoming kinds with as few allocations as possible.
|
// determine the incoming kinds with as few allocations as possible.
|
||||||
t = reflect.TypeOf(in)
|
t = reflect.TypeOf(in)
|
||||||
if t.Kind() != reflect.Ptr {
|
if t.Kind() != reflect.Pointer {
|
||||||
return nil, fmt.Errorf("only pointer types may be converted: %v", t)
|
return nil, fmt.Errorf("only pointer types may be converted: %v", t)
|
||||||
}
|
}
|
||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
|
@ -135,7 +135,7 @@ func IgnoreUnset() cmp.Option {
|
|||||||
if v2.Len() == 0 {
|
if v2.Len() == 0 {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
case reflect.Interface, reflect.Ptr:
|
case reflect.Interface, reflect.Pointer:
|
||||||
if v2.IsNil() {
|
if v2.IsNil() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ func (s PatchMetaFromStruct) LookupPatchMetadataForSlice(key string) (LookupPatc
|
|||||||
// If the underlying element is neither an array nor a slice, the pointer is pointing to a slice,
|
// If the underlying element is neither an array nor a slice, the pointer is pointing to a slice,
|
||||||
// e.g. https://github.com/kubernetes/kubernetes/blob/bc22e206c79282487ea0bf5696d5ccec7e839a76/staging/src/k8s.io/apimachinery/pkg/util/strategicpatch/patch_test.go#L2782-L2822
|
// e.g. https://github.com/kubernetes/kubernetes/blob/bc22e206c79282487ea0bf5696d5ccec7e839a76/staging/src/k8s.io/apimachinery/pkg/util/strategicpatch/patch_test.go#L2782-L2822
|
||||||
// If the underlying element is either an array or a slice, return its element type.
|
// If the underlying element is either an array or a slice, return its element type.
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
if t.Kind() == reflect.Array || t.Kind() == reflect.Slice {
|
if t.Kind() == reflect.Array || t.Kind() == reflect.Slice {
|
||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
@ -129,7 +129,7 @@ func getTagStructType(dataStruct interface{}) (reflect.Type, error) {
|
|||||||
|
|
||||||
t := reflect.TypeOf(dataStruct)
|
t := reflect.TypeOf(dataStruct)
|
||||||
// Get the underlying type for pointers
|
// Get the underlying type for pointers
|
||||||
if t.Kind() == reflect.Ptr {
|
if t.Kind() == reflect.Pointer {
|
||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ func (v *Error) ErrorBody() string {
|
|||||||
valueType := reflect.TypeOf(value)
|
valueType := reflect.TypeOf(value)
|
||||||
if value == nil || valueType == nil {
|
if value == nil || valueType == nil {
|
||||||
value = "null"
|
value = "null"
|
||||||
} else if valueType.Kind() == reflect.Ptr {
|
} else if valueType.Kind() == reflect.Pointer {
|
||||||
if reflectValue := reflect.ValueOf(value); reflectValue.IsNil() {
|
if reflectValue := reflect.ValueOf(value); reflectValue.IsNil() {
|
||||||
value = "null"
|
value = "null"
|
||||||
} else {
|
} else {
|
||||||
|
@ -28,7 +28,7 @@ const (
|
|||||||
// TODO: fix the returned errors to be introspectable.
|
// TODO: fix the returned errors to be introspectable.
|
||||||
func LookupPatchMetadataForStruct(t reflect.Type, jsonField string) (
|
func LookupPatchMetadataForStruct(t reflect.Type, jsonField string) (
|
||||||
elemType reflect.Type, patchStrategies []string, patchMergeKey string, e error) {
|
elemType reflect.Type, patchStrategies []string, patchMergeKey string, e error) {
|
||||||
if t.Kind() == reflect.Ptr {
|
if t.Kind() == reflect.Pointer {
|
||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ func typeFields(t reflect.Type) []field {
|
|||||||
index[len(f.index)] = i
|
index[len(f.index)] = i
|
||||||
|
|
||||||
ft := sf.Type
|
ft := sf.Type
|
||||||
if ft.Name() == "" && ft.Kind() == reflect.Ptr {
|
if ft.Name() == "" && ft.Kind() == reflect.Pointer {
|
||||||
// Follow pointer.
|
// Follow pointer.
|
||||||
ft = ft.Elem()
|
ft = ft.Elem()
|
||||||
}
|
}
|
||||||
|
@ -179,7 +179,7 @@ func (e Equalities) deepValueEqual(v1, v2 reflect.Value, visited map[visit]bool,
|
|||||||
return v1.IsNil() == v2.IsNil()
|
return v1.IsNil() == v2.IsNil()
|
||||||
}
|
}
|
||||||
return e.deepValueEqual(v1.Elem(), v2.Elem(), visited, depth+1)
|
return e.deepValueEqual(v1.Elem(), v2.Elem(), visited, depth+1)
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
return e.deepValueEqual(v1.Elem(), v2.Elem(), visited, depth+1)
|
return e.deepValueEqual(v1.Elem(), v2.Elem(), visited, depth+1)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
for i, n := 0, v1.NumField(); i < n; i++ {
|
for i, n := 0, v1.NumField(); i < n; i++ {
|
||||||
@ -327,7 +327,7 @@ func (e Equalities) deepValueDerive(v1, v2 reflect.Value, visited map[visit]bool
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return e.deepValueDerive(v1.Elem(), v2.Elem(), visited, depth+1)
|
return e.deepValueDerive(v1.Elem(), v2.Elem(), visited, depth+1)
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
if v1.IsNil() {
|
if v1.IsNil() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -1050,7 +1050,7 @@ func AddObjectParams(ws *restful.WebService, route *restful.RouteBuilder, obj in
|
|||||||
}
|
}
|
||||||
switch sf.Type.Kind() {
|
switch sf.Type.Kind() {
|
||||||
case reflect.Interface, reflect.Struct:
|
case reflect.Interface, reflect.Struct:
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
// TODO: This is a hack to let metav1.Time through. This needs to be fixed in a more generic way eventually. bug #36191
|
// TODO: This is a hack to let metav1.Time through. This needs to be fixed in a more generic way eventually. bug #36191
|
||||||
if (sf.Type.Elem().Kind() == reflect.Interface || sf.Type.Elem().Kind() == reflect.Struct) && strings.TrimPrefix(sf.Type.String(), "*") != "metav1.Time" {
|
if (sf.Type.Elem().Kind() == reflect.Interface || sf.Type.Elem().Kind() == reflect.Struct) && strings.TrimPrefix(sf.Type.String(), "*") != "metav1.Time" {
|
||||||
continue
|
continue
|
||||||
|
@ -85,7 +85,7 @@ func exists(item interface{}, indices ...interface{}) bool {
|
|||||||
// We indirect through pointers and empty interfaces (only) because
|
// We indirect through pointers and empty interfaces (only) because
|
||||||
// non-empty interfaces have methods we might need.
|
// non-empty interfaces have methods we might need.
|
||||||
func indirect(v reflect.Value) (rv reflect.Value, isNil bool) {
|
func indirect(v reflect.Value) (rv reflect.Value, isNil bool) {
|
||||||
for ; v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface; v = v.Elem() {
|
for ; v.Kind() == reflect.Pointer || v.Kind() == reflect.Interface; v = v.Elem() {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
return v, true
|
return v, true
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ var (
|
|||||||
// We indirect through pointers and empty interfaces (only) because
|
// We indirect through pointers and empty interfaces (only) because
|
||||||
// non-empty interfaces have methods we might need.
|
// non-empty interfaces have methods we might need.
|
||||||
func Indirect(v reflect.Value) (rv reflect.Value, isNil bool) {
|
func Indirect(v reflect.Value) (rv reflect.Value, isNil bool) {
|
||||||
for ; v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface; v = v.Elem() {
|
for ; v.Kind() == reflect.Pointer || v.Kind() == reflect.Interface; v = v.Elem() {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
return v, true
|
return v, true
|
||||||
}
|
}
|
||||||
@ -31,7 +31,7 @@ func Indirect(v reflect.Value) (rv reflect.Value, isNil bool) {
|
|||||||
// PrintableValue returns the, possibly indirected, interface value inside v that
|
// PrintableValue returns the, possibly indirected, interface value inside v that
|
||||||
// is best for a call to formatted printer.
|
// is best for a call to formatted printer.
|
||||||
func PrintableValue(v reflect.Value) (interface{}, bool) {
|
func PrintableValue(v reflect.Value) (interface{}, bool) {
|
||||||
if v.Kind() == reflect.Ptr {
|
if v.Kind() == reflect.Pointer {
|
||||||
v, _ = Indirect(v) // fmt.Fprint handles nil.
|
v, _ = Indirect(v) // fmt.Fprint handles nil.
|
||||||
}
|
}
|
||||||
if !v.IsValid() {
|
if !v.IsValid() {
|
||||||
@ -39,7 +39,7 @@ func PrintableValue(v reflect.Value) (interface{}, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !v.Type().Implements(errorType) && !v.Type().Implements(fmtStringerType) {
|
if !v.Type().Implements(errorType) && !v.Type().Implements(fmtStringerType) {
|
||||||
if v.CanAddr() && (reflect.PtrTo(v.Type()).Implements(errorType) || reflect.PtrTo(v.Type()).Implements(fmtStringerType)) {
|
if v.CanAddr() && (reflect.PointerTo(v.Type()).Implements(errorType) || reflect.PointerTo(v.Type()).Implements(fmtStringerType)) {
|
||||||
v = v.Addr()
|
v = v.Addr()
|
||||||
} else {
|
} else {
|
||||||
switch v.Kind() {
|
switch v.Kind() {
|
||||||
|
@ -228,7 +228,7 @@ func notZeroRecursive(t *testing.T, i interface{}, path string) bool {
|
|||||||
kind := typeOfI.Kind()
|
kind := typeOfI.Kind()
|
||||||
value := reflect.ValueOf(i)
|
value := reflect.ValueOf(i)
|
||||||
switch kind {
|
switch kind {
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
if !notZeroRecursive(t, value.Elem().Interface(), path) {
|
if !notZeroRecursive(t, value.Elem().Interface(), path) {
|
||||||
valid = false
|
valid = false
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ func Verify(value interface{}) []string {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
t := reflect.ValueOf(value)
|
t := reflect.ValueOf(value)
|
||||||
if t.Kind() == reflect.Ptr {
|
if t.Kind() == reflect.Pointer {
|
||||||
t = t.Elem()
|
t = t.Elem()
|
||||||
}
|
}
|
||||||
return datatypes(t)
|
return datatypes(t)
|
||||||
@ -82,7 +82,7 @@ func datatypes(v reflect.Value) []string {
|
|||||||
|
|
||||||
for i := 0; i < numField; i++ {
|
for i := 0; i < numField; i++ {
|
||||||
f := t.Field(i)
|
f := t.Field(i)
|
||||||
if f.Type.Kind() == reflect.Ptr {
|
if f.Type.Kind() == reflect.Pointer {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if reason, ok := f.Tag.Lookup("datapolicy"); ok {
|
if reason, ok := f.Tag.Lookup("datapolicy"); ok {
|
||||||
|
@ -921,7 +921,7 @@ func testClearLocationOfOrigin(config *clientcmdapi.Config) {
|
|||||||
}
|
}
|
||||||
func testSetNilMapsToEmpties(curr reflect.Value) {
|
func testSetNilMapsToEmpties(curr reflect.Value) {
|
||||||
actualCurrValue := curr
|
actualCurrValue := curr
|
||||||
if curr.Kind() == reflect.Ptr {
|
if curr.Kind() == reflect.Pointer {
|
||||||
actualCurrValue = curr.Elem()
|
actualCurrValue = curr.Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ func findNameStep(parts []string, typeOptions sets.String) string {
|
|||||||
|
|
||||||
// getPotentialTypeValues takes a type and looks up the tags used to represent its fields when serialized.
|
// getPotentialTypeValues takes a type and looks up the tags used to represent its fields when serialized.
|
||||||
func getPotentialTypeValues(typeValue reflect.Type) (map[string]reflect.Type, error) {
|
func getPotentialTypeValues(typeValue reflect.Type) (map[string]reflect.Type, error) {
|
||||||
if typeValue.Kind() == reflect.Ptr {
|
if typeValue.Kind() == reflect.Pointer {
|
||||||
typeValue = typeValue.Elem()
|
typeValue = typeValue.Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ func modifyConfig(curr reflect.Value, steps *navigationSteps, propertyValue stri
|
|||||||
currStep := steps.pop()
|
currStep := steps.pop()
|
||||||
|
|
||||||
actualCurrValue := curr
|
actualCurrValue := curr
|
||||||
if curr.Kind() == reflect.Ptr {
|
if curr.Kind() == reflect.Pointer {
|
||||||
actualCurrValue = curr.Elem()
|
actualCurrValue = curr.Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ func isLess(i, j reflect.Value) (bool, error) {
|
|||||||
return i.Float() < j.Float(), nil
|
return i.Float() < j.Float(), nil
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
return sortorder.NaturalLess(i.String(), j.String()), nil
|
return sortorder.NaturalLess(i.String(), j.String()), nil
|
||||||
case reflect.Ptr:
|
case reflect.Pointer:
|
||||||
return isLess(i.Elem(), j.Elem())
|
return isLess(i.Elem(), j.Elem())
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
// sort metav1.Time
|
// sort metav1.Time
|
||||||
|
@ -135,7 +135,7 @@ func AddOptionsToSet(flags *flag.FlagSet, options interface{}, prefix string) bo
|
|||||||
if optionsType == nil {
|
if optionsType == nil {
|
||||||
panic("options parameter without a type - nil?!")
|
panic("options parameter without a type - nil?!")
|
||||||
}
|
}
|
||||||
if optionsType.Kind() != reflect.Ptr || optionsType.Elem().Kind() != reflect.Struct {
|
if optionsType.Kind() != reflect.Pointer || optionsType.Elem().Kind() != reflect.Struct {
|
||||||
panic(fmt.Sprintf("need a pointer to a struct, got instead: %T", options))
|
panic(fmt.Sprintf("need a pointer to a struct, got instead: %T", options))
|
||||||
}
|
}
|
||||||
addStructFields(flags, optionsType.Elem(), reflect.Indirect(reflect.ValueOf(options)), prefix)
|
addStructFields(flags, optionsType.Elem(), reflect.Indirect(reflect.ValueOf(options)), prefix)
|
||||||
|
Loading…
Reference in New Issue
Block a user