func findAliases()

in internal/objectstore/objectstore.go [233:265]


func findAliases(value reflect.Value) []reflect.Value {
	var result []reflect.Value

	// Indirect so we always work on the pointer referree
	value = reflect.Indirect(value)

	t := value.Type()
	numField := t.NumField()
	for i := 0; i < numField; i++ {
		f := t.Field(i)

		// Ignore non-anonymous fields (including padding)
		if !f.Anonymous {
			continue
		}

		fv := value.FieldByIndex(f.Index)
		if fv.Kind() == reflect.Interface {
			// If an interface, de-reference to get to the struct type.
			fv = reflect.ValueOf(fv.Interface())
		}
		if fv.Kind() == reflect.Struct {
			// If a struct, get the address of the member.
			fv = fv.Addr()
		}

		result = append(result, fv)
		// Recurse down to collect nested aliases
		result = append(result, findAliases(fv)...)
	}

	return result
}