diff options
Diffstat (limited to 'vendor/google.golang.org/protobuf/internal/impl')
8 files changed, 166 insertions, 103 deletions
| diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go index 3fadd241e..78ee47e44 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go @@ -233,9 +233,15 @@ func sizeMessageInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {  }  func appendMessageInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { +	calculatedSize := f.mi.sizePointer(p.Elem(), opts)  	b = protowire.AppendVarint(b, f.wiretag) -	b = protowire.AppendVarint(b, uint64(f.mi.sizePointer(p.Elem(), opts))) -	return f.mi.marshalAppendPointer(b, p.Elem(), opts) +	b = protowire.AppendVarint(b, uint64(calculatedSize)) +	before := len(b) +	b, err := f.mi.marshalAppendPointer(b, p.Elem(), opts) +	if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil { +		return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize) +	} +	return b, err  }  func consumeMessageInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { @@ -262,14 +268,21 @@ func isInitMessageInfo(p pointer, f *coderFieldInfo) error {  	return f.mi.checkInitializedPointer(p.Elem())  } -func sizeMessage(m proto.Message, tagsize int, _ marshalOptions) int { -	return protowire.SizeBytes(proto.Size(m)) + tagsize +func sizeMessage(m proto.Message, tagsize int, opts marshalOptions) int { +	return protowire.SizeBytes(opts.Options().Size(m)) + tagsize  }  func appendMessage(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) { +	mopts := opts.Options() +	calculatedSize := mopts.Size(m)  	b = protowire.AppendVarint(b, wiretag) -	b = protowire.AppendVarint(b, uint64(proto.Size(m))) -	return opts.Options().MarshalAppend(b, m) +	b = protowire.AppendVarint(b, uint64(calculatedSize)) +	before := len(b) +	b, err := mopts.MarshalAppend(b, m) +	if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil { +		return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize) +	} +	return b, err  }  func consumeMessage(b []byte, m proto.Message, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { @@ -405,8 +418,8 @@ func consumeGroupType(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInf  	return f.mi.unmarshalPointer(b, p.Elem(), f.num, opts)  } -func sizeGroup(m proto.Message, tagsize int, _ marshalOptions) int { -	return 2*tagsize + proto.Size(m) +func sizeGroup(m proto.Message, tagsize int, opts marshalOptions) int { +	return 2*tagsize + opts.Options().Size(m)  }  func appendGroup(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) { @@ -482,10 +495,14 @@ func appendMessageSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshal  		b = protowire.AppendVarint(b, f.wiretag)  		siz := f.mi.sizePointer(v, opts)  		b = protowire.AppendVarint(b, uint64(siz)) +		before := len(b)  		b, err = f.mi.marshalAppendPointer(b, v, opts)  		if err != nil {  			return b, err  		} +		if measuredSize := len(b) - before; siz != measuredSize { +			return nil, errors.MismatchedSizeCalculation(siz, measuredSize) +		}  	}  	return b, nil  } @@ -520,28 +537,34 @@ func isInitMessageSliceInfo(p pointer, f *coderFieldInfo) error {  	return nil  } -func sizeMessageSlice(p pointer, goType reflect.Type, tagsize int, _ marshalOptions) int { +func sizeMessageSlice(p pointer, goType reflect.Type, tagsize int, opts marshalOptions) int { +	mopts := opts.Options()  	s := p.PointerSlice()  	n := 0  	for _, v := range s {  		m := asMessage(v.AsValueOf(goType.Elem())) -		n += protowire.SizeBytes(proto.Size(m)) + tagsize +		n += protowire.SizeBytes(mopts.Size(m)) + tagsize  	}  	return n  }  func appendMessageSlice(b []byte, p pointer, wiretag uint64, goType reflect.Type, opts marshalOptions) ([]byte, error) { +	mopts := opts.Options()  	s := p.PointerSlice()  	var err error  	for _, v := range s {  		m := asMessage(v.AsValueOf(goType.Elem()))  		b = protowire.AppendVarint(b, wiretag) -		siz := proto.Size(m) +		siz := mopts.Size(m)  		b = protowire.AppendVarint(b, uint64(siz)) -		b, err = opts.Options().MarshalAppend(b, m) +		before := len(b) +		b, err = mopts.MarshalAppend(b, m)  		if err != nil {  			return b, err  		} +		if measuredSize := len(b) - before; siz != measuredSize { +			return nil, errors.MismatchedSizeCalculation(siz, measuredSize) +		}  	}  	return b, nil  } @@ -582,11 +605,12 @@ func isInitMessageSlice(p pointer, goType reflect.Type) error {  // Slices of messages  func sizeMessageSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int { +	mopts := opts.Options()  	list := listv.List()  	n := 0  	for i, llen := 0, list.Len(); i < llen; i++ {  		m := list.Get(i).Message().Interface() -		n += protowire.SizeBytes(proto.Size(m)) + tagsize +		n += protowire.SizeBytes(mopts.Size(m)) + tagsize  	}  	return n  } @@ -597,13 +621,17 @@ func appendMessageSliceValue(b []byte, listv protoreflect.Value, wiretag uint64,  	for i, llen := 0, list.Len(); i < llen; i++ {  		m := list.Get(i).Message().Interface()  		b = protowire.AppendVarint(b, wiretag) -		siz := proto.Size(m) +		siz := mopts.Size(m)  		b = protowire.AppendVarint(b, uint64(siz)) +		before := len(b)  		var err error  		b, err = mopts.MarshalAppend(b, m)  		if err != nil {  			return b, err  		} +		if measuredSize := len(b) - before; siz != measuredSize { +			return nil, errors.MismatchedSizeCalculation(siz, measuredSize) +		}  	}  	return b, nil  } @@ -651,11 +679,12 @@ var coderMessageSliceValue = valueCoderFuncs{  }  func sizeGroupSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int { +	mopts := opts.Options()  	list := listv.List()  	n := 0  	for i, llen := 0, list.Len(); i < llen; i++ {  		m := list.Get(i).Message().Interface() -		n += 2*tagsize + proto.Size(m) +		n += 2*tagsize + mopts.Size(m)  	}  	return n  } @@ -738,12 +767,13 @@ func makeGroupSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type)  	}  } -func sizeGroupSlice(p pointer, messageType reflect.Type, tagsize int, _ marshalOptions) int { +func sizeGroupSlice(p pointer, messageType reflect.Type, tagsize int, opts marshalOptions) int { +	mopts := opts.Options()  	s := p.PointerSlice()  	n := 0  	for _, v := range s {  		m := asMessage(v.AsValueOf(messageType.Elem())) -		n += 2*tagsize + proto.Size(m) +		n += 2*tagsize + mopts.Size(m)  	}  	return n  } diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map.go index 111b9d16f..fb35f0bae 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_map.go @@ -9,6 +9,7 @@ import (  	"sort"  	"google.golang.org/protobuf/encoding/protowire" +	"google.golang.org/protobuf/internal/errors"  	"google.golang.org/protobuf/internal/genid"  	"google.golang.org/protobuf/reflect/protoreflect"  ) @@ -240,11 +241,16 @@ func appendMapItem(b []byte, keyrv, valrv reflect.Value, mapi *mapInfo, f *coder  		size += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts)  		size += mapi.valFuncs.size(val, mapValTagSize, opts)  		b = protowire.AppendVarint(b, uint64(size)) +		before := len(b)  		b, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts)  		if err != nil {  			return nil, err  		} -		return mapi.valFuncs.marshal(b, val, mapi.valWiretag, opts) +		b, err = mapi.valFuncs.marshal(b, val, mapi.valWiretag, opts) +		if measuredSize := len(b) - before; size != measuredSize && err == nil { +			return nil, errors.MismatchedSizeCalculation(size, measuredSize) +		} +		return b, err  	} else {  		key := mapi.conv.keyConv.PBValueOf(keyrv).MapKey()  		val := pointerOfValue(valrv) @@ -259,7 +265,12 @@ func appendMapItem(b []byte, keyrv, valrv reflect.Value, mapi *mapInfo, f *coder  		}  		b = protowire.AppendVarint(b, mapi.valWiretag)  		b = protowire.AppendVarint(b, uint64(valSize)) -		return f.mi.marshalAppendPointer(b, val, opts) +		before := len(b) +		b, err = f.mi.marshalAppendPointer(b, val, opts) +		if measuredSize := len(b) - before; valSize != measuredSize && err == nil { +			return nil, errors.MismatchedSizeCalculation(valSize, measuredSize) +		} +		return b, err  	}  } diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go index c2a803bb2..c1c33d005 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go @@ -167,6 +167,7 @@ func aberrantLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor {  	ed := &filedesc.Enum{L2: new(filedesc.EnumL2)}  	ed.L0.FullName = AberrantDeriveFullName(t) // e.g., github_com.user.repo.MyEnum  	ed.L0.ParentFile = filedesc.SurrogateProto3 +	ed.L1.EditionFeatures = ed.L0.ParentFile.L1.EditionFeatures  	ed.L2.Values.List = append(ed.L2.Values.List, filedesc.EnumValue{})  	// TODO: Use the presence of a UnmarshalJSON method to determine proto2? diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go index 87b30d050..6e8677ee6 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go @@ -118,7 +118,7 @@ func (xi *ExtensionInfo) initFromLegacy() {  	xd.L1.Number = protoreflect.FieldNumber(xi.Field)  	xd.L1.Cardinality = fd.L1.Cardinality  	xd.L1.Kind = fd.L1.Kind -	xd.L2.IsPacked = fd.L1.IsPacked +	xd.L1.EditionFeatures = fd.L1.EditionFeatures  	xd.L2.Default = fd.L1.Default  	xd.L1.Extendee = Export{}.MessageDescriptorOf(xi.ExtendedType)  	xd.L2.Enum = ed diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go index 9ab091086..b649f1124 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go @@ -7,7 +7,7 @@ package impl  import (  	"bytes"  	"compress/gzip" -	"io/ioutil" +	"io"  	"sync"  	"google.golang.org/protobuf/internal/filedesc" @@ -51,7 +51,7 @@ func legacyLoadFileDesc(b []byte) protoreflect.FileDescriptor {  	if err != nil {  		panic(err)  	} -	b2, err := ioutil.ReadAll(zr) +	b2, err := io.ReadAll(zr)  	if err != nil {  		panic(err)  	} diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go index 2ab2c6297..950e9a1fe 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go @@ -204,6 +204,7 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName  		}  	} +	md.L1.EditionFeatures = md.L0.ParentFile.L1.EditionFeatures  	// Obtain a list of oneof wrapper types.  	var oneofWrappers []reflect.Type  	methods := make([]reflect.Method, 0, 2) @@ -250,6 +251,7 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName  			od := &md.L2.Oneofs.List[n]  			od.L0.FullName = md.FullName().Append(protoreflect.Name(tag))  			od.L0.ParentFile = md.L0.ParentFile +			od.L1.EditionFeatures = md.L1.EditionFeatures  			od.L0.Parent = md  			od.L0.Index = n @@ -260,6 +262,7 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName  						aberrantAppendField(md, f.Type, tag, "", "")  						fd := &md.L2.Fields.List[len(md.L2.Fields.List)-1]  						fd.L1.ContainingOneof = od +						fd.L1.EditionFeatures = od.L1.EditionFeatures  						od.L1.Fields.List = append(od.L1.Fields.List, fd)  					}  				} @@ -307,14 +310,14 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey,  	fd.L0.Parent = md  	fd.L0.Index = n -	if fd.L1.IsWeak || fd.L1.HasPacked { +	if fd.L1.IsWeak || fd.L1.EditionFeatures.IsPacked {  		fd.L1.Options = func() protoreflect.ProtoMessage {  			opts := descopts.Field.ProtoReflect().New()  			if fd.L1.IsWeak {  				opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOfBool(true))  			} -			if fd.L1.HasPacked { -				opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOfBool(fd.L1.IsPacked)) +			if fd.L1.EditionFeatures.IsPacked { +				opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOfBool(fd.L1.EditionFeatures.IsPacked))  			}  			return opts.Interface()  		} @@ -344,6 +347,7 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey,  				md2.L0.ParentFile = md.L0.ParentFile  				md2.L0.Parent = md  				md2.L0.Index = n +				md2.L1.EditionFeatures = md.L1.EditionFeatures  				md2.L1.IsMapEntry = true  				md2.L2.Options = func() protoreflect.ProtoMessage { diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go index d9ea010be..a6f0dbdad 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go @@ -247,11 +247,10 @@ func (m *extensionMap) Range(f func(protoreflect.FieldDescriptor, protoreflect.V  		}  	}  } -func (m *extensionMap) Has(xt protoreflect.ExtensionType) (ok bool) { +func (m *extensionMap) Has(xd protoreflect.ExtensionTypeDescriptor) (ok bool) {  	if m == nil {  		return false  	} -	xd := xt.TypeDescriptor()  	x, ok := (*m)[int32(xd.Number())]  	if !ok {  		return false @@ -261,25 +260,22 @@ func (m *extensionMap) Has(xt protoreflect.ExtensionType) (ok bool) {  		return x.Value().List().Len() > 0  	case xd.IsMap():  		return x.Value().Map().Len() > 0 -	case xd.Message() != nil: -		return x.Value().Message().IsValid()  	}  	return true  } -func (m *extensionMap) Clear(xt protoreflect.ExtensionType) { -	delete(*m, int32(xt.TypeDescriptor().Number())) +func (m *extensionMap) Clear(xd protoreflect.ExtensionTypeDescriptor) { +	delete(*m, int32(xd.Number()))  } -func (m *extensionMap) Get(xt protoreflect.ExtensionType) protoreflect.Value { -	xd := xt.TypeDescriptor() +func (m *extensionMap) Get(xd protoreflect.ExtensionTypeDescriptor) protoreflect.Value {  	if m != nil {  		if x, ok := (*m)[int32(xd.Number())]; ok {  			return x.Value()  		}  	} -	return xt.Zero() +	return xd.Type().Zero()  } -func (m *extensionMap) Set(xt protoreflect.ExtensionType, v protoreflect.Value) { -	xd := xt.TypeDescriptor() +func (m *extensionMap) Set(xd protoreflect.ExtensionTypeDescriptor, v protoreflect.Value) { +	xt := xd.Type()  	isValid := true  	switch {  	case !xt.IsValidValue(v): @@ -292,7 +288,7 @@ func (m *extensionMap) Set(xt protoreflect.ExtensionType, v protoreflect.Value)  		isValid = v.Message().IsValid()  	}  	if !isValid { -		panic(fmt.Sprintf("%v: assigning invalid value", xt.TypeDescriptor().FullName())) +		panic(fmt.Sprintf("%v: assigning invalid value", xd.FullName()))  	}  	if *m == nil { @@ -302,16 +298,15 @@ func (m *extensionMap) Set(xt protoreflect.ExtensionType, v protoreflect.Value)  	x.Set(xt, v)  	(*m)[int32(xd.Number())] = x  } -func (m *extensionMap) Mutable(xt protoreflect.ExtensionType) protoreflect.Value { -	xd := xt.TypeDescriptor() +func (m *extensionMap) Mutable(xd protoreflect.ExtensionTypeDescriptor) protoreflect.Value {  	if xd.Kind() != protoreflect.MessageKind && xd.Kind() != protoreflect.GroupKind && !xd.IsList() && !xd.IsMap() {  		panic("invalid Mutable on field with non-composite type")  	}  	if x, ok := (*m)[int32(xd.Number())]; ok {  		return x.Value()  	} -	v := xt.New() -	m.Set(xt, v) +	v := xd.Type().New() +	m.Set(xd, v)  	return v  } @@ -428,7 +423,7 @@ func (m *messageIfaceWrapper) protoUnwrap() interface{} {  // checkField verifies that the provided field descriptor is valid.  // Exactly one of the returned values is populated. -func (mi *MessageInfo) checkField(fd protoreflect.FieldDescriptor) (*fieldInfo, protoreflect.ExtensionType) { +func (mi *MessageInfo) checkField(fd protoreflect.FieldDescriptor) (*fieldInfo, protoreflect.ExtensionTypeDescriptor) {  	var fi *fieldInfo  	if n := fd.Number(); 0 < n && int(n) < len(mi.denseFields) {  		fi = mi.denseFields[n] @@ -457,7 +452,7 @@ func (mi *MessageInfo) checkField(fd protoreflect.FieldDescriptor) (*fieldInfo,  		if !ok {  			panic(fmt.Sprintf("extension %v does not implement protoreflect.ExtensionTypeDescriptor", fd.FullName()))  		} -		return nil, xtd.Type() +		return nil, xtd  	}  	panic(fmt.Sprintf("field %v is invalid", fd.FullName()))  } diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go index 741d6e5b6..29ba6bd35 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go @@ -27,8 +27,9 @@ func (m *messageState) protoUnwrap() interface{} {  	return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())  }  func (m *messageState) ProtoMethods() *protoiface.Methods { -	m.messageInfo().init() -	return &m.messageInfo().methods +	mi := m.messageInfo() +	mi.init() +	return &mi.methods  }  // ProtoMessageInfo is a pseudo-internal API for allowing the v1 code @@ -41,8 +42,9 @@ func (m *messageState) ProtoMessageInfo() *MessageInfo {  }  func (m *messageState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { -	m.messageInfo().init() -	for _, ri := range m.messageInfo().rangeInfos { +	mi := m.messageInfo() +	mi.init() +	for _, ri := range mi.rangeInfos {  		switch ri := ri.(type) {  		case *fieldInfo:  			if ri.has(m.pointer()) { @@ -52,77 +54,86 @@ func (m *messageState) Range(f func(protoreflect.FieldDescriptor, protoreflect.V  			}  		case *oneofInfo:  			if n := ri.which(m.pointer()); n > 0 { -				fi := m.messageInfo().fields[n] +				fi := mi.fields[n]  				if !f(fi.fieldDesc, fi.get(m.pointer())) {  					return  				}  			}  		}  	} -	m.messageInfo().extensionMap(m.pointer()).Range(f) +	mi.extensionMap(m.pointer()).Range(f)  }  func (m *messageState) Has(fd protoreflect.FieldDescriptor) bool { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		return fi.has(m.pointer())  	} else { -		return m.messageInfo().extensionMap(m.pointer()).Has(xt) +		return mi.extensionMap(m.pointer()).Has(xd)  	}  }  func (m *messageState) Clear(fd protoreflect.FieldDescriptor) { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		fi.clear(m.pointer())  	} else { -		m.messageInfo().extensionMap(m.pointer()).Clear(xt) +		mi.extensionMap(m.pointer()).Clear(xd)  	}  }  func (m *messageState) Get(fd protoreflect.FieldDescriptor) protoreflect.Value { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		return fi.get(m.pointer())  	} else { -		return m.messageInfo().extensionMap(m.pointer()).Get(xt) +		return mi.extensionMap(m.pointer()).Get(xd)  	}  }  func (m *messageState) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		fi.set(m.pointer(), v)  	} else { -		m.messageInfo().extensionMap(m.pointer()).Set(xt, v) +		mi.extensionMap(m.pointer()).Set(xd, v)  	}  }  func (m *messageState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		return fi.mutable(m.pointer())  	} else { -		return m.messageInfo().extensionMap(m.pointer()).Mutable(xt) +		return mi.extensionMap(m.pointer()).Mutable(xd)  	}  }  func (m *messageState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		return fi.newField()  	} else { -		return xt.New() +		return xd.Type().New()  	}  }  func (m *messageState) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { -	m.messageInfo().init() -	if oi := m.messageInfo().oneofs[od.Name()]; oi != nil && oi.oneofDesc == od { +	mi := m.messageInfo() +	mi.init() +	if oi := mi.oneofs[od.Name()]; oi != nil && oi.oneofDesc == od {  		return od.Fields().ByNumber(oi.which(m.pointer()))  	}  	panic("invalid oneof descriptor " + string(od.FullName()) + " for message " + string(m.Descriptor().FullName()))  }  func (m *messageState) GetUnknown() protoreflect.RawFields { -	m.messageInfo().init() -	return m.messageInfo().getUnknown(m.pointer()) +	mi := m.messageInfo() +	mi.init() +	return mi.getUnknown(m.pointer())  }  func (m *messageState) SetUnknown(b protoreflect.RawFields) { -	m.messageInfo().init() -	m.messageInfo().setUnknown(m.pointer(), b) +	mi := m.messageInfo() +	mi.init() +	mi.setUnknown(m.pointer(), b)  }  func (m *messageState) IsValid() bool {  	return !m.pointer().IsNil() @@ -147,8 +158,9 @@ func (m *messageReflectWrapper) protoUnwrap() interface{} {  	return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())  }  func (m *messageReflectWrapper) ProtoMethods() *protoiface.Methods { -	m.messageInfo().init() -	return &m.messageInfo().methods +	mi := m.messageInfo() +	mi.init() +	return &mi.methods  }  // ProtoMessageInfo is a pseudo-internal API for allowing the v1 code @@ -161,8 +173,9 @@ func (m *messageReflectWrapper) ProtoMessageInfo() *MessageInfo {  }  func (m *messageReflectWrapper) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { -	m.messageInfo().init() -	for _, ri := range m.messageInfo().rangeInfos { +	mi := m.messageInfo() +	mi.init() +	for _, ri := range mi.rangeInfos {  		switch ri := ri.(type) {  		case *fieldInfo:  			if ri.has(m.pointer()) { @@ -172,77 +185,86 @@ func (m *messageReflectWrapper) Range(f func(protoreflect.FieldDescriptor, proto  			}  		case *oneofInfo:  			if n := ri.which(m.pointer()); n > 0 { -				fi := m.messageInfo().fields[n] +				fi := mi.fields[n]  				if !f(fi.fieldDesc, fi.get(m.pointer())) {  					return  				}  			}  		}  	} -	m.messageInfo().extensionMap(m.pointer()).Range(f) +	mi.extensionMap(m.pointer()).Range(f)  }  func (m *messageReflectWrapper) Has(fd protoreflect.FieldDescriptor) bool { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		return fi.has(m.pointer())  	} else { -		return m.messageInfo().extensionMap(m.pointer()).Has(xt) +		return mi.extensionMap(m.pointer()).Has(xd)  	}  }  func (m *messageReflectWrapper) Clear(fd protoreflect.FieldDescriptor) { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		fi.clear(m.pointer())  	} else { -		m.messageInfo().extensionMap(m.pointer()).Clear(xt) +		mi.extensionMap(m.pointer()).Clear(xd)  	}  }  func (m *messageReflectWrapper) Get(fd protoreflect.FieldDescriptor) protoreflect.Value { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		return fi.get(m.pointer())  	} else { -		return m.messageInfo().extensionMap(m.pointer()).Get(xt) +		return mi.extensionMap(m.pointer()).Get(xd)  	}  }  func (m *messageReflectWrapper) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		fi.set(m.pointer(), v)  	} else { -		m.messageInfo().extensionMap(m.pointer()).Set(xt, v) +		mi.extensionMap(m.pointer()).Set(xd, v)  	}  }  func (m *messageReflectWrapper) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		return fi.mutable(m.pointer())  	} else { -		return m.messageInfo().extensionMap(m.pointer()).Mutable(xt) +		return mi.extensionMap(m.pointer()).Mutable(xd)  	}  }  func (m *messageReflectWrapper) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { -	m.messageInfo().init() -	if fi, xt := m.messageInfo().checkField(fd); fi != nil { +	mi := m.messageInfo() +	mi.init() +	if fi, xd := mi.checkField(fd); fi != nil {  		return fi.newField()  	} else { -		return xt.New() +		return xd.Type().New()  	}  }  func (m *messageReflectWrapper) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { -	m.messageInfo().init() -	if oi := m.messageInfo().oneofs[od.Name()]; oi != nil && oi.oneofDesc == od { +	mi := m.messageInfo() +	mi.init() +	if oi := mi.oneofs[od.Name()]; oi != nil && oi.oneofDesc == od {  		return od.Fields().ByNumber(oi.which(m.pointer()))  	}  	panic("invalid oneof descriptor " + string(od.FullName()) + " for message " + string(m.Descriptor().FullName()))  }  func (m *messageReflectWrapper) GetUnknown() protoreflect.RawFields { -	m.messageInfo().init() -	return m.messageInfo().getUnknown(m.pointer()) +	mi := m.messageInfo() +	mi.init() +	return mi.getUnknown(m.pointer())  }  func (m *messageReflectWrapper) SetUnknown(b protoreflect.RawFields) { -	m.messageInfo().init() -	m.messageInfo().setUnknown(m.pointer(), b) +	mi := m.messageInfo() +	mi.init() +	mi.setUnknown(m.pointer(), b)  }  func (m *messageReflectWrapper) IsValid() bool {  	return !m.pointer().IsNil() | 
