public void DynamicOneofMessage()
        {
            DynamicMessage.Builder builder =
                DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
            OneofDescriptor oneof = TestAllTypes.Descriptor.Oneofs[0];

            Assert.False(builder.HasOneof(oneof));
            Assert.AreSame(null, builder.OneofFieldDescriptor(oneof));

            reflectionTester.SetAllFieldsViaReflection(builder);
            Assert.True(builder.HasOneof(oneof));
            FieldDescriptor field = oneof.Field(3);

            Assert.AreSame(field, builder.OneofFieldDescriptor(oneof));
            Assert.AreEqual(TestUtil.ToBytes("604"), builder[field]);

            DynamicMessage message = builder.BuildPartial();

            Assert.IsTrue(message.HasOneof(oneof));

            DynamicMessage.Builder mergedBuilder =
                DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
            FieldDescriptor mergedField = oneof.Field(0);

            mergedBuilder[mergedField] = 123U;
            Assert.IsTrue(mergedBuilder.HasField(mergedField));
            mergedBuilder.MergeFrom(message);
            Assert.IsTrue(mergedBuilder.HasField(field));
            Assert.IsFalse(mergedBuilder.HasField(mergedField));

            mergedBuilder.ClearOneof(oneof);
            Assert.AreSame(null, mergedBuilder.OneofFieldDescriptor(oneof));
            message = mergedBuilder.Build();
            Assert.AreSame(null, message.OneofFieldDescriptor(oneof));
        }
 internal OneofAccessor <TMessage, TBuilder> Oneof(OneofDescriptor oneof)
 {
     if (oneof.ContainingType != descriptor)
     {
         throw new ArgumentException("OneofDescriptor does not match message type");
     }
     return(oneofs[oneof.Index]);
 }
Esempio n. 3
0
        private async Task WriteOneOfDescriptor(OneofDescriptor oneof, TextWriter writer, string indentation = NoIndent)
        {
            await writer.WriteLineAsync($"{indentation}oneof {oneof.Name} {{");

            foreach (var field in oneof.Fields)
            {
                await WriteFieldDescriptor(field, writer, indentation + Indent);
            }
            await writer.WriteLineAsync($"{indentation}}}");
        }
            public override Builder ClearOneof(OneofDescriptor oneof)
            {
                VerifyContainingOneofType(oneof);
                FieldDescriptor field = oneofCase[oneof.Index];

                if (field != null)
                {
                    ClearField(field);
                }
                return(this);
            }
            public override bool HasOneof(OneofDescriptor oneof)
            {
                VerifyContainingOneofType(oneof);
                FieldDescriptor field = oneofCase[oneof.Index];

                if (field == null)
                {
                    return(false);
                }
                return(true);
            }
        public void ReflectionClearOneof()
        {
            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
            reflectionTester.SetAllFieldsViaReflection(builder);
            OneofDescriptor oneof = TestAllTypes.Descriptor.Oneofs[0];
            FieldDescriptor field = TestAllTypes.Descriptor.FindFieldByName("oneof_bytes");

            Assert.IsTrue(builder.HasOneof(oneof));
            Assert.IsTrue(builder.HasField(field));
            builder.ClearOneof(oneof);
            Assert.IsFalse(builder.HasOneof(oneof));
            Assert.IsFalse(builder.HasField(field));
        }
            public override Builder ClearField(FieldDescriptor field)
            {
                VerifyContainingType(field);
                OneofDescriptor oneof = field.ContainingOneof;

                if (oneof != null)
                {
                    int index = oneof.Index;
                    if (oneofCase[index] == field)
                    {
                        oneofCase[index] = null;
                    }
                }
                fields.ClearField(field);
                return(this);
            }
Esempio n. 8
0
 public abstract TBuilder ClearOneof(OneofDescriptor oneof);
 public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
 {
     return(MessageBeingBuilt.OneofFieldDescriptor(oneof));
 }
Esempio n. 10
0
 public abstract FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof);
Esempio n. 11
0
 public abstract bool HasOneof(OneofDescriptor oneof);
 public override TBuilder ClearOneof(OneofDescriptor oneof)
 {
     InternalFieldAccessors.Oneof(oneof).Clear(ThisBuilder);
     return(ThisBuilder);
 }
 public override Builder ClearOneof(OneofDescriptor oneof)
 {
     wrappedBuilder.WeakClearOneof(oneof);
     return(this);
 }
 public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
 {
     return(wrappedBuilder.OneofFieldDescriptor(oneof));
 }
 public override bool HasOneof(OneofDescriptor oneof)
 {
     return(wrappedBuilder.HasOneof(oneof));
 }
 public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
 {
     return(wrappedMessage.OneofFieldDescriptor(oneof));
 }
 public override bool HasOneof(OneofDescriptor oneof)
 {
     return(wrappedMessage.HasOneof(oneof));
 }
 public override bool HasOneof(OneofDescriptor oneof)
 {
     return(MessageBeingBuilt.HasOneof(oneof));
 }
Esempio n. 19
0
 IBuilder IBuilder.WeakClearOneof(OneofDescriptor oneof)
 {
     return(ClearOneof(oneof));
 }
 public override bool HasOneof(OneofDescriptor oneof)
 {
     return(InternalFieldAccessors.Oneof(oneof).Has(ThisMessage));
 }
 public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
 {
     VerifyContainingOneofType(oneof);
     return(oneofCase[oneof.Index]);
 }
 public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
 {
     return(InternalFieldAccessors.Oneof(oneof).GetOneofFieldDescriptor(ThisMessage));
 }