reflect/protodesc: fix handling of unresolved identifiers
Change-Id: I09a6384de5591d77d99e5646ccc9137f42424845
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/183779
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/reflect/protodesc/protodesc.go b/reflect/protodesc/protodesc.go
index bb6d245..7865dd1 100644
--- a/reflect/protodesc/protodesc.go
+++ b/reflect/protodesc/protodesc.go
@@ -502,6 +502,14 @@
return nil, err
}
if ed, ok := d.(protoreflect.EnumDescriptor); ok {
+ if err == protoregistry.NotFound {
+ if isWeak {
+ return filedesc.PlaceholderEnum(protoreflect.FullName(s[1:])), nil
+ }
+ // TODO: This should be an error.
+ return filedesc.PlaceholderEnum(protoreflect.FullName(s[1:])), nil
+ // return nil, errors.New("could not resolve enum: %v", name)
+ }
return ed, nil
}
return nil, errors.New("invalid descriptor type")
@@ -510,6 +518,14 @@
func findMessageDescriptor(s string, isWeak bool, imps importSet, r Resolver) (protoreflect.MessageDescriptor, error) {
d, err := findDescriptor(s, isWeak, imps, r)
if err != nil {
+ if err == protoregistry.NotFound {
+ if isWeak {
+ return filedesc.PlaceholderMessage(protoreflect.FullName(s[1:])), nil
+ }
+ // TODO: This should be an error.
+ return filedesc.PlaceholderMessage(protoreflect.FullName(s[1:])), nil
+ // return nil, errors.New("could not resolve enum: %v", name)
+ }
return nil, err
}
if md, ok := d.(protoreflect.MessageDescriptor); ok {
@@ -525,14 +541,6 @@
name := protoreflect.FullName(strings.TrimPrefix(s, "."))
d, err := r.FindDescriptorByName(name)
if err != nil {
- if err == protoregistry.NotFound {
- if isWeak {
- return filedesc.PlaceholderEnum(name), nil
- }
- // TODO: This should be an error.
- return filedesc.PlaceholderEnum(name), nil
- // return nil, errors.New("could not resolve enum: %v", name)
- }
return nil, err
}
if err := imps.check(d); err != nil {