diff options
author | Stephane Delcroix <stephane@delcroix.org> | 2016-08-02 22:24:50 +0200 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-08-02 13:24:50 -0700 |
commit | 89199205e48fe3fdf4336fe7e0f8af7dc0b662de (patch) | |
tree | 42e4d3a8f53ecd45d95b290bcdedd809eb046e4c /Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs | |
parent | ac44cf9dec53b3b8be1836f20479f01820f3667f (diff) | |
download | xamarin-forms-89199205e48fe3fdf4336fe7e0f8af7dc0b662de.tar.gz xamarin-forms-89199205e48fe3fdf4336fe7e0f8af7dc0b662de.tar.bz2 xamarin-forms-89199205e48fe3fdf4336fe7e0f8af7dc0b662de.zip |
Xaml convert on add (#273)
* [Xaml] add test for conversion on Set and Add
* [Xaml] Fix conversion on Add()
* [XamlC] use op_implicit before Add()
Diffstat (limited to 'Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs')
-rw-r--r-- | Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs b/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs index 89a31765..60e52c80 100644 --- a/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs +++ b/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs @@ -200,6 +200,27 @@ namespace Xamarin.Forms.Build.Tasks yield return tuple; } + public static MethodReference GetImplicitOperatorTo(this TypeReference fromType, TypeReference toType, ModuleDefinition module) + { + var implicitOperators = fromType.GetMethods(md => md.IsPublic && md.IsStatic && md.IsSpecialName && md.Name == "op_Implicit", + module).ToList(); + if (implicitOperators.Any()) { + foreach (var op in implicitOperators) { + var cast = op.Item1; + var opDeclTypeRef = op.Item2; + var castDef = module.Import(cast).ResolveGenericParameters(opDeclTypeRef, module); + var returnType = castDef.ReturnType; + if (returnType.IsGenericParameter) + returnType = ((GenericInstanceType)opDeclTypeRef).GenericArguments [((GenericParameter)returnType).Position]; + if (returnType.FullName == toType.FullName && + cast.Parameters [0].ParameterType.Name == fromType.Name) { + return castDef; + } + } + } + return null; + } + public static TypeReference ResolveGenericParameters(this TypeReference self, TypeReference declaringTypeReference) { var genericself = self as GenericInstanceType; |