From 9827937b080444711ae9f56ae8d91783e9d15157 Mon Sep 17 00:00:00 2001 From: Ville Vesilehto Date: Mon, 27 Jan 2025 22:18:47 +0200 Subject: [PATCH] revert: deref changes --- internal/deref/deref.go | 19 ------------------- internal/deref/deref_test.go | 17 ----------------- 2 files changed, 36 deletions(-) diff --git a/internal/deref/deref.go b/internal/deref/deref.go index 06c0900b..acdc8981 100644 --- a/internal/deref/deref.go +++ b/internal/deref/deref.go @@ -30,28 +30,9 @@ func Type(t reflect.Type) reflect.Type { if t == nil { return nil } - - // Preserve interface types immediately to maintain type information - // This handles both empty (interface{}) and non-empty (e.g., io.Reader) interfaces - if t.Kind() == reflect.Interface { - return t - } - - // Iteratively unwrap pointer types until we reach a non-pointer - // or encounter an interface type that needs preservation for t.Kind() == reflect.Ptr { t = t.Elem() - if t == nil { - return nil - } - // Stop unwrapping if we hit an interface type to preserve its type information - // This ensures interface method sets are not lost - if t.Kind() == reflect.Interface { - return t - } } - - // Return the final unwrapped type, which could be any non-pointer, non-interface type return t } diff --git a/internal/deref/deref_test.go b/internal/deref/deref_test.go index d9e31da3..5f812bee 100644 --- a/internal/deref/deref_test.go +++ b/internal/deref/deref_test.go @@ -67,23 +67,6 @@ func TestType_nil(t *testing.T) { assert.Nil(t, deref.Type(nil)) } -func TestType_interface_wrapped_pointer(t *testing.T) { - t.Run("one level", func(t *testing.T) { - str := "hello" - var iface any = &str - dt := deref.Type(reflect.TypeOf(iface)) - assert.Equal(t, reflect.String, dt.Kind()) - }) - - t.Run("two levels", func(t *testing.T) { - str := "hello" - strPtr := &str - var iface any = &strPtr - dt := deref.Type(reflect.TypeOf(iface)) - assert.Equal(t, reflect.String, dt.Kind()) - }) -} - func TestValue(t *testing.T) { a := uint(42) b := &a