reflect: switch ExtensionType.New to return Value

This change preserves consistency with CL/157077,
where New returns a value closer to the reflective type.

Change-Id: I85bfdae24e1ce1a10c3c7b939420fa1043bff743
Reviewed-on: https://go-review.googlesource.com/c/157078
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/legacy/extension.go b/internal/legacy/extension.go
index 0a87a25..00db9ba 100644
--- a/internal/legacy/extension.go
+++ b/internal/legacy/extension.go
@@ -204,8 +204,8 @@
 	xt2 := &extensionType{ExtensionType: xt}
 	if xd.Cardinality() != pref.Repeated {
 		xt2.typ = t
-		xt2.new = func() interface{} {
-			return xt.New().(pvalue.Unwrapper).ProtoUnwrap()
+		xt2.new = func() pref.Value {
+			return xt.New()
 		}
 		xt2.valueOf = func(v interface{}) pref.Value {
 			if reflect.TypeOf(v) != xt2.typ {
@@ -222,8 +222,9 @@
 		}
 	} else {
 		xt2.typ = reflect.PtrTo(reflect.SliceOf(t))
-		xt2.new = func() interface{} {
-			return reflect.New(xt2.typ.Elem()).Interface()
+		xt2.new = func() pref.Value {
+			v := reflect.New(xt2.typ.Elem()).Interface()
+			return pref.ValueOf(pvalue.ListOf(v, conv))
 		}
 		xt2.valueOf = func(v interface{}) pref.Value {
 			if reflect.TypeOf(v) != xt2.typ {
@@ -245,13 +246,13 @@
 type extensionType struct {
 	pref.ExtensionType
 	typ         reflect.Type
-	new         func() interface{}
+	new         func() pref.Value
 	valueOf     func(interface{}) pref.Value
 	interfaceOf func(pref.Value) interface{}
 }
 
 func (x *extensionType) GoType() reflect.Type                 { return x.typ }
-func (x *extensionType) New() interface{}                     { return x.new() }
+func (x *extensionType) New() pref.Value                      { return x.new() }
 func (x *extensionType) ValueOf(v interface{}) pref.Value     { return x.valueOf(v) }
 func (x *extensionType) InterfaceOf(v pref.Value) interface{} { return x.interfaceOf(v) }
 func (x *extensionType) Format(s fmt.State, r rune)           { pfmt.FormatDesc(s, r, x) }