diff options
Diffstat (limited to 'Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs')
-rw-r--r-- | Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs | 180 |
1 files changed, 90 insertions, 90 deletions
diff --git a/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs b/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs index 8d087ab7..608fab5b 100644 --- a/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs +++ b/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs @@ -128,14 +128,14 @@ namespace Xamarin.Forms.Build.Tasks // Collection element, implicit content, or implicit collection element. string contentProperty; var parentVar = Context.Variables[(IElementNode)parentNode]; - if (parentVar.VariableType.ImplementsInterface(Module.Import(typeof (IEnumerable)))) + if (parentVar.VariableType.ImplementsInterface(Module.ImportReference(typeof (IEnumerable)))) { var elementType = parentVar.VariableType; if (elementType.FullName != "Xamarin.Forms.ResourceDictionary" && elementType.Resolve().BaseType.FullName != "Xamarin.Forms.ResourceDictionary") { var adderTuple = elementType.GetMethods(md => md.Name == "Add" && md.Parameters.Count == 1, Module).First(); - var adderRef = Module.Import(adderTuple.Item1); - adderRef = Module.Import(adderRef.ResolveGenericParameters(adderTuple.Item2, Module)); + var adderRef = Module.ImportReference(adderTuple.Item1); + adderRef = Module.ImportReference(adderRef.ResolveGenericParameters(adderTuple.Item2, Module)); Context.IL.Emit(OpCodes.Ldloc, parentVar); Context.IL.Emit(OpCodes.Ldloc, vardef); @@ -179,13 +179,13 @@ namespace Xamarin.Forms.Build.Tasks if (property != null && (propertyGetter = property.GetMethod) != null && propertyGetter.IsPublic) { - var propertyGetterRef = Module.Import(propertyGetter); - propertyGetterRef = Module.Import(propertyGetterRef.ResolveGenericParameters(propertyDeclaringType, Module)); + var propertyGetterRef = Module.ImportReference(propertyGetter); + propertyGetterRef = Module.ImportReference(propertyGetterRef.ResolveGenericParameters(propertyDeclaringType, Module)); var propertyType = propertyGetterRef.ReturnType.ResolveGenericParameters(propertyDeclaringType); var adderTuple = propertyType.GetMethods(md => md.Name == "Add" && md.Parameters.Count == 1, Module).First(); - var adderRef = Module.Import(adderTuple.Item1); - adderRef = Module.Import(adderRef.ResolveGenericParameters(adderTuple.Item2, Module)); + var adderRef = Module.ImportReference(adderTuple.Item1); + adderRef = Module.ImportReference(adderRef.ResolveGenericParameters(adderTuple.Item2, Module)); Context.IL.Emit(OpCodes.Ldloc, parent); Context.IL.Emit(OpCodes.Callvirt, propertyGetterRef); @@ -256,23 +256,23 @@ namespace Xamarin.Forms.Build.Tasks { var markExt = markupExtension.Resolve(); var provideValueInfo = markExt.Methods.First(md => md.Name == "ProvideValue"); - var provideValue = module.Import(provideValueInfo); + var provideValue = module.ImportReference(provideValueInfo); provideValue = - module.Import(provideValue.ResolveGenericParameters(markupExtension, module)); + module.ImportReference(provideValue.ResolveGenericParameters(markupExtension, module)); var typeNode = node.Properties[new XmlName("", "Type")]; TypeReference arrayTypeRef; if (context.TypeExtensions.TryGetValue(typeNode, out arrayTypeRef)) - vardefref.VariableDefinition = new VariableDefinition(module.Import(arrayTypeRef.MakeArrayType())); + vardefref.VariableDefinition = new VariableDefinition(module.ImportReference(arrayTypeRef.MakeArrayType())); else - vardefref.VariableDefinition = new VariableDefinition(module.Import(genericArguments.First())); + vardefref.VariableDefinition = new VariableDefinition(module.ImportReference(genericArguments.First())); yield return Instruction.Create(OpCodes.Ldloc, context.Variables[node]); foreach (var instruction in node.PushServiceProvider(context, bpRef, propertyRef, propertyDeclaringTypeRef)) yield return instruction; yield return Instruction.Create(OpCodes.Callvirt, provideValue); if (arrayTypeRef != null) - yield return Instruction.Create(OpCodes.Castclass, module.Import(arrayTypeRef.MakeArrayType())); + yield return Instruction.Create(OpCodes.Castclass, module.ImportReference(arrayTypeRef.MakeArrayType())); yield return Instruction.Create(OpCodes.Stloc, vardefref.VariableDefinition); } else if (vardefref.VariableDefinition.VariableType.ImplementsGenericInterface("Xamarin.Forms.Xaml.IMarkupExtension`1", @@ -284,22 +284,22 @@ namespace Xamarin.Forms.Build.Tasks var markExt = markupExtension.Resolve(); var provideValueInfo = markExt.Methods.First(md => md.Name == "ProvideValue"); - var provideValue = module.Import(provideValueInfo); + var provideValue = module.ImportReference(provideValueInfo); provideValue = - module.Import(provideValue.ResolveGenericParameters(markupExtension, module)); + module.ImportReference(provideValue.ResolveGenericParameters(markupExtension, module)); - vardefref.VariableDefinition = new VariableDefinition(module.Import(genericArguments.First())); + vardefref.VariableDefinition = new VariableDefinition(module.ImportReference(genericArguments.First())); yield return Instruction.Create(OpCodes.Ldloc, context.Variables[node]); foreach (var instruction in node.PushServiceProvider(context, bpRef, propertyRef, propertyDeclaringTypeRef)) yield return instruction; yield return Instruction.Create(OpCodes.Callvirt, provideValue); yield return Instruction.Create(OpCodes.Stloc, vardefref.VariableDefinition); } - else if (context.Variables[node].VariableType.ImplementsInterface(module.Import(typeof (IMarkupExtension)))) + else if (context.Variables[node].VariableType.ImplementsInterface(module.ImportReference(typeof (IMarkupExtension)))) { - var markExt = module.Import(typeof (IMarkupExtension)).Resolve(); + var markExt = module.ImportReference(typeof (IMarkupExtension)).Resolve(); var provideValueInfo = markExt.Methods.First(md => md.Name == "ProvideValue"); - var provideValue = module.Import(provideValueInfo); + var provideValue = module.ImportReference(provideValueInfo); vardefref.VariableDefinition = new VariableDefinition(module.TypeSystem.Object); yield return Instruction.Create(OpCodes.Ldloc, context.Variables[node]); @@ -308,11 +308,11 @@ namespace Xamarin.Forms.Build.Tasks yield return Instruction.Create(OpCodes.Callvirt, provideValue); yield return Instruction.Create(OpCodes.Stloc, vardefref.VariableDefinition); } - else if (context.Variables[node].VariableType.ImplementsInterface(module.Import(typeof (IValueProvider)))) + else if (context.Variables[node].VariableType.ImplementsInterface(module.ImportReference(typeof (IValueProvider)))) { var valueProviderType = context.Variables[node].VariableType; //If the IValueProvider has a ProvideCompiledAttribute that can be resolved, shortcut this - var compiledValueProviderName = valueProviderType?.GetCustomAttribute(module.Import(typeof(ProvideCompiledAttribute)))?.ConstructorArguments?[0].Value as string; + var compiledValueProviderName = valueProviderType?.GetCustomAttribute(module.ImportReference(typeof(ProvideCompiledAttribute)))?.ConstructorArguments?[0].Value as string; Type compiledValueProviderType; if (compiledValueProviderName != null && (compiledValueProviderType = Type.GetType(compiledValueProviderName)) != null) { var compiledValueProvider = Activator.CreateInstance(compiledValueProviderType); @@ -327,9 +327,9 @@ namespace Xamarin.Forms.Build.Tasks yield break; } - var valueProviderDef = module.Import(typeof (IValueProvider)).Resolve(); + var valueProviderDef = module.ImportReference(typeof (IValueProvider)).Resolve(); var provideValueInfo = valueProviderDef.Methods.First(md => md.Name == "ProvideValue"); - var provideValue = module.Import(provideValueInfo); + var provideValue = module.ImportReference(provideValueInfo); vardefref.VariableDefinition = new VariableDefinition(module.TypeSystem.Object); yield return Instruction.Create(OpCodes.Ldloc, context.Variables[node]); @@ -372,16 +372,16 @@ namespace Xamarin.Forms.Build.Tasks var properties = ParsePath(path, tSourceRef, node as IXmlLineInfo, context.Module); var tPropertyRef = properties != null && properties.Any() ? properties.Last().Item1.PropertyType : tSourceRef; - var funcRef = context.Module.Import(context.Module.Import(typeof(Func<,>)).MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef })); - var actionRef = context.Module.Import(context.Module.Import(typeof(Action<,>)).MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef })); - var funcObjRef = context.Module.Import(context.Module.Import(typeof(Func<,>)).MakeGenericInstanceType(new [] { tSourceRef, context.Module.TypeSystem.Object })); - var tupleRef = context.Module.Import(context.Module.Import(typeof(Tuple<,>)).MakeGenericInstanceType(new [] { funcObjRef, context.Module.TypeSystem.String})); - var typedBindingRef = context.Module.Import(context.Module.Import(typeof(TypedBinding<,>)).MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef})); + var funcRef = context.Module.ImportReference(context.Module.ImportReference(typeof(Func<,>)).MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef })); + var actionRef = context.Module.ImportReference(context.Module.ImportReference(typeof(Action<,>)).MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef })); + var funcObjRef = context.Module.ImportReference(context.Module.ImportReference(typeof(Func<,>)).MakeGenericInstanceType(new [] { tSourceRef, context.Module.TypeSystem.Object })); + var tupleRef = context.Module.ImportReference(context.Module.ImportReference(typeof(Tuple<,>)).MakeGenericInstanceType(new [] { funcObjRef, context.Module.TypeSystem.String})); + var typedBindingRef = context.Module.ImportReference(context.Module.ImportReference(typeof(TypedBinding<,>)).MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef})); TypeReference _; - var ctorInfo = context.Module.Import(typedBindingRef.Resolve().Methods.FirstOrDefault(md => md.IsConstructor && !md.IsStatic && md.Parameters.Count == 3 )); + var ctorInfo = context.Module.ImportReference(typedBindingRef.Resolve().Methods.FirstOrDefault(md => md.IsConstructor && !md.IsStatic && md.Parameters.Count == 3 )); var ctorinforef = ctorInfo.MakeGeneric(typedBindingRef, funcRef, actionRef, tupleRef); - var setTypedBinding = context.Module.Import(typeof(BindingExtension)).GetProperty(pd => pd.Name == "TypedBinding", out _).SetMethod; + var setTypedBinding = context.Module.ImportReference(typeof(BindingExtension)).GetProperty(pd => pd.Name == "TypedBinding", out _).SetMethod; yield return Instruction.Create(OpCodes.Ldloc, bindingExt); foreach (var instruction in CompiledBindingGetGetter(tSourceRef, tPropertyRef, properties, node, context)) @@ -390,8 +390,8 @@ namespace Xamarin.Forms.Build.Tasks yield return instruction; foreach (var instruction in CompiledBindingGetHandlers(tSourceRef, tPropertyRef, properties, node, context)) yield return instruction; - yield return Instruction.Create(OpCodes.Newobj, context.Module.Import(ctorinforef)); - yield return Instruction.Create(OpCodes.Callvirt, context.Module.Import(setTypedBinding)); + yield return Instruction.Create(OpCodes.Newobj, context.Module.ImportReference(ctorinforef)); + yield return Instruction.Create(OpCodes.Callvirt, context.Module.ImportReference(setTypedBinding)); } static IList<Tuple<PropertyDefinition, string>> ParsePath(string path, TypeReference tSourceRef, IXmlLineInfo lineInfo, ModuleDefinition module) @@ -431,7 +431,7 @@ namespace Xamarin.Forms.Build.Tasks previousPartTypeRef = property.PropertyType; } if (indexArg != null) { - var defaultMemberAttribute = previousPartTypeRef.GetCustomAttribute(module.Import(typeof(System.Reflection.DefaultMemberAttribute))); + var defaultMemberAttribute = previousPartTypeRef.GetCustomAttribute(module.ImportReference(typeof(System.Reflection.DefaultMemberAttribute))); var indexerName = defaultMemberAttribute?.ConstructorArguments?.FirstOrDefault().Value as string ?? "Item"; var indexer = previousPartTypeRef.GetProperty(pd => pd.Name == indexerName && pd.GetMethod != null && pd.GetMethod.IsPublic, out _); properties.Add(new Tuple<PropertyDefinition, string>(indexer, indexArg)); @@ -456,7 +456,7 @@ namespace Xamarin.Forms.Build.Tasks // } var module = context.Module; - var compilerGeneratedCtor = module.Import(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)).GetMethods(md => md.IsConstructor, module).First().Item1; + var compilerGeneratedCtor = module.ImportReference(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)).GetMethods(md => md.IsConstructor, module).First().Item1; var getter = new MethodDefinition($"<{context.Body.Method.Name}>typedBindingsM__{typedBindingCount++}", MethodAttributes.Private | MethodAttributes.HideBySig | MethodAttributes.Static, tPropertyRef) { @@ -464,7 +464,7 @@ namespace Xamarin.Forms.Build.Tasks new ParameterDefinition(tSourceRef) }, CustomAttributes = { - new CustomAttribute (context.Module.Import(compilerGeneratedCtor)) + new CustomAttribute (context.Module.ImportReference(compilerGeneratedCtor)) } }; var il = getter.Body.GetILProcessor(); @@ -484,7 +484,7 @@ namespace Xamarin.Forms.Build.Tasks il.Emit(OpCodes.Ldc_I4, index); } } - il.Emit(OpCodes.Callvirt, module.Import(property.GetMethod)); + il.Emit(OpCodes.Callvirt, module.ImportReference(property.GetMethod)); } } @@ -492,9 +492,9 @@ namespace Xamarin.Forms.Build.Tasks context.Body.Method.DeclaringType.Methods.Add(getter); - var funcRef = module.Import(typeof(Func<,>)); - funcRef = module.Import(funcRef.MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef })); - var funcCtor = module.Import(funcRef.Resolve().GetConstructors().First()); + var funcRef = module.ImportReference(typeof(Func<,>)); + funcRef = module.ImportReference(funcRef.MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef })); + var funcCtor = module.ImportReference(funcRef.Resolve().GetConstructors().First()); funcCtor = funcCtor.MakeGeneric(funcRef, new [] { tSourceRef, tPropertyRef }); // IL_0007: ldnull @@ -503,7 +503,7 @@ namespace Xamarin.Forms.Build.Tasks yield return Instruction.Create(OpCodes.Ldnull); yield return Instruction.Create(OpCodes.Ldftn, getter); - yield return Instruction.Create(OpCodes.Newobj, module.Import(funcCtor)); + yield return Instruction.Create(OpCodes.Newobj, module.ImportReference(funcCtor)); } static IEnumerable<Instruction> CompiledBindingGetSetter(TypeReference tSourceRef, TypeReference tPropertyRef, IList<Tuple<PropertyDefinition, string>> properties, ElementNode node, ILContext context) @@ -525,7 +525,7 @@ namespace Xamarin.Forms.Build.Tasks // } var module = context.Module; - var compilerGeneratedCtor = module.Import(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)).GetMethods(md => md.IsConstructor, module).First().Item1; + var compilerGeneratedCtor = module.ImportReference(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)).GetMethods(md => md.IsConstructor, module).First().Item1; var setter = new MethodDefinition($"<{context.Body.Method.Name}>typedBindingsM__{typedBindingCount++}", MethodAttributes.Private | MethodAttributes.HideBySig | MethodAttributes.Static, module.TypeSystem.Void) { @@ -534,7 +534,7 @@ namespace Xamarin.Forms.Build.Tasks new ParameterDefinition(tPropertyRef) }, CustomAttributes = { - new CustomAttribute (module.Import(compilerGeneratedCtor)) + new CustomAttribute (module.ImportReference(compilerGeneratedCtor)) } }; @@ -560,7 +560,7 @@ namespace Xamarin.Forms.Build.Tasks il.Emit(OpCodes.Ldc_I4, index); } } - il.Emit(OpCodes.Callvirt, module.Import(property.GetMethod)); + il.Emit(OpCodes.Callvirt, module.ImportReference(property.GetMethod)); } var indexer = properties.Last().Item2; @@ -575,14 +575,14 @@ namespace Xamarin.Forms.Build.Tasks } } il.Emit(OpCodes.Ldarg_1); - il.Emit(OpCodes.Callvirt, module.Import(setterRef)); + il.Emit(OpCodes.Callvirt, module.ImportReference(setterRef)); il.Emit(OpCodes.Ret); context.Body.Method.DeclaringType.Methods.Add(setter); - var actionRef = module.Import(typeof(Action<,>)); - actionRef = module.Import(actionRef.MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef })); - var actionCtor = module.Import(actionRef.Resolve().GetConstructors().First()); + var actionRef = module.ImportReference(typeof(Action<,>)); + actionRef = module.ImportReference(actionRef.MakeGenericInstanceType(new [] { tSourceRef, tPropertyRef })); + var actionCtor = module.ImportReference(actionRef.Resolve().GetConstructors().First()); actionCtor = actionCtor.MakeGeneric(actionRef, new [] { tSourceRef, tPropertyRef }); // IL_0024: ldnull @@ -590,7 +590,7 @@ namespace Xamarin.Forms.Build.Tasks // IL_002b: newobj instance void class [mscorlib]System.Action`2<class ViewModel, string>::'.ctor'(object, native int) yield return Instruction.Create(OpCodes.Ldnull); yield return Instruction.Create(OpCodes.Ldftn, setter); - yield return Instruction.Create(OpCodes.Newobj, module.Import(actionCtor)); + yield return Instruction.Create(OpCodes.Newobj, module.ImportReference(actionCtor)); } static IEnumerable<Instruction> CompiledBindingGetHandlers(TypeReference tSourceRef, TypeReference tPropertyRef, IList<Tuple<PropertyDefinition, string>> properties, ElementNode node, ILContext context) @@ -609,7 +609,7 @@ namespace Xamarin.Forms.Build.Tasks // } var module = context.Module; - var compilerGeneratedCtor = module.Import(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)).GetMethods(md => md.IsConstructor, module).First().Item1; + var compilerGeneratedCtor = module.ImportReference(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)).GetMethods(md => md.IsConstructor, module).First().Item1; var partGetters = new List<MethodDefinition>(); if (properties == null || properties.Count == 0) { @@ -624,7 +624,7 @@ namespace Xamarin.Forms.Build.Tasks new ParameterDefinition(tSourceRef) }, CustomAttributes = { - new CustomAttribute (context.Module.Import(compilerGeneratedCtor)) + new CustomAttribute (context.Module.ImportReference(compilerGeneratedCtor)) } }; var il = partGetter.Body.GetILProcessor(); @@ -643,18 +643,18 @@ namespace Xamarin.Forms.Build.Tasks il.Emit(OpCodes.Ldc_I4, index); } } - il.Emit(OpCodes.Callvirt, module.Import(property.GetMethod)); + il.Emit(OpCodes.Callvirt, module.ImportReference(property.GetMethod)); } il.Emit(OpCodes.Ret); context.Body.Method.DeclaringType.Methods.Add(partGetter); partGetters.Add(partGetter); } - var funcObjRef = context.Module.Import(module.Import(typeof(Func<,>)).MakeGenericInstanceType(new [] { tSourceRef, module.TypeSystem.Object })); - var tupleRef = context.Module.Import(module.Import(typeof(Tuple<,>)).MakeGenericInstanceType(new [] { funcObjRef, module.TypeSystem.String })); - var funcCtor = module.Import(funcObjRef.Resolve().GetConstructors().First()); + var funcObjRef = context.Module.ImportReference(module.ImportReference(typeof(Func<,>)).MakeGenericInstanceType(new [] { tSourceRef, module.TypeSystem.Object })); + var tupleRef = context.Module.ImportReference(module.ImportReference(typeof(Tuple<,>)).MakeGenericInstanceType(new [] { funcObjRef, module.TypeSystem.String })); + var funcCtor = module.ImportReference(funcObjRef.Resolve().GetConstructors().First()); funcCtor = funcCtor.MakeGeneric(funcObjRef, new [] { tSourceRef, module.TypeSystem.Object }); - var tupleCtor = module.Import(tupleRef.Resolve().GetConstructors().First()); + var tupleCtor = module.ImportReference(tupleRef.Resolve().GetConstructors().First()); tupleCtor = tupleCtor.MakeGeneric(tupleRef, new [] { funcObjRef, module.TypeSystem.String}); // IL_003a: ldc.i4.2 @@ -686,9 +686,9 @@ namespace Xamarin.Forms.Build.Tasks yield return Instruction.Create(OpCodes.Ldc_I4, i); yield return Instruction.Create(OpCodes.Ldnull); yield return Instruction.Create(OpCodes.Ldftn, partGetters [i]); - yield return Instruction.Create(OpCodes.Newobj, module.Import(funcCtor)); + yield return Instruction.Create(OpCodes.Newobj, module.ImportReference(funcCtor)); yield return Instruction.Create(OpCodes.Ldstr, properties [i].Item1.Name); - yield return Instruction.Create(OpCodes.Newobj, module.Import(tupleCtor)); + yield return Instruction.Create(OpCodes.Newobj, module.ImportReference(tupleCtor)); yield return Instruction.Create(OpCodes.Stelem_Ref); } } @@ -740,8 +740,8 @@ namespace Xamarin.Forms.Build.Tasks fd.IsStatic && fd.IsPublic, out declaringTypeReference); if (bpRef != null) { - bpRef = module.Import(bpRef.ResolveGenericParameters(declaringTypeReference)); - bpRef.FieldType = module.Import(bpRef.FieldType); + bpRef = module.ImportReference(bpRef.ResolveGenericParameters(declaringTypeReference)); + bpRef.FieldType = module.ImportReference(bpRef.FieldType); } return bpRef; } @@ -791,10 +791,10 @@ namespace Xamarin.Forms.Build.Tasks yield return Instruction.Create(OpCodes.Ldftn, handler); //FIXME: eventually get the right ctor instead fo the First() one, just in case another one could exists (not even sure it's possible). - var ctor = module.Import(eventinfo.EventType.Resolve().GetConstructors().First()); + var ctor = module.ImportReference(eventinfo.EventType.Resolve().GetConstructors().First()); ctor = ctor.ResolveGenericParameters(eventinfo.EventType, module); - yield return Instruction.Create(OpCodes.Newobj, module.Import(ctor)); - yield return Instruction.Create(OpCodes.Callvirt, module.Import(eventinfo.AddMethod)); + yield return Instruction.Create(OpCodes.Newobj, module.ImportReference(ctor)); + yield return Instruction.Create(OpCodes.Callvirt, module.ImportReference(eventinfo.AddMethod)); } static bool CanSetDynamicResource(FieldReference bpRef, INode valueNode, ILContext context) @@ -815,14 +815,14 @@ namespace Xamarin.Forms.Build.Tasks { var module = context.Body.Method.Module; var varValue = context.Variables [elementNode]; - var setDynamicResource = module.Import(typeof(IDynamicResourceHandler)).Resolve().Methods.First(m => m.Name == "SetDynamicResource"); + var setDynamicResource = module.ImportReference(typeof(IDynamicResourceHandler)).Resolve().Methods.First(m => m.Name == "SetDynamicResource"); var getKey = typeof(DynamicResource).GetProperty("Key").GetMethod; yield return Instruction.Create(OpCodes.Ldloc, parent); yield return Instruction.Create(OpCodes.Ldsfld, bpRef); yield return Instruction.Create(OpCodes.Ldloc, varValue); - yield return Instruction.Create(OpCodes.Callvirt, module.Import(getKey)); - yield return Instruction.Create(OpCodes.Callvirt, module.Import(setDynamicResource)); + yield return Instruction.Create(OpCodes.Callvirt, module.ImportReference(getKey)); + yield return Instruction.Create(OpCodes.Callvirt, module.ImportReference(setDynamicResource)); } static bool CanSetBinding(FieldReference bpRef, INode valueNode, ILContext context) @@ -838,18 +838,18 @@ namespace Xamarin.Forms.Build.Tasks VariableDefinition varValue; if (!context.Variables.TryGetValue(valueNode as IElementNode, out varValue)) return false; - var implicitOperator = varValue.VariableType.GetImplicitOperatorTo(module.Import(typeof(BindingBase)), module); + var implicitOperator = varValue.VariableType.GetImplicitOperatorTo(module.ImportReference(typeof(BindingBase)), module); if (implicitOperator != null) return true; - return varValue.VariableType.InheritsFromOrImplements(module.Import(typeof(BindingBase))); + return varValue.VariableType.InheritsFromOrImplements(module.ImportReference(typeof(BindingBase))); } static IEnumerable<Instruction> SetBinding(VariableDefinition parent, FieldReference bpRef, IElementNode elementNode, IXmlLineInfo iXmlLineInfo, ILContext context) { var module = context.Body.Method.Module; var varValue = context.Variables [elementNode]; - var implicitOperator = varValue.VariableType.GetImplicitOperatorTo(module.Import(typeof(BindingBase)), module); + var implicitOperator = varValue.VariableType.GetImplicitOperatorTo(module.ImportReference(typeof(BindingBase)), module); //TODO: check if parent is a BP var setBinding = typeof(BindableObject).GetMethod("SetBinding", new [] { typeof(BindableProperty), typeof(BindingBase) }); @@ -859,8 +859,8 @@ namespace Xamarin.Forms.Build.Tasks yield return Instruction.Create(OpCodes.Ldloc, varValue); if (implicitOperator != null) // IL_000f: call !0 class [Xamarin.Forms.Core]Xamarin.Forms.OnPlatform`1<BindingBase>::op_Implicit(class [Xamarin.Forms.Core]Xamarin.Forms.OnPlatform`1<!0>) - yield return Instruction.Create(OpCodes.Call, module.Import(implicitOperator)); - yield return Instruction.Create(OpCodes.Callvirt, module.Import(setBinding)); + yield return Instruction.Create(OpCodes.Call, module.ImportReference(implicitOperator)); + yield return Instruction.Create(OpCodes.Callvirt, module.ImportReference(setBinding)); } static bool CanSetValue(FieldReference bpRef, bool attached, INode node, IXmlLineInfo iXmlLineInfo, ILContext context) @@ -918,14 +918,14 @@ namespace Xamarin.Forms.Build.Tasks var implicitOperator = varDef.VariableType.GetImplicitOperatorTo(bpTypeRef, module); yield return Instruction.Create(OpCodes.Ldloc, varDef); if (implicitOperator != null) { - yield return Instruction.Create(OpCodes.Call, module.Import(implicitOperator)); - varType = module.Import(bpTypeRef); + yield return Instruction.Create(OpCodes.Call, module.ImportReference(implicitOperator)); + varType = module.ImportReference(bpTypeRef); } if (varType.IsValueType) yield return Instruction.Create(OpCodes.Box, varType); } - yield return Instruction.Create(OpCodes.Callvirt, module.Import(setValue)); + yield return Instruction.Create(OpCodes.Callvirt, module.ImportReference(setValue)); } static bool CanSet(VariableDefinition parent, string localName, INode node, ILContext context) @@ -975,8 +975,8 @@ namespace Xamarin.Forms.Build.Tasks // IL_0008: ldstr "foo" // IL_000d: callvirt instance void class [Xamarin.Forms.Core]Xamarin.Forms.Label::set_Text(string) - module.Import(parent.VariableType.Resolve()); - var propertySetterRef = module.Import(module.Import(propertySetter).ResolveGenericParameters(declaringTypeReference, module)); + module.ImportReference(parent.VariableType.Resolve()); + var propertySetterRef = module.ImportReference(module.ImportReference(propertySetter).ResolveGenericParameters(declaringTypeReference, module)); propertySetterRef.ImportTypes(module); var propertyType = property.ResolveGenericPropertyType(declaringTypeReference); var valueNode = node as ValueNode; @@ -1001,9 +1001,9 @@ namespace Xamarin.Forms.Build.Tasks yield return Instruction.Create(OpCodes.Ldloc, vardef); if (implicitOperator != null) { // IL_000f: call !0 class [Xamarin.Forms.Core]Xamarin.Forms.OnPlatform`1<bool>::op_Implicit(class [Xamarin.Forms.Core]Xamarin.Forms.OnPlatform`1<!0>) - yield return Instruction.Create(OpCodes.Call, module.Import(implicitOperator)); + yield return Instruction.Create(OpCodes.Call, module.ImportReference(implicitOperator)); } else if (!vardef.VariableType.IsValueType && propertyType.IsValueType) - yield return Instruction.Create(OpCodes.Unbox_Any, module.Import(propertyType)); + yield return Instruction.Create(OpCodes.Unbox_Any, module.ImportReference(propertyType)); else if (vardef.VariableType.IsValueType && propertyType.FullName == "System.Object") yield return Instruction.Create(OpCodes.Box, vardef.VariableType); if (parent.VariableType.IsValueType) @@ -1028,8 +1028,8 @@ namespace Xamarin.Forms.Build.Tasks return false; var vardef = context.Variables [elementNode]; - var propertyGetterRef = module.Import(propertyGetter); - propertyGetterRef = module.Import(propertyGetterRef.ResolveGenericParameters(declaringTypeReference, module)); + var propertyGetterRef = module.ImportReference(propertyGetter); + propertyGetterRef = module.ImportReference(propertyGetterRef.ResolveGenericParameters(declaringTypeReference, module)); var propertyType = propertyGetterRef.ReturnType.ResolveGenericParameters(declaringTypeReference); //TODO check md.Parameters[0] type @@ -1048,13 +1048,13 @@ namespace Xamarin.Forms.Build.Tasks var propertyGetter = property.GetMethod; var elementNode = node as IElementNode; var vardef = context.Variables [elementNode]; - var propertyGetterRef = module.Import(propertyGetter); - propertyGetterRef = module.Import(propertyGetterRef.ResolveGenericParameters(declaringTypeReference, module)); + var propertyGetterRef = module.ImportReference(propertyGetter); + propertyGetterRef = module.ImportReference(propertyGetterRef.ResolveGenericParameters(declaringTypeReference, module)); var propertyType = propertyGetterRef.ReturnType.ResolveGenericParameters(declaringTypeReference); //TODO check md.Parameters[0] type var adderTuple = propertyType.GetMethods(md => md.Name == "Add" && md.Parameters.Count == 1, module).FirstOrDefault(); - var adderRef = module.Import(adderTuple.Item1); - adderRef = module.Import(adderRef.ResolveGenericParameters(adderTuple.Item2, module)); + var adderRef = module.ImportReference(adderTuple.Item1); + adderRef = module.ImportReference(adderRef.ResolveGenericParameters(adderTuple.Item2, module)); var childType = GetParameterType(adderRef.Parameters [0]); var implicitOperator = vardef.VariableType.GetImplicitOperatorTo(childType, module); @@ -1062,7 +1062,7 @@ namespace Xamarin.Forms.Build.Tasks yield return Instruction.Create(OpCodes.Callvirt, propertyGetterRef); yield return Instruction.Create(OpCodes.Ldloc, vardef); if (implicitOperator != null) - yield return Instruction.Create(OpCodes.Call, module.Import(implicitOperator)); + yield return Instruction.Create(OpCodes.Call, module.ImportReference(implicitOperator)); if (implicitOperator == null && vardef.VariableType.IsValueType && !childType.IsValueType) yield return Instruction.Create(OpCodes.Box, vardef.VariableType); yield return Instruction.Create(OpCodes.Callvirt, adderRef); @@ -1105,7 +1105,7 @@ namespace Xamarin.Forms.Build.Tasks var module = parentContext.Module; - var compilerGeneratedCtor = module.Import(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)).GetMethods(md => md.IsConstructor, module).First().Item1; + var compilerGeneratedCtor = module.ImportReference(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)).GetMethods(md => md.IsConstructor, module).First().Item1; var anonType = new TypeDefinition( null, "<" + parentContext.Body.Method.Name + ">_anonXamlCDataTemplate_" + dtcount++, @@ -1115,7 +1115,7 @@ namespace Xamarin.Forms.Build.Tasks { BaseType = module.TypeSystem.Object, CustomAttributes = { - new CustomAttribute (module.Import(compilerGeneratedCtor)) + new CustomAttribute (module.ImportReference(compilerGeneratedCtor)) } }; @@ -1127,7 +1127,7 @@ namespace Xamarin.Forms.Build.Tasks module.TypeSystem.Object); anonType.Methods.Add(loadTemplate); - var parentValues = new FieldDefinition("parentValues", FieldAttributes.Assembly, module.Import(typeof (object[]))); + var parentValues = new FieldDefinition("parentValues", FieldAttributes.Assembly, module.ImportReference(typeof (object[]))); anonType.Fields.Add(parentValues); TypeReference rootType = null; @@ -1179,19 +1179,19 @@ namespace Xamarin.Forms.Build.Tasks //SetDataTemplate parentIl.Emit(OpCodes.Ldftn, loadTemplate); - var funcObjRef = module.Import(typeof(Func<object>)); + var funcObjRef = module.ImportReference(typeof(Func<object>)); var funcCtor = funcObjRef .Resolve() .Methods.First(md => md.IsConstructor && md.Parameters.Count == 2) .ResolveGenericParameters(funcObjRef, module); - parentIl.Emit(OpCodes.Newobj, module.Import(funcCtor)); + parentIl.Emit(OpCodes.Newobj, module.ImportReference(funcCtor)); #pragma warning disable 0612 var propertySetter = - module.Import(typeof (IDataTemplate)).Resolve().Properties.First(p => p.Name == "LoadTemplate").SetMethod; + module.ImportReference(typeof (IDataTemplate)).Resolve().Properties.First(p => p.Name == "LoadTemplate").SetMethod; #pragma warning restore 0612 - parentContext.IL.Emit(OpCodes.Callvirt, module.Import(propertySetter)); + parentContext.IL.Emit(OpCodes.Callvirt, module.ImportReference(propertySetter)); loadTemplate.Body.Optimize(); } |