@@ -103,7 +103,8 @@ func main() {
103
103
}
104
104
105
105
for _ , message := range file .GetMessageType () {
106
- allMessageDescriptors [trimPackageFromName (fmt .Sprintf ("%s.%s" , file .GetPackage (), message .GetName ()))] = message
106
+ fillAllMessageDescriptors (file .GetPackage (), message )
107
+ //allMessageDescriptors[trimPackageFromName(fmt.Sprintf("%s.%s", file.GetPackage(), message.GetName()))] = message
107
108
}
108
109
}
109
110
@@ -159,19 +160,24 @@ func resolveMessageExtends(message *descriptorpb.DescriptorProto) {
159
160
160
161
parentResolvedMap [message ] = true
161
162
var options []* descriptorpb.UninterpretedOption
163
+ var keepOptions []* descriptorpb.UninterpretedOption
162
164
var fields []* descriptorpb.FieldDescriptorProto
163
- for i , option := range message .GetOptions ().GetUninterpretedOption () {
165
+ for _ , option := range message .GetOptions ().GetUninterpretedOption () {
164
166
if isOptionOneProtoExtends (option ) {
165
- message .Options .UninterpretedOption = append (message .Options .UninterpretedOption [:i ], message .Options .UninterpretedOption [i + 1 :]... )
166
167
parent := allMessageDescriptors [trimPackageFromName (string (option .GetStringValue ()))]
167
168
if parent == nil {
168
169
log .Fatalf ("unable to find message %s" , option .GetStringValue ())
169
170
}
170
171
resolveMessageExtends (parent )
171
172
fields = append (fields , parent .Field ... )
172
173
options = append (options , parent .GetOptions ().GetUninterpretedOption ()... )
174
+ } else {
175
+ keepOptions = append (keepOptions , option )
173
176
}
174
177
}
178
+ if message .Options != nil {
179
+ message .Options .UninterpretedOption = keepOptions
180
+ }
175
181
176
182
message .Field = append (message .Field , fields ... )
177
183
if * pOptions {
@@ -200,3 +206,10 @@ func isOptionOneProtoExtends(option *descriptorpb.UninterpretedOption) bool {
200
206
}
201
207
return false
202
208
}
209
+
210
+ func fillAllMessageDescriptors (pkg string , message * descriptorpb.DescriptorProto ) {
211
+ allMessageDescriptors [trimPackageFromName (fmt .Sprintf ("%s.%s" , pkg , message .GetName ()))] = message
212
+ for _ , sub := range message .GetNestedType () {
213
+ fillAllMessageDescriptors (fmt .Sprintf ("%s.%s" , pkg , message .GetName ()), sub )
214
+ }
215
+ }
0 commit comments