internal/genname: centralize the definitions for generated names
Both the generator and the runtime need to agree upon the names of
specialized Go struct fields. Centralize that information in an
internal genname package.
In the mean time, also change the XXX_weak field name to match
the name used internally at Google.
Change-Id: I026bf354418c363482e5902f21aa5e0cacae24b0
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/207080
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 9048648..e8b2207 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -20,6 +20,7 @@
"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 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 @@
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 @@
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 @@
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 0000000..f45509f
--- /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 786f434..e464bef 100644
--- a/internal/impl/message.go
+++ b/internal/impl/message.go
@@ -12,6 +12,7 @@
"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 @@
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 c784e84..63e0c1c 100644
--- a/internal/testprotos/fieldtrack/fieldtrack.pb.go
+++ b/internal/testprotos/fieldtrack/fieldtrack.pb.go
@@ -20,7 +20,7 @@
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) 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) 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 @@
//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 @@
//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 @@
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 800551f..59a6849 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -1648,7 +1648,7 @@
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 (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) 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) 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 @@
return &v.state
case 1:
return &v.sizeCache
+ case 2:
+ return &v.weakFields
case 3:
return &v.unknownFields
default: