summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Build.Tasks
diff options
context:
space:
mode:
authorStephane Delcroix <stephane@delcroix.org>2017-04-25 20:15:36 +0200
committerJason Smith <jason.smith@xamarin.com>2017-04-25 11:15:36 -0700
commit9631ec2d8bbac8b837955af238f322c1023af097 (patch)
tree8646155d78f847705e4570423af839579be146b1 /Xamarin.Forms.Build.Tasks
parent17c7d8ed5c4c629b5a235bad4c66400e534f0615 (diff)
downloadxamarin-forms-9631ec2d8bbac8b837955af238f322c1023af097.tar.gz
xamarin-forms-9631ec2d8bbac8b837955af238f322c1023af097.tar.bz2
xamarin-forms-9631ec2d8bbac8b837955af238f322c1023af097.zip
[XamlC] Check param type in op_Implicit (#876)
Diffstat (limited to 'Xamarin.Forms.Build.Tasks')
-rw-r--r--Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs19
1 files changed, 15 insertions, 4 deletions
diff --git a/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs b/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs
index bc26b5ec..d40b5be4 100644
--- a/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs
+++ b/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs
@@ -249,9 +249,16 @@ namespace Xamarin.Forms.Build.Tasks
if (TypeRefComparer.Default.Equals(fromType, toType))
return null;
- var implicitOperatorsOnFromType = fromType.GetMethods(md => md.IsPublic && md.IsStatic && md.IsSpecialName && md.Name == "op_Implicit", module);
- var implicitOperatorsOnToType = toType.GetMethods(md => md.IsPublic && md.IsStatic && md.IsSpecialName && md.Name == "op_Implicit", module);
+ var implicitOperatorsOnFromType = fromType.GetMethods(md => md.IsPublic
+ && md.IsStatic
+ && md.IsSpecialName
+ && md.Name == "op_Implicit", module);
+ var implicitOperatorsOnToType = toType.GetMethods(md => md.IsPublic
+ && md.IsStatic
+ && md.IsSpecialName
+ && md.Name == "op_Implicit", module);
var implicitOperators = implicitOperatorsOnFromType.Concat(implicitOperatorsOnToType).ToList();
+
if (implicitOperators.Any()) {
foreach (var op in implicitOperators) {
var cast = op.Item1;
@@ -260,8 +267,12 @@ namespace Xamarin.Forms.Build.Tasks
var returnType = castDef.ReturnType;
if (returnType.IsGenericParameter)
returnType = ((GenericInstanceType)opDeclTypeRef).GenericArguments [((GenericParameter)returnType).Position];
- if (returnType.InheritsFromOrImplements(toType))
- return castDef;
+ if (!returnType.InheritsFromOrImplements(toType))
+ continue;
+ var paramType = cast.Parameters[0].ParameterType;
+ if (!fromType.InheritsFromOrImplements(paramType))
+ continue;
+ return castDef;
}
}
return null;