diff --git a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Replacements/TypeListConverter.cs b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Replacements/TypeListConverter.cs index ed6efa8bac2..832f0cbf85e 100644 --- a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Replacements/TypeListConverter.cs +++ b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Replacements/TypeListConverter.cs @@ -4,50 +4,26 @@ using System.ComponentModel; using System.Globalization; -using XAML3 = System.Windows.Markup; namespace System.Xaml.Replacements { - // Not sure if this type converter is used at all. - // we need to either make this a useful type converter or remove the code. - /// /// TypeConverter for System.Type[] /// internal class TypeListConverter : TypeConverter { - private static readonly TypeTypeConverter typeTypeConverter = new TypeTypeConverter(); public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) - { - return sourceType == typeof(string); - } + => sourceType == typeof(string); public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string typeList = (string)value; - if (null != context) + if (context != null) { - // Consider HashMap(int, int), HashMap(int, int) - string[] tl = StringHelpers.SplitTypeList(typeList); - Type[] types = new Type[tl.Length]; - for (int i = 0; i < tl.Length; i++) - { - types[i] = (Type)typeTypeConverter.ConvertFrom(context, TypeConverterHelper.InvariantEnglishUS, tl[i]); - } - return types; + throw new NullReferenceException(); } - return base.ConvertFrom(context, culture, value); - } - - } - - internal static class StringHelpers - { - // split top level types and strip out whitespace - public static string[] SplitTypeList(string typeList) - { - return null; + return base.ConvertFrom(context, culture, value); } } } diff --git a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Replacements/TypeTypeConverter.cs b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Replacements/TypeTypeConverter.cs index 456a511c1e2..91adae87973 100644 --- a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Replacements/TypeTypeConverter.cs +++ b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Replacements/TypeTypeConverter.cs @@ -4,8 +4,8 @@ using System.ComponentModel; using System.Globalization; +using System.Windows.Markup; using System.Xaml.Schema; -using XAML3 = System.Windows.Markup; namespace System.Xaml.Replacements { @@ -15,22 +15,16 @@ namespace System.Xaml.Replacements internal class TypeTypeConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) - { - return sourceType == typeof(string); - } + => sourceType == typeof(string); public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { - string typeName = value as string; - - if (null != context && null != typeName) + if (context != null && value is string typeName) { - var typeResolver = GetService(context); - - if (null != typeResolver) + IXamlTypeResolver typeResolver = GetService(context); + if (typeResolver != null) { - Type type = typeResolver.Resolve(typeName); - return type; + return typeResolver.Resolve(typeName); } } @@ -38,15 +32,11 @@ public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo c } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - return destinationType == typeof(string); - } + => destinationType == typeof(string); public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { - Type type = value as Type; - - if (context != null && type != null && destinationType == typeof(string)) + if (context != null && value is Type type && destinationType == typeof(string)) { string result = ConvertTypeToString(context, type); if (result != null) @@ -54,12 +44,13 @@ public override object ConvertTo(ITypeDescriptorContext context, CultureInfo cul return result; } } + return base.ConvertTo(context, culture, value, destinationType); } private static string ConvertTypeToString(ITypeDescriptorContext context, Type type) { - var schemaContextProvider = GetService(context); + IXamlSchemaContextProvider schemaContextProvider = GetService(context); if (schemaContextProvider == null) { return null; @@ -68,17 +59,17 @@ private static string ConvertTypeToString(ITypeDescriptorContext context, Type t { return null; } + XamlType xamlType = schemaContextProvider.SchemaContext.GetXamlType(type); if (xamlType == null) { return null; } + return XamlTypeTypeConverter.ConvertXamlTypeToString(context, xamlType); } private static TService GetService(ITypeDescriptorContext context) where TService : class - { - return context.GetService(typeof(TService)) as TService; - } + => context.GetService(typeof(TService)) as TService; } } diff --git a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/BuiltInValueConverter.cs b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/BuiltInValueConverter.cs index 57c205a9804..8a75881459f 100644 --- a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/BuiltInValueConverter.cs +++ b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/BuiltInValueConverter.cs @@ -7,7 +7,6 @@ using System.Globalization; using System.Windows.Markup; using System.Xaml.Replacements; -using TypeListConverter = System.Xaml.Replacements.TypeListConverter; namespace System.Xaml.Schema { @@ -22,15 +21,9 @@ internal BuiltInValueConverter(Type converterType, Func factory) _factory = factory; } - internal override bool IsPublic - { - get { return true; } - } + internal override bool IsPublic => true; - protected override TConverterBase CreateInstance() - { - return _factory.Invoke(); - } + protected override TConverterBase CreateInstance() => _factory.Invoke(); } internal static class BuiltInValueConverter @@ -62,52 +55,16 @@ internal static class BuiltInValueConverter private static XamlValueConverter s_Uri; internal static XamlValueConverter Int32 - { - get - { - if (s_Int32 is null) - { - s_Int32 = new BuiltInValueConverter(typeof(Int32Converter), () => new Int32Converter()); - } - return s_Int32; - } - } + => s_Int32 ??= new BuiltInValueConverter(typeof(Int32Converter), () => new Int32Converter()); internal static XamlValueConverter String - { - get - { - if (s_String is null) - { - s_String = new BuiltInValueConverter(typeof(StringConverter), () => new StringConverter()); - } - return s_String; - } - } + => s_String ??= new BuiltInValueConverter(typeof(StringConverter), () => new StringConverter()); internal static XamlValueConverter Object - { - get - { - if (s_Object is null) - { - s_Object = new XamlValueConverter(null, XamlLanguage.Object); - } - return s_Object; - } - } + => s_Object ??= new XamlValueConverter(null, XamlLanguage.Object); internal static XamlValueConverter Event - { - get - { - if (s_Delegate is null) - { - s_Delegate = new BuiltInValueConverter(typeof(EventConverter), () => new EventConverter()); - } - return s_Delegate; - } - } + => s_Delegate ??= new BuiltInValueConverter(typeof(EventConverter), () => new EventConverter()); internal static XamlValueConverter GetTypeConverter(Type targetType) { @@ -125,163 +82,83 @@ internal static XamlValueConverter GetTypeConverter(Type targetTy } if (typeof(Int16) == targetType) { - if (s_Int16 is null) - { - s_Int16 = new BuiltInValueConverter(typeof(Int16Converter), () => new Int16Converter()); - } - return s_Int16; + return s_Int16 ??= new BuiltInValueConverter(typeof(Int16Converter), () => new Int16Converter()); } if (typeof(Int64) == targetType) { - if (s_Int64 is null) - { - s_Int64 = new BuiltInValueConverter(typeof(Int64Converter), () => new Int64Converter()); - } - return s_Int64; + return s_Int64 ??= new BuiltInValueConverter(typeof(Int64Converter), () => new Int64Converter()); } if (typeof(UInt32) == targetType) { - if (s_UInt32 is null) - { - s_UInt32 = new BuiltInValueConverter(typeof(UInt32Converter), () => new UInt32Converter()); - } - return s_UInt32; + return s_UInt32 ??= new BuiltInValueConverter(typeof(UInt32Converter), () => new UInt32Converter()); } if (typeof(UInt16) == targetType) { - if (s_UInt16 is null) - { - s_UInt16 = new BuiltInValueConverter(typeof(UInt16Converter), () => new UInt16Converter()); - } - return s_UInt16; + return s_UInt16 ??= new BuiltInValueConverter(typeof(UInt16Converter), () => new UInt16Converter()); } if (typeof(UInt64) == targetType) { - if (s_UInt64 is null) - { - s_UInt64 = new BuiltInValueConverter(typeof(UInt64Converter), () => new UInt64Converter()); - } - return s_UInt64; + return s_UInt64 ??= new BuiltInValueConverter(typeof(UInt64Converter), () => new UInt64Converter()); } if (typeof(Boolean) == targetType) { - if (s_Boolean is null) - { - s_Boolean = new BuiltInValueConverter(typeof(BooleanConverter), () => new BooleanConverter()); - } - return s_Boolean; + return s_Boolean ??= new BuiltInValueConverter(typeof(BooleanConverter), () => new BooleanConverter()); } if (typeof(Double) == targetType) { - if (s_Double is null) - { - s_Double = new BuiltInValueConverter(typeof(DoubleConverter), () => new DoubleConverter()); - } - return s_Double; + return s_Double ??= new BuiltInValueConverter(typeof(DoubleConverter), () => new DoubleConverter()); } if (typeof(Single) == targetType) { - if (s_Single is null) - { - s_Single = new BuiltInValueConverter(typeof(SingleConverter), () => new SingleConverter()); - } - return s_Single; + return s_Single ??= new BuiltInValueConverter(typeof(SingleConverter), () => new SingleConverter()); } if (typeof(Byte) == targetType) { - if (s_Byte is null) - { - s_Byte = new BuiltInValueConverter(typeof(ByteConverter), () => new ByteConverter()); - } - return s_Byte; + return s_Byte ??= new BuiltInValueConverter(typeof(ByteConverter), () => new ByteConverter()); } if (typeof(SByte) == targetType) { - if (s_SByte is null) - { - s_SByte = new BuiltInValueConverter(typeof(SByteConverter), () => new SByteConverter()); - } - return s_SByte; + return s_SByte ??= new BuiltInValueConverter(typeof(SByteConverter), () => new SByteConverter()); } if (typeof(Char) == targetType) { - if (s_Char is null) - { - s_Char = new BuiltInValueConverter(typeof(CharConverter), () => new CharConverter()); - } - return s_Char; + return s_Char ??= new BuiltInValueConverter(typeof(CharConverter), () => new CharConverter()); } if (typeof(Decimal) == targetType) { - if (s_Decimal is null) - { - s_Decimal = new BuiltInValueConverter(typeof(DecimalConverter), () => new DecimalConverter()); - } - return s_Decimal; + return s_Decimal ??= new BuiltInValueConverter(typeof(DecimalConverter), () => new DecimalConverter()); } if (typeof(TimeSpan) == targetType) { - if (s_TimeSpan is null) - { - s_TimeSpan = new BuiltInValueConverter(typeof(TimeSpanConverter), () => new TimeSpanConverter()); - } - return s_TimeSpan; + return s_TimeSpan ??= new BuiltInValueConverter(typeof(TimeSpanConverter), () => new TimeSpanConverter()); } if (typeof(Guid) == targetType) { - if (s_Guid is null) - { - s_Guid = new BuiltInValueConverter(typeof(GuidConverter), () => new GuidConverter()); - } - return s_Guid; + return s_Guid ??= new BuiltInValueConverter(typeof(GuidConverter), () => new GuidConverter()); } if (typeof(Type).IsAssignableFrom(targetType)) { - if (s_Type is null) - { - s_Type = new BuiltInValueConverter(typeof(TypeTypeConverter), () => new TypeTypeConverter()); - } - return s_Type; + return s_Type ??= new BuiltInValueConverter(typeof(System.Xaml.Replacements.TypeTypeConverter), () => new System.Xaml.Replacements.TypeTypeConverter()); } if (typeof(Type[]).IsAssignableFrom(targetType)) { - if (s_TypeList is null) - { - s_TypeList = new BuiltInValueConverter(typeof(TypeListConverter), () => new TypeListConverter()); - } - return s_TypeList; + return s_TypeList ??= new BuiltInValueConverter(typeof(System.Xaml.Replacements.TypeListConverter), () => new System.Xaml.Replacements.TypeListConverter()); } if (typeof(DateTime) == targetType) { - if (s_DateTime is null) - { - s_DateTime = new BuiltInValueConverter(typeof(DateTimeConverter2), () => new DateTimeConverter2()); - } - return s_DateTime; + return s_DateTime ??= new BuiltInValueConverter(typeof(System.Xaml.Replacements.DateTimeConverter2), () => new System.Xaml.Replacements.DateTimeConverter2()); } if (typeof(DateTimeOffset) == targetType) { - if (s_DateTimeOffset is null) - { - s_DateTimeOffset = new BuiltInValueConverter(typeof(DateTimeOffsetConverter2), () => new DateTimeOffsetConverter2()); - } - return s_DateTimeOffset; + return s_DateTimeOffset ??= new BuiltInValueConverter(typeof(System.Xaml.Replacements.DateTimeOffsetConverter2), () => new System.Xaml.Replacements.DateTimeOffsetConverter2()); } if (typeof(CultureInfo).IsAssignableFrom(targetType)) { - if (s_CultureInfo is null) - { - s_CultureInfo = new BuiltInValueConverter(typeof(CultureInfoConverter), () => new CultureInfoConverter()); - } - return s_CultureInfo; + return s_CultureInfo ??= new BuiltInValueConverter(typeof(CultureInfoConverter), () => new CultureInfoConverter()); } if (typeof(Delegate).IsAssignableFrom(targetType)) { - if (s_Delegate is null) - { - s_Delegate = new BuiltInValueConverter(typeof(EventConverter), () => new EventConverter()); - } - return s_Delegate; + return s_Delegate ??= new BuiltInValueConverter(typeof(EventConverter), () => new EventConverter()); } if (typeof(Uri).IsAssignableFrom(targetType)) { @@ -317,8 +194,10 @@ internal static XamlValueConverter GetTypeConverter(Type targetTy s_Uri = new BuiltInValueConverter(stdConverter.GetType(), () => TypeDescriptor.GetConverter(typeof(Uri))); } } + return s_Uri; } + return null; } @@ -332,8 +211,10 @@ internal static XamlValueConverter GetValueSerializer(Type targ ValueSerializer stringSerializer = ValueSerializer.GetSerializerFor(typeof(string)); s_StringSerializer = new BuiltInValueConverter(stringSerializer.GetType(), () => stringSerializer); } + return s_StringSerializer; } + return null; } } diff --git a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XamlValueConverter.cs b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XamlValueConverter.cs index ffad632db97..68e812331e0 100644 --- a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XamlValueConverter.cs +++ b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XamlValueConverter.cs @@ -29,8 +29,9 @@ public XamlValueConverter(Type converterType, XamlType targetType, string name) { if (converterType == null && targetType == null && name == null) { - throw new ArgumentException(SR.Format(SR.ArgumentRequired, "converterType, targetType, name")); + throw new ArgumentException(SR.Format(SR.ArgumentRequired, $"{nameof(converterType)}, {nameof(targetType)}, {nameof(name)}")); } + ConverterType = converterType; TargetType = targetType; Name = name ?? GetDefaultName(); @@ -45,14 +46,12 @@ public TConverterBase ConverterInstance Interlocked.CompareExchange(ref _instance, CreateInstance(), null); _instanceIsSet = true; } + return _instance; } } - public override string ToString() - { - return Name; - } + public override string ToString() => Name; internal virtual bool IsPublic { @@ -62,6 +61,7 @@ internal virtual bool IsPublic { _isPublic = (ConverterType == null || ConverterType.IsVisible) ? ThreeValuedBool.True : ThreeValuedBool.False; } + return _isPublic == ThreeValuedBool.True; } } @@ -80,8 +80,10 @@ protected virtual TConverterBase CreateInstance() throw new XamlSchemaException(SR.Format(SR.ConverterMustDeriveFromBase, ConverterType, typeof(TConverterBase))); } + return (TConverterBase)Activator.CreateInstance(ConverterType, null); } + return null; } @@ -93,13 +95,13 @@ private string GetDefaultName() { return ConverterType.Name + "(" + TargetType.Name + ")"; } + return ConverterType.Name; } + return TargetType.Name; } - #region IEquatable> Members - public override bool Equals(object obj) { XamlValueConverter other = obj as XamlValueConverter; @@ -107,6 +109,7 @@ public override bool Equals(object obj) { return false; } + return this == other; } @@ -121,13 +124,11 @@ public override int GetHashCode() { result ^= TargetType.GetHashCode(); } + return result; } - public bool Equals(XamlValueConverter other) - { - return this == other; - } + public bool Equals(XamlValueConverter other) => this == other; public static bool operator ==(XamlValueConverter converter1, XamlValueConverter converter2) { @@ -139,16 +140,13 @@ public bool Equals(XamlValueConverter other) { return false; } + return converter1.ConverterType == converter2.ConverterType && converter1.TargetType == converter2.TargetType && converter1.Name == converter2.Name; } public static bool operator !=(XamlValueConverter converter1, XamlValueConverter converter2) - { - return !(converter1 == converter2); - } - - #endregion + => !(converter1 == converter2); } } diff --git a/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/Markup/TypeTypeConverter.cs b/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/Markup/TypeTypeConverter.cs index d0c9ff560bb..afa84668952 100644 --- a/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/Markup/TypeTypeConverter.cs +++ b/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/Markup/TypeTypeConverter.cs @@ -18,19 +18,14 @@ internal class TypeTypeConverter : TypeConverter { #if !PBTCOMPILER public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) - { - return sourceType == typeof(string); - } + => sourceType == typeof(string); public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { - string typeName = value as string; - - if (null != context && typeName != null) + if (context != null && value is string typeName) { IXamlTypeResolver xamlTypeResolver = (IXamlTypeResolver)context.GetService(typeof(IXamlTypeResolver)); - - if (null != xamlTypeResolver) + if (xamlTypeResolver != null) { return xamlTypeResolver.Resolve(typeName); }