mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-03-09 13:13:32 +00:00
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>
This commit is contained in:
parent
ce413af0b3
commit
4663ebc852
@ -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()
|
||||
|
25
internal/genname/name.go
Normal file
25
internal/genname/name.go
Normal file
@ -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_"
|
||||
)
|
@ -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)
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user