internal/impl: allow reflection on typed nil pointers
Similar to how generated messages allow you to call Get methods on a
nil pointer, we permit similar functionality when protobuf reflection
is used on a nil pointer.
Change-Id: Ie2f596d39105c191073b42d7d689525c3b715240
Reviewed-on: https://go-review.googlesource.com/c/152021
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/impl/legacy_extension.go b/internal/impl/legacy_extension.go
index df92f02..baa13fd 100644
--- a/internal/impl/legacy_extension.go
+++ b/internal/impl/legacy_extension.go
@@ -17,6 +17,9 @@
return nil
}
return func(p *messageDataType) pref.KnownFields {
+ if p.p.IsNil() {
+ return emptyExtensionFields{}
+ }
return legacyExtensionFields{p.mi, f(p)}
}
}
@@ -33,13 +36,13 @@
case fx1.Type == extTypeA:
fieldOffset := offsetOf(fx1)
return func(p *messageDataType) papi.ExtensionFields {
- v := p.p.apply(fieldOffset).asType(fx1.Type).Interface()
+ v := p.p.Apply(fieldOffset).AsValueOf(fx1.Type).Interface()
return papi.ExtensionFieldsOf(v)
}
case fx2.Type == extTypeB:
fieldOffset := offsetOf(fx2)
return func(p *messageDataType) papi.ExtensionFields {
- v := p.p.apply(fieldOffset).asType(fx2.Type).Interface()
+ v := p.p.Apply(fieldOffset).AsValueOf(fx2.Type).Interface()
return papi.ExtensionFieldsOf(v)
}
default: