internal/impl: fix legacy logic to know about the new XXX_OneofWrappers method

The XXX_OneofWrappers method is a simplified way to obtain the wrapper structs
compared the previous XXX_OneofFuncs method which returned far more information
that was strictly necessary.

Change-Id: I2670506a2a8f7e8e724846b8c4083e7995371007
Reviewed-on: https://go-review.googlesource.com/c/151679
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/internal/impl/legacy_message.go b/internal/impl/legacy_message.go
index 440b283..c0aaef4 100644
--- a/internal/impl/legacy_message.go
+++ b/internal/impl/legacy_message.go
@@ -189,6 +189,12 @@
 			oneofWrappers = append(oneofWrappers, reflect.TypeOf(v))
 		}
 	}
+	if fn, ok := t.MethodByName("XXX_OneofWrappers"); ok {
+		vs := fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[0]
+		for _, v := range vs.Interface().([]interface{}) {
+			oneofWrappers = append(oneofWrappers, reflect.TypeOf(v))
+		}
+	}
 
 	// Obtain a list of the extension ranges.
 	if fn, ok := t.MethodByName("ExtensionRangeArray"); ok {