Skip to content

Commit d3ac1a5

Browse files
committed
internal/proto: use new protoreflect.Message API
CL/175458 adds new Message API in preparation for deprecating the current API through the KnownFields interface. Switch to use the new API. Change-Id: I03f7e69aed846538d69b6c11dbda89114a2adedc Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/181837 Reviewed-by: Damien Neil <[email protected]>
1 parent 76c9e09 commit d3ac1a5

File tree

4 files changed

+30
-31
lines changed

4 files changed

+30
-31
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ module github.com/golang/protobuf
22

33
go 1.9
44

5-
require google.golang.org/protobuf v0.0.0-20190605195314-89d49632e5cf
5+
require google.golang.org/protobuf v0.0.0-20190617173324-378c1329ded0

go.sum

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ github.com/golang/protobuf v1.2.1-0.20190515194842-7574ba03306e/go.mod h1:GjgUz9
33
github.com/golang/protobuf v1.2.1-0.20190516201927-a2cd3ac1b343/go.mod h1:PScGDF2x230A126tLt9Ol9RjhXzbiPJrt/CogooD2mE=
44
github.com/golang/protobuf v1.2.1-0.20190516215712-ae2eaafab405/go.mod h1:UmP8hhPKR5WWIjbT9v0JEVT+U0DBSjbW8KaZVeyFfRE=
55
github.com/golang/protobuf v1.2.1-0.20190523175523-a1331f0b4ab4/go.mod h1:G+fNMoyvKWZDB7PCDHF+dXbH9OeE3+JoozCd9V7i66U=
6+
github.com/golang/protobuf v1.2.1-0.20190605195750-76c9e09470ba/go.mod h1:S1YIJXvYHGRCG2UmZsOcElkAYfvZLg2sDRr9+Xu8JXU=
67
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
78
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
89
google.golang.org/protobuf v0.0.0-20190514172829-e89e6244e0e8/go.mod h1:791zQGC15vDqjpmPRn1uGPu5oHy/Jzw/Q1n5JsgIIcY=
910
google.golang.org/protobuf v0.0.0-20190514231807-cdb777356907/go.mod h1:HeRLsKXv4+wE27dOIGwnqcOgq6a1O/GJ7mGhiEPnBrU=
1011
google.golang.org/protobuf v0.0.0-20190516201745-40b83d67fc75/go.mod h1:jf+u8AHuKtkib+0J4/bQXPNzCmT3V9a02hVzYKtatuw=
1112
google.golang.org/protobuf v0.0.0-20190516215540-a95b29fbf623/go.mod h1:cWWmz5lsCWIcqGLROrKq5Lu231IJw2PzqOZ8cgspbfY=
1213
google.golang.org/protobuf v0.0.0-20190522194032-21ade498bd69/go.mod h1:cJytyYi/6qdwy/+gD49hmgHcwD7zhWxE/1KPEslaZ3M=
13-
google.golang.org/protobuf v0.0.0-20190605195314-89d49632e5cf h1:O9EJAZHrXZ8fKtT5e+sEc2u/izLtNaXiwHhthZEtsSs=
1414
google.golang.org/protobuf v0.0.0-20190605195314-89d49632e5cf/go.mod h1:Btug4TBaP5wNYcb2zGKDTS7WMcaPPLuqEAKfEAZWYbo=
15+
google.golang.org/protobuf v0.0.0-20190617173324-378c1329ded0 h1:xWgajdfLzmZPasRoZwpEGv4W/ouKCE33vYT9lIhwXTI=
16+
google.golang.org/protobuf v0.0.0-20190617173324-378c1329ded0/go.mod h1:+FOB8T5/Yw4ywwdyeun9/KlDeuwFYBkNQ+kVuwj9C94=

internal/proto/defaults.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,28 @@ func SetDefaults(m Message) {
1919

2020
func setDefaults(m pref.Message) {
2121
fieldDescs := m.Descriptor().Fields()
22-
knownFields := m.KnownFields()
2322
for i := 0; i < fieldDescs.Len(); i++ {
2423
fd := fieldDescs.Get(i)
25-
num := fd.Number()
26-
if !knownFields.Has(num) {
24+
if !m.Has(fd) {
2725
if fd.HasDefault() {
2826
v := fd.Default()
2927
if fd.Kind() == pref.BytesKind {
3028
v = pref.ValueOf(append([]byte(nil), v.Bytes()...)) // copy the default bytes
3129
}
32-
knownFields.Set(num, v)
30+
m.Set(fd, v)
3331
}
3432
continue
3533
}
3634
switch {
3735
// Handle singular message.
3836
case fd.Cardinality() != pref.Repeated:
3937
if k := fd.Kind(); k == pref.MessageKind || k == pref.GroupKind {
40-
setDefaults(knownFields.Get(num).Message())
38+
setDefaults(m.Get(fd).Message())
4139
}
4240
// Handle list of messages.
4341
case !fd.IsMap():
4442
if k := fd.Kind(); k == pref.MessageKind || k == pref.GroupKind {
45-
ls := knownFields.Get(num).List()
43+
ls := m.Get(fd).List()
4644
for i := 0; i < ls.Len(); i++ {
4745
setDefaults(ls.Get(i).Message())
4846
}
@@ -51,7 +49,7 @@ func setDefaults(m pref.Message) {
5149
default:
5250
k := fd.Message().Fields().ByNumber(2).Kind()
5351
if k == pref.MessageKind || k == pref.GroupKind {
54-
ms := knownFields.Get(num).Map()
52+
ms := m.Get(fd).Map()
5553
ms.Range(func(_ pref.MapKey, v pref.Value) bool {
5654
setDefaults(v.Message())
5755
return true

internal/proto/discard.go

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package proto
66

77
import (
8+
"github.com/golang/protobuf/internal/wire"
89
pref "google.golang.org/protobuf/reflect/protoreflect"
910
"google.golang.org/protobuf/runtime/protoimpl"
1011
)
@@ -28,32 +29,25 @@ func DiscardUnknown(m Message) {
2829
}
2930

3031
func discardUnknown(m pref.Message) {
31-
fieldDescs := m.Descriptor().Fields()
32-
knownFields := m.KnownFields()
33-
knownFields.Range(func(num pref.FieldNumber, val pref.Value) bool {
34-
fd := fieldDescs.ByNumber(num)
35-
if fd == nil {
36-
fd = knownFields.ExtensionTypes().ByNumber(num).Descriptor()
37-
}
32+
m.Range(func(fd pref.FieldDescriptor, val pref.Value) bool {
3833
switch {
3934
// Handle singular message.
4035
case fd.Cardinality() != pref.Repeated:
41-
if k := fd.Kind(); k == pref.MessageKind || k == pref.GroupKind {
42-
discardUnknown(knownFields.Get(num).Message())
36+
if fd.Message() != nil {
37+
discardUnknown(m.Get(fd).Message())
4338
}
4439
// Handle list of messages.
45-
case !fd.IsMap():
46-
if k := fd.Kind(); k == pref.MessageKind || k == pref.GroupKind {
47-
ls := knownFields.Get(num).List()
40+
case fd.IsList():
41+
if fd.Message() != nil {
42+
ls := m.Get(fd).List()
4843
for i := 0; i < ls.Len(); i++ {
4944
discardUnknown(ls.Get(i).Message())
5045
}
5146
}
5247
// Handle map of messages.
53-
default:
54-
k := fd.Message().Fields().ByNumber(2).Kind()
55-
if k == pref.MessageKind || k == pref.GroupKind {
56-
ms := knownFields.Get(num).Map()
48+
case fd.IsMap():
49+
if fd.MapValue().Message() != nil {
50+
ms := m.Get(fd).Map()
5751
ms.Range(func(_ pref.MapKey, v pref.Value) bool {
5852
discardUnknown(v.Message())
5953
return true
@@ -63,14 +57,19 @@ func discardUnknown(m pref.Message) {
6357
return true
6458
})
6559

60+
// Discard unknown fields.
61+
var bo pref.RawFields
6662
extRanges := m.Descriptor().ExtensionRanges()
67-
unknownFields := m.UnknownFields()
68-
unknownFields.Range(func(num pref.FieldNumber, _ pref.RawFields) bool {
63+
for bi := m.GetUnknown(); len(bi) > 0; {
6964
// NOTE: Historically, this function did not discard unknown fields
7065
// that were within the extension field ranges.
71-
if !extRanges.Has(num) {
72-
unknownFields.Set(num, nil)
66+
num, _, n := wire.ConsumeField(bi)
67+
if extRanges.Has(num) {
68+
bo = append(bo, bi[:n]...)
7369
}
74-
return true
75-
})
70+
bi = bi[n:]
71+
}
72+
if bi := m.GetUnknown(); len(bi) != len(bo) {
73+
m.SetUnknown(bo)
74+
}
7675
}

0 commit comments

Comments
 (0)