in rocketmq-knative/source/pkg/controller/sdk/finalizers_accessor.go [37:63]
func NewReflectedFinalizersAccessor(object interface{}) (FinalizersAccessor, error) {
objectValue := reflect.Indirect(reflect.ValueOf(object))
// If object is not a struct, don't even try to use it.
if objectValue.Kind() != reflect.Struct {
return nil, errors.New("object is not a struct")
}
finalizersField := objectValue.FieldByName("Finalizers")
if finalizersField.IsValid() && finalizersField.CanSet() && finalizersField.Kind() == reflect.Slice {
finalizers := sets.NewString()
for i := 0; i < finalizersField.Len(); i++ {
finalizer := finalizersField.Index(i)
if finalizer.IsValid() && finalizer.Kind() == reflect.String {
finalizers.Insert(finalizer.String())
} else {
return nil, fmt.Errorf("element in the Finalizer slice was not a string: %v", finalizer.Kind())
}
}
return &reflectedFinalizersAccessor{
finalizersField: finalizersField,
finalizersSet: finalizers,
}, nil
}
return nil, fmt.Errorf("finalizer was not a slice: %v", finalizersField.Kind())
}