diff options
author | Stephane Delcroix <stephane@delcroix.org> | 2016-12-23 08:50:02 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-23 08:50:02 +0100 |
commit | 2c91b0facd2a25d0de9a283b44cf818329d4c06f (patch) | |
tree | a1e659906258f2fc5c8c67d825a229ecf82db67b /Xamarin.Forms.Build.Tasks | |
parent | 0c87fcff41bef841f83ef62de5cdc3d821980d33 (diff) | |
download | xamarin-forms-2c91b0facd2a25d0de9a283b44cf818329d4c06f.tar.gz xamarin-forms-2c91b0facd2a25d0de9a283b44cf818329d4c06f.tar.bz2 xamarin-forms-2c91b0facd2a25d0de9a283b44cf818329d4c06f.zip |
[XamlC] import members on x:Static and factories (#642)
Diffstat (limited to 'Xamarin.Forms.Build.Tasks')
4 files changed, 16 insertions, 8 deletions
diff --git a/Xamarin.Forms.Build.Tasks/CompiledMarkupExtensions/StaticExtension.cs b/Xamarin.Forms.Build.Tasks/CompiledMarkupExtensions/StaticExtension.cs index 014fb827..464eeac4 100644 --- a/Xamarin.Forms.Build.Tasks/CompiledMarkupExtensions/StaticExtension.cs +++ b/Xamarin.Forms.Build.Tasks/CompiledMarkupExtensions/StaticExtension.cs @@ -26,7 +26,7 @@ namespace Xamarin.Forms.Build.Tasks var typename = member.Substring(0, dotIdx); var membername = member.Substring(dotIdx + 1); - var typeRef = GetTypeReference(typename, module, node); + var typeRef = module.Import(GetTypeReference(typename, module, node)); var fieldRef = GetFieldReference(typeRef, membername, module); var propertyDef = GetPropertyDefinition(typeRef, membername, module); @@ -75,7 +75,7 @@ namespace Xamarin.Forms.Build.Tasks } memberRef = propertyDef.PropertyType; - var getterDef = propertyDef.GetMethod; + var getterDef = module.Import(propertyDef.GetMethod); return new [] { Instruction.Create(OpCodes.Call, getterDef) }; } diff --git a/Xamarin.Forms.Build.Tasks/CreateObjectVisitor.cs b/Xamarin.Forms.Build.Tasks/CreateObjectVisitor.cs index ac530216..ff8f84f9 100644 --- a/Xamarin.Forms.Build.Tasks/CreateObjectVisitor.cs +++ b/Xamarin.Forms.Build.Tasks/CreateObjectVisitor.cs @@ -48,7 +48,7 @@ namespace Xamarin.Forms.Build.Tasks public void Visit(ElementNode node, INode parentNode) { - var typeref = node.XmlType.GetTypeReference(Module, node); + var typeref = Module.Import(node.XmlType.GetTypeReference(Module, node)); TypeDefinition typedef = typeref.Resolve(); if (IsXaml2009LanguagePrimitive(node)) { @@ -65,6 +65,7 @@ namespace Xamarin.Forms.Build.Tasks var markupProvider = new StaticExtension(); var il = markupProvider.ProvideValue(node, Module, Context, out typeref); + typeref = Module.Import(typeref); var vardef = new VariableDefinition(typeref); Context.Variables [node] = vardef; @@ -154,8 +155,7 @@ namespace Xamarin.Forms.Build.Tasks Context.IL.Emit(OpCodes.Call, implicitOperator); Context.IL.Emit(OpCodes.Stloc, vardef); } else if (factorymethodinforef != null) { - var factory = Module.Import(factorymethodinforef); - Context.IL.Emit(OpCodes.Call, factory); + Context.IL.Emit(OpCodes.Call, Module.Import(factorymethodinforef)); Context.IL.Emit(OpCodes.Stloc, vardef); } else if (!typedef.IsValueType) { var ctor = Module.Import(ctorinforef); diff --git a/Xamarin.Forms.Build.Tasks/MethodReferenceExtensions.cs b/Xamarin.Forms.Build.Tasks/MethodReferenceExtensions.cs index 13b4aafc..e3b2f3ab 100644 --- a/Xamarin.Forms.Build.Tasks/MethodReferenceExtensions.cs +++ b/Xamarin.Forms.Build.Tasks/MethodReferenceExtensions.cs @@ -13,9 +13,9 @@ namespace Xamarin.Forms.Build.Tasks if (declaringTypeRef == null) throw new ArgumentNullException(nameof(declaringTypeRef)); - var reference = new MethodReference(self.Name, self.ReturnType) + var reference = new MethodReference(self.Name, module.Import(self.ReturnType)) { - DeclaringType = declaringTypeRef, + DeclaringType = module.Import(declaringTypeRef), HasThis = self.HasThis, ExplicitThis = self.ExplicitThis, CallingConvention = self.CallingConvention diff --git a/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs b/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs index 9e1cc165..a347c2ff 100644 --- a/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs +++ b/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs @@ -21,7 +21,15 @@ namespace Xamarin.Forms.Build.Tasks public bool Equals(TypeReference x, TypeReference y) { - return GetAssembly(x) == GetAssembly(y) && x.FullName == y.FullName; + if (x.FullName != y.FullName) + return false; + var xasm = GetAssembly(x); + if (xasm.StartsWith("System.Runtime", StringComparison.Ordinal) || xasm.StartsWith("mscorlib", StringComparison.Ordinal)) + xasm = "mscorlib"; + var yasm = GetAssembly(y); + if (yasm.StartsWith("System.Runtime", StringComparison.Ordinal) || yasm.StartsWith("mscorlib", StringComparison.Ordinal)) + yasm = "mscorlib"; + return xasm == yasm; } public int GetHashCode(TypeReference obj) |