Merge pull request #110788 from 21kyu/change_reflect_ptr

Change reflect.Ptr to reflect.Pointer
This commit is contained in:
Kubernetes Prow Robot 2022-06-27 10:16:59 -07:00 committed by GitHub
commit 10810ab42b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 70 additions and 70 deletions

View File

@ -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;

View File

@ -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++ {

View File

@ -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;

View File

@ -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;

View File

@ -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()))

View File

@ -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++ {

View File

@ -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++ {

View File

@ -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)

View File

@ -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

View File

@ -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 {

View File

@ -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)

View File

@ -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
} }

View File

@ -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

View File

@ -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 {

View File

@ -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:

View File

@ -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:

View File

@ -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)
} }

View File

@ -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()

View File

@ -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{}{}

View File

@ -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")
} }

View File

@ -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")

View File

@ -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

View File

@ -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()

View File

@ -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
} }

View File

@ -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()
} }

View File

@ -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 {

View File

@ -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()
} }

View File

@ -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
} }

View File

@ -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

View File

@ -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
} }

View File

@ -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() {

View File

@ -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
} }

View File

@ -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 {

View File

@ -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()
} }

View File

@ -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()
} }

View File

@ -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()
} }

View File

@ -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

View File

@ -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)