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; } }
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))); }
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); }
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); }
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; }
private CommonPositionalArgument GetPositionalArgument(MetadataAttributeValue argument, int position) { if (argument.IsBadValue()) return null; return new CommonPositionalArgument(position, GetCommonType(argument.Type), GetValue(argument)); }
public MetadataAttributeNamedArgument(string name, MetadataAttributeValue value) { Name = name ?? throw new ArgumentNullException(nameof(name)); Value = value ?? throw new ArgumentNullException(nameof(value)); }