コード例 #1
0
            private void DecodeValue()
            {
                var value = Definition.DecodeValue(typeProvider);

                if (value.FixedArguments.IsEmpty)
                {
                    fixedArguments = Array.Empty <MetadataAttributeValue>();
                }
                else
                {
                    var r = new MetadataAttributeValue[value.FixedArguments.Length];
                    for (var i = 0; i < r.Length; i++)
                    {
                        var arg = value.FixedArguments[i];
                        r[i] = DecodeValue(arg.Type, arg.Value);
                    }
                    fixedArguments = r;
                }

                if (value.NamedArguments.IsEmpty)
                {
                    namedArguments = Array.Empty <MetadataAttributeNamedArgument>();
                }
                else
                {
                    var r = new MetadataAttributeNamedArgument[value.NamedArguments.Length];
                    for (var i = 0; i < r.Length; i++)
                    {
                        var arg = value.NamedArguments[i];
                        r[i] = new MetadataAttributeNamedArgument(arg.Name, DecodeValue(arg.Type, arg.Value));
                    }
                    namedArguments = r;
                }
            }
コード例 #2
0
            private MetadataAttributeValue DecodeValue(MetadataTypeReference type, object value)
            {
                if (value == null)
                {
                    return(ConstantAttributeValue.Null);
                }
                if (type is PrimitiveTypeReference)
                {
                    return(new ConstantAttributeValue(MetadataConstantValue.FromObject(value)));
                }
                if (value is MetadataTypeReference typeValue)
                {
                    return(new TypeAttributeValue(typeValue));
                }
                if (type is ArrayTypeReference arrayType)
                {
                    var items  = (ImmutableArray <CustomAttributeTypedArgument <MetadataTypeReference> >)value;
                    var values = new MetadataAttributeValue[items.Length];

                    for (var i = 0; i < values.Length; i++)
                    {
                        var item = items[i];
                        values[i] = DecodeValue(item.Type, item.Value);
                    }

                    return(new ArrayAttributeValue(arrayType, values));
                }

                // The only other thing DecodeValue can give us is an enum
                return(new EnumAttributeValue(type, MetadataConstantValue.FromObject(value)));
            }
コード例 #3
0
        private CommonPositionalArgument GetPositionalArgument(MetadataAttributeValue argument, int position)
        {
            if (argument.IsBadValue())
            {
                return(null);
            }

            return(new CommonPositionalArgument(position, GetCommonType(argument.Type), GetValue(argument)));
        }
        private static string GetParameterName(MetadataAttributeValue x)
        {
            var typeArgument = x.Value as IMetadataClassType;

            if (typeArgument != null)
            {
                return(new ClrTypeName(typeArgument.Type.FullyQualifiedName).ShortName);
            }

            return((string)x.Value);
        }
コード例 #5
0
        private object GetValue(MetadataAttributeValue argument)
        {
            Trace.Assert(!argument.IsBadValue(), "Values in MetadataCustomAttributes can be bad.");

            if (argument.ValuesArray != null)
            {
                return(argument.ValuesArray.Select(GetValue).ToArray());
            }
            if (argument.Value is IMetadataType)
            {
                return(GetCommonType(((IMetadataType)argument.Value)));
            }
            return(argument.Value);
        }
コード例 #6
0
        private object GetValue(MetadataAttributeValue argument)
        {
            Trace.Assert(!argument.IsBadValue(), "Values in MetadataCustomAttributes can be bad.");

              if (argument.ValuesArray != null)
            return argument.ValuesArray.Select(GetValue).ToArray();
              if (argument.Value is IMetadataType)
            return GetCommonType(((IMetadataType) argument.Value));
              return argument.Value;
        }
コード例 #7
0
        private CommonPositionalArgument GetPositionalArgument(MetadataAttributeValue argument, int position)
        {
            if (argument.IsBadValue())
            return null;

              return new CommonPositionalArgument(position, GetCommonType(argument.Type), GetValue(argument));
        }
コード例 #8
0
 public MetadataAttributeNamedArgument(string name, MetadataAttributeValue value)
 {
     Name  = name ?? throw new ArgumentNullException(nameof(name));
     Value = value ?? throw new ArgumentNullException(nameof(value));
 }