summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs
diff options
context:
space:
mode:
authorStephane Delcroix <stephane@delcroix.org>2016-08-02 22:24:50 +0200
committerJason Smith <jason.smith@xamarin.com>2016-08-02 13:24:50 -0700
commit89199205e48fe3fdf4336fe7e0f8af7dc0b662de (patch)
tree42e4d3a8f53ecd45d95b290bcdedd809eb046e4c /Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs
parentac44cf9dec53b3b8be1836f20479f01820f3667f (diff)
downloadxamarin-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.cs21
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;