diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go index 90486483..e8b22074 100644 --- a/cmd/protoc-gen-go/internal_gengo/main.go +++ b/cmd/protoc-gen-go/internal_gengo/main.go @@ -20,6 +20,7 @@ import ( "google.golang.org/protobuf/internal/encoding/messageset" "google.golang.org/protobuf/internal/encoding/tag" "google.golang.org/protobuf/internal/fieldnum" + "google.golang.org/protobuf/internal/genname" "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/runtime/protoimpl" @@ -398,19 +399,19 @@ func genMessageFields(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { } func genMessageInternalFields(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, sf *structFields) { - g.P("state ", protoimplPackage.Ident("MessageState")) - sf.append("state") - g.P("sizeCache", " ", protoimplPackage.Ident("SizeCache")) - sf.append("sizeCache") + g.P(genname.State, " ", protoimplPackage.Ident("MessageState")) + sf.append(genname.State) + g.P(genname.SizeCache, " ", protoimplPackage.Ident("SizeCache")) + sf.append(genname.SizeCache) if m.HasWeak { - g.P("XXX_weak", " ", protoimplPackage.Ident("WeakFields"), jsonIgnoreTags) - sf.append("XXX_weak") + g.P(genname.WeakFields, " ", protoimplPackage.Ident("WeakFields"), jsonIgnoreTags) + sf.append(genname.WeakFields) } - g.P("unknownFields", " ", protoimplPackage.Ident("UnknownFields")) - sf.append("unknownFields") + g.P(genname.UnknownFields, " ", protoimplPackage.Ident("UnknownFields")) + sf.append(genname.UnknownFields) if m.Desc.ExtensionRanges().Len() > 0 { - g.P("extensionFields", " ", protoimplPackage.Ident("ExtensionFields")) - sf.append("extensionFields") + g.P(genname.ExtensionFields, " ", protoimplPackage.Ident("ExtensionFields")) + sf.append(genname.ExtensionFields) } if sf.count > 0 { g.P() @@ -471,7 +472,7 @@ func genMessageField(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, fie name := field.GoName if field.Desc.IsWeak() { - name = "XXX_weak_" + name + name = genname.WeakFieldPrefix + name } g.Annotate(m.GoIdent.GoName+"."+name, field.Location) leadingComments := appendDeprecationSuffix(field.Comments.Leading, @@ -627,8 +628,8 @@ func genMessageGetterMethods(gen *protogen.Plugin, g *protogen.GeneratedFile, f case field.Desc.IsWeak(): g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", protoifacePackage.Ident("MessageV1"), "{") g.P("if x != nil {") - g.P("v := x.XXX_weak[", field.Desc.Number(), "]") - g.P("_ = x.XXX_weak_" + field.GoName) // for field-tracking + g.P("v := x.", genname.WeakFields, "[", field.Desc.Number(), "]") + g.P("_ = x.", genname.WeakFieldPrefix+field.GoName) // for field-tracking g.P("if v != nil {") g.P("return v") g.P("}") @@ -674,14 +675,14 @@ func genMessageSetterMethods(gen *protogen.Plugin, g *protogen.GeneratedFile, f leadingComments := appendDeprecationSuffix("", field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) g.P(leadingComments, "func (x *", m.GoIdent, ") Set", field.GoName, "(v ", protoifacePackage.Ident("MessageV1"), ") {") - g.P("if x.XXX_weak == nil {") - g.P("x.XXX_weak = make(", protoimplPackage.Ident("WeakFields"), ")") + g.P("if x.", genname.WeakFields, " == nil {") + g.P("x.", genname.WeakFields, " = make(", protoimplPackage.Ident("WeakFields"), ")") g.P("}") g.P("if v == nil {") - g.P("delete(x.XXX_weak, ", field.Desc.Number(), ")") + g.P("delete(x.", genname.WeakFields, ", ", field.Desc.Number(), ")") g.P("} else {") - g.P("x.XXX_weak[", field.Desc.Number(), "] = v") - g.P("x.XXX_weak_"+field.GoName, " = struct{}{}") // for field-tracking + g.P("x.", genname.WeakFields, "[", field.Desc.Number(), "] = v") + g.P("x.", genname.WeakFieldPrefix+field.GoName, " = struct{}{}") // for field-tracking g.P("}") g.P("}") g.P() diff --git a/internal/genname/name.go b/internal/genname/name.go new file mode 100644 index 00000000..f45509fb --- /dev/null +++ b/internal/genname/name.go @@ -0,0 +1,25 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package genname contains constants for generated names. +package genname + +const ( + State = "state" + + SizeCache = "sizeCache" + SizeCacheA = "XXX_sizecache" + + WeakFields = "weakFields" + WeakFieldsA = "XXX_weak" + + UnknownFields = "unknownFields" + UnknownFieldsA = "XXX_unrecognized" + + ExtensionFields = "extensionFields" + ExtensionFieldsA = "XXX_InternalExtensions" + ExtensionFieldsB = "XXX_extensions" + + WeakFieldPrefix = "XXX_weak_" +) diff --git a/internal/impl/message.go b/internal/impl/message.go index 786f4349..e464beff 100644 --- a/internal/impl/message.go +++ b/internal/impl/message.go @@ -12,6 +12,7 @@ import ( "sync" "sync/atomic" + "google.golang.org/protobuf/internal/genname" "google.golang.org/protobuf/reflect/protoreflect" pref "google.golang.org/protobuf/reflect/protoreflect" piface "google.golang.org/protobuf/runtime/protoiface" @@ -135,19 +136,19 @@ func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo { fieldLoop: for i := 0; i < t.NumField(); i++ { switch f := t.Field(i); f.Name { - case "sizeCache", "XXX_sizecache": + case genname.SizeCache, genname.SizeCacheA: if f.Type == sizecacheType { si.sizecacheOffset = offsetOf(f, mi.Exporter) } - case "weakFields", "XXX_weak": + case genname.WeakFields, genname.WeakFieldsA: if f.Type == weakFieldsType { si.weakOffset = offsetOf(f, mi.Exporter) } - case "unknownFields", "XXX_unrecognized": + case genname.UnknownFields, genname.UnknownFieldsA: if f.Type == unknownFieldsType { si.unknownOffset = offsetOf(f, mi.Exporter) } - case "extensionFields", "XXX_InternalExtensions", "XXX_extensions": + case genname.ExtensionFields, genname.ExtensionFieldsA, genname.ExtensionFieldsB: if f.Type == extensionFieldsType { si.extensionOffset = offsetOf(f, mi.Exporter) } diff --git a/internal/testprotos/fieldtrack/fieldtrack.pb.go b/internal/testprotos/fieldtrack/fieldtrack.pb.go index c784e848..63e0c1c4 100644 --- a/internal/testprotos/fieldtrack/fieldtrack.pb.go +++ b/internal/testprotos/fieldtrack/fieldtrack.pb.go @@ -20,7 +20,7 @@ import ( type TestFieldTrack struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache - XXX_weak protoimpl.WeakFields `json:"-"` + weakFields protoimpl.WeakFields `json:"-"` unknownFields protoimpl.UnknownFields OptionalInt32 *int32 `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32" json:"optional_int32,omitempty" go:"track"` @@ -573,7 +573,7 @@ func (x *TestFieldTrack) GetMapStringMessage() map[string]*test.TestAllTypes_Nes func (x *TestFieldTrack) GetWeakMessage1() protoiface.MessageV1 { if x != nil { - v := x.XXX_weak[100] + v := x.weakFields[100] _ = x.XXX_weak_WeakMessage1 if v != nil { return v @@ -586,7 +586,7 @@ func (x *TestFieldTrack) GetWeakMessage1() protoiface.MessageV1 { func (x *TestFieldTrack) GetWeakMessage2() protoiface.MessageV1 { if x != nil { - v := x.XXX_weak[101] + v := x.weakFields[101] _ = x.XXX_weak_WeakMessage2 if v != nil { return v @@ -598,13 +598,13 @@ func (x *TestFieldTrack) GetWeakMessage2() protoiface.MessageV1 { //go:nointerface func (x *TestFieldTrack) SetWeakMessage1(v protoiface.MessageV1) { - if x.XXX_weak == nil { - x.XXX_weak = make(protoimpl.WeakFields) + if x.weakFields == nil { + x.weakFields = make(protoimpl.WeakFields) } if v == nil { - delete(x.XXX_weak, 100) + delete(x.weakFields, 100) } else { - x.XXX_weak[100] = v + x.weakFields[100] = v x.XXX_weak_WeakMessage1 = struct{}{} } } @@ -612,13 +612,13 @@ func (x *TestFieldTrack) SetWeakMessage1(v protoiface.MessageV1) { //go:nointerface func (x *TestFieldTrack) SetWeakMessage2(v protoiface.MessageV1) { - if x.XXX_weak == nil { - x.XXX_weak = make(protoimpl.WeakFields) + if x.weakFields == nil { + x.weakFields = make(protoimpl.WeakFields) } if v == nil { - delete(x.XXX_weak, 101) + delete(x.weakFields, 101) } else { - x.XXX_weak[101] = v + x.weakFields[101] = v x.XXX_weak_WeakMessage2 = struct{}{} } } @@ -1016,6 +1016,8 @@ func file_fieldtrack_fieldtrack_proto_init() { return &v.state case 1: return &v.sizeCache + case 2: + return &v.weakFields case 3: return &v.unknownFields default: diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go index 800551fe..59a68492 100644 --- a/internal/testprotos/test/test.pb.go +++ b/internal/testprotos/test/test.pb.go @@ -1648,7 +1648,7 @@ func (x *TestRequiredGroupFields) GetRepeatedgroup() []*TestRequiredGroupFields_ type TestWeak struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache - XXX_weak protoimpl.WeakFields `json:"-"` + weakFields protoimpl.WeakFields `json:"-"` unknownFields protoimpl.UnknownFields XXX_weak_WeakMessage1 struct{} `protobuf:"bytes,1,opt,name=weak_message1,json=weakMessage1,weak=goproto.proto.test.weak.WeakImportMessage1" json:"weak_message1,omitempty"` @@ -1689,7 +1689,7 @@ func (*TestWeak) Descriptor() ([]byte, []int) { func (x *TestWeak) GetWeakMessage1() protoiface.MessageV1 { if x != nil { - v := x.XXX_weak[1] + v := x.weakFields[1] _ = x.XXX_weak_WeakMessage1 if v != nil { return v @@ -1700,7 +1700,7 @@ func (x *TestWeak) GetWeakMessage1() protoiface.MessageV1 { func (x *TestWeak) GetWeakMessage2() protoiface.MessageV1 { if x != nil { - v := x.XXX_weak[2] + v := x.weakFields[2] _ = x.XXX_weak_WeakMessage2 if v != nil { return v @@ -1710,25 +1710,25 @@ func (x *TestWeak) GetWeakMessage2() protoiface.MessageV1 { } func (x *TestWeak) SetWeakMessage1(v protoiface.MessageV1) { - if x.XXX_weak == nil { - x.XXX_weak = make(protoimpl.WeakFields) + if x.weakFields == nil { + x.weakFields = make(protoimpl.WeakFields) } if v == nil { - delete(x.XXX_weak, 1) + delete(x.weakFields, 1) } else { - x.XXX_weak[1] = v + x.weakFields[1] = v x.XXX_weak_WeakMessage1 = struct{}{} } } func (x *TestWeak) SetWeakMessage2(v protoiface.MessageV1) { - if x.XXX_weak == nil { - x.XXX_weak = make(protoimpl.WeakFields) + if x.weakFields == nil { + x.weakFields = make(protoimpl.WeakFields) } if v == nil { - delete(x.XXX_weak, 2) + delete(x.weakFields, 2) } else { - x.XXX_weak[2] = v + x.weakFields[2] = v x.XXX_weak_WeakMessage2 = struct{}{} } } @@ -4919,6 +4919,8 @@ func file_test_test_proto_init() { return &v.state case 1: return &v.sizeCache + case 2: + return &v.weakFields case 3: return &v.unknownFields default: