public void CreateGenericArgumentState()
        {
            if (IsJniValueType)
            {
                var s = marshaler.CreateGenericArgumentState(Value);

                // Note: Only valid if `Value` isn't 0, so don't do that!
                Assert.AreNotEqual(new JniArgumentValue(), s.JniArgumentValue);

                // JniValueMarshaler<T>.CreateArgumentState() for value types only
                // fills out the JniArgumentValue value, nothing else.
                Assert.IsFalse(s.ReferenceValue.IsValid);
                Assert.IsNull(s.PeerableValue);
                Assert.IsNull(s.Extra);

                marshaler.DestroyGenericArgumentState(Value, ref s);
                Assert.AreEqual(new JniValueMarshalerState(), s);
            }
            else
            {
                var s = marshaler.CreateGenericArgumentState(Value);

                if (s.PeerableValue != null)
                {
                    Assert.AreEqual(s.PeerableValue.PeerReference, s.ReferenceValue);
                }
                Assert.IsTrue(s.ReferenceValue.IsValid);
                Assert.AreEqual(new JniArgumentValue(s.ReferenceValue), s.JniArgumentValue);

                marshaler.DestroyGenericArgumentState(Value, ref s);
                Assert.AreEqual(new JniValueMarshalerState(), s);
            }
        }
 public override JniValueMarshalerState CreateGenericArgumentState(DemoValueType value, ParameterAttributes synchronize)
 {
     return(Int32Marshaler.CreateGenericArgumentState(value.Value, synchronize));
 }