internal/impl: fix reversed IsValid test
Change-Id: Iaf5291a6bf31ad3dd130fca06840cec66b896f59
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/211558
Reviewed-by: Joe Tsai <joetsai@google.com>
diff --git a/internal/cmd/generate-types/impl.go b/internal/cmd/generate-types/impl.go
index 401eba8..700ae27 100644
--- a/internal/cmd/generate-types/impl.go
+++ b/internal/cmd/generate-types/impl.go
@@ -741,7 +741,7 @@
m.messageInfo().setUnknown(m.pointer(), b)
}
func (m *{{.}}) IsValid() bool {
- return m.pointer().IsNil()
+ return !m.pointer().IsNil()
}
{{end}}
diff --git a/internal/impl/message_reflect_gen.go b/internal/impl/message_reflect_gen.go
index e894659..94bc88c 100644
--- a/internal/impl/message_reflect_gen.go
+++ b/internal/impl/message_reflect_gen.go
@@ -125,7 +125,7 @@
m.messageInfo().setUnknown(m.pointer(), b)
}
func (m *messageState) IsValid() bool {
- return m.pointer().IsNil()
+ return !m.pointer().IsNil()
}
func (m *messageReflectWrapper) Descriptor() protoreflect.MessageDescriptor {
@@ -245,5 +245,5 @@
m.messageInfo().setUnknown(m.pointer(), b)
}
func (m *messageReflectWrapper) IsValid() bool {
- return m.pointer().IsNil()
+ return !m.pointer().IsNil()
}
diff --git a/internal/impl/message_reflect_test.go b/internal/impl/message_reflect_test.go
index 82d5f81..bb6bda5 100644
--- a/internal/impl/message_reflect_test.go
+++ b/internal/impl/message_reflect_test.go
@@ -1437,6 +1437,17 @@
m.Descriptor()
}
+func TestIsValid(t *testing.T) {
+ var m *testpb.TestAllTypes
+ if got, want := m.ProtoReflect().IsValid(), false; got != want {
+ t.Errorf("((*M)(nil)).ProtoReflect().IsValid() = %v, want %v", got, want)
+ }
+ m = &testpb.TestAllTypes{}
+ if got, want := m.ProtoReflect().IsValid(), true; got != want {
+ t.Errorf("(&M{}).ProtoReflect().IsValid() = %v, want %v", got, want)
+ }
+}
+
// The MessageState implementation makes the assumption that when a
// concrete message is unsafe casted as a *MessageState, the Go GC does
// not reclaim the memory for the remainder of the concrete message.