diff options
author | Stephane Delcroix <stephane@delcroix.org> | 2017-04-25 20:15:36 +0200 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2017-04-25 11:15:36 -0700 |
commit | 9631ec2d8bbac8b837955af238f322c1023af097 (patch) | |
tree | 8646155d78f847705e4570423af839579be146b1 /Xamarin.Forms.Build.Tasks | |
parent | 17c7d8ed5c4c629b5a235bad4c66400e534f0615 (diff) | |
download | xamarin-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.cs | 19 |
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; |