Xaml werr (#191)
authorStephane Delcroix <stephane@delcroix.org>
Wed, 1 Jun 2016 20:48:03 +0000 (22:48 +0200)
committerJason Smith <jason.smith@xamarin.com>
Wed, 1 Jun 2016 20:48:03 +0000 (13:48 -0700)
* [XamlC] get rid of 0219

* [XamlC] get rid of 0168

* [XamC] it's 436 time

* [XamlC] bye 108

* [XamlC] remove one though obsolete invocation

* [XamlC] no longer depend on any obsolete

* align the stars

Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs
Xamarin.Forms.Build.Tasks/ExpandMarkupsVisitor.cs
Xamarin.Forms.Build.Tasks/FixedCreateCSharpManifestResourceName.cs
Xamarin.Forms.Build.Tasks/MethodReferenceExtensions.cs
Xamarin.Forms.Build.Tasks/NodeILExtensions.cs
Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs
Xamarin.Forms.Build.Tasks/SetResourcesVisitor.cs
Xamarin.Forms.Build.Tasks/Xamarin.Forms.Build.Tasks.csproj
Xamarin.Forms.Build.Tasks/XamlCTask.cs

index f4b2f52..bec6386 100644 (file)
@@ -48,7 +48,7 @@ namespace Xamarin.Forms.Build.Tasks
                                LogLine(2, " Module: {0}", module.Name);
                                foreach (var resource in module.Resources.OfType<EmbeddedResource>())
                                {
-                                       Log(2, "  Resource: {0}... ", resource.Name);
+                                       LogString(2, "  Resource: {0}... ", resource.Name);
                                        string classname;
                                        if (!resource.IsXaml(out classname))
                                        {
@@ -74,7 +74,7 @@ namespace Xamarin.Forms.Build.Tasks
                                        }
                                        LogLine(2, "");
 
-                                       Log(2, "   Duplicating {0}.InitializeComponent () into {0}.InitCompRuntime ... ", typeDef.Name);
+                                       LogString(2, "   Duplicating {0}.InitializeComponent () into {0}.InitCompRuntime ... ", typeDef.Name);
                                        var initCompRuntime = new MethodDefinition("InitCompRuntime", initComp.Attributes, initComp.ReturnType);
                                        initCompRuntime.Body = initComp.Body;
                                        typeDef.Methods.Add(initCompRuntime);
@@ -100,10 +100,10 @@ namespace Xamarin.Forms.Build.Tasks
                                                        md => md.IsConstructor && md.Parameters.Count == 1 && md.Parameters[0].ParameterType == module.TypeSystem.Boolean)
                                                        .FirstOrDefault();
                                        if (altCtor != null)
-                                               Log(2, "   Replacing body of {0}.{0} (bool {1}) ... ", typeDef.Name, altCtor.Parameters[0].Name);
+                                               LogString(2, "   Replacing body of {0}.{0} (bool {1}) ... ", typeDef.Name, altCtor.Parameters[0].Name);
                                        else
                                        {
-                                               Log(2, "   Adding {0}.{0} (bool useCompiledXaml) ... ", typeDef.Name);
+                                               LogString(2, "   Adding {0}.{0} (bool useCompiledXaml) ... ", typeDef.Name);
                                                altCtor = new MethodDefinition(".ctor",
                                                        MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName |
                                                        MethodAttributes.RTSpecialName, module.TypeSystem.Void);
@@ -139,7 +139,7 @@ namespace Xamarin.Forms.Build.Tasks
 
                                LogLine(2, "");
                        }
-                       Log(1, "Writing the assembly... ");
+                       LogString(1, "Writing the assembly... ");
                        assemblyDefinition.Write(Assembly, new WriterParameters
                        {
                                WriteSymbols = DebugSymbols
index e63ae42..bbdaa6c 100644 (file)
@@ -164,7 +164,7 @@ namespace Xamarin.Forms.Build.Tasks
                                try
                                {
                                        type = new XmlType(namespaceuri, name + "Extension", null);
-                                       var typeref = type.GetTypeReference(contextProvider.Context.Body.Method.Module, null);
+                                       type.GetTypeReference(contextProvider.Context.Body.Method.Module, null);
                                }
                                catch (XamlParseException)
                                {
index a508a55..34ee1f5 100644 (file)
@@ -7,7 +7,9 @@ namespace Xamarin.Forms.Build.Tasks
        public class FixedCreateCSharpManifestResourceName : CreateCSharpManifestResourceName
        {
                [Output]
+#pragma warning disable 0108
                public ITaskItem[] ResourceFilesWithManifestResourceNames { get; set; }
+#pragma warning restore 0108
 
                public override bool Execute()
                {
index e377a0c..6240a20 100644 (file)
@@ -6,33 +6,13 @@ namespace Xamarin.Forms.Build.Tasks
 {
        static class MethodReferenceExtensions
        {
-               [Obsolete]
-               public static MethodReference MakeGeneric(this MethodReference self, params TypeReference[] arguments)
-               {
-                       var reference = new MethodReference(self.Name, self.ReturnType)
-                       {
-                               DeclaringType = self.DeclaringType.MakeGenericInstanceType(arguments),
-                               HasThis = self.HasThis,
-                               ExplicitThis = self.ExplicitThis,
-                               CallingConvention = self.CallingConvention
-                       };
-
-                       foreach (var parameter in self.Parameters)
-                               reference.Parameters.Add(new ParameterDefinition(parameter.ParameterType));
-
-                       foreach (var generic_parameter in self.GenericParameters)
-                               reference.GenericParameters.Add(new GenericParameter(generic_parameter.Name, reference));
-
-                       return reference;
-               }
-
                public static MethodReference ResolveGenericParameters(this MethodReference self, TypeReference declaringTypeRef,
                        ModuleDefinition module)
                {
                        if (self == null)
-                               throw new ArgumentNullException("self");
+                               throw new ArgumentNullException(nameof(self));
                        if (declaringTypeRef == null)
-                               throw new ArgumentNullException("declaringTypeRef");
+                               throw new ArgumentNullException(nameof(declaringTypeRef));
 
                        var reference = new MethodReference(self.Name, self.ReturnType)
                        {
@@ -42,8 +22,10 @@ namespace Xamarin.Forms.Build.Tasks
                                CallingConvention = self.CallingConvention
                        };
 
-                       foreach (var parameter in self.Parameters)
-                               reference.Parameters.Add(new ParameterDefinition(module.Import(parameter.ParameterType)));
+                       foreach (var parameter in self.Parameters) {
+                               var p = parameter.ParameterType.IsGenericParameter ? parameter.ParameterType : module.Import(parameter.ParameterType);
+                               reference.Parameters.Add(new ParameterDefinition(p));
+                       }
 
                        foreach (var generic_parameter in self.GenericParameters)
                                reference.GenericParameters.Add(new GenericParameter(generic_parameter.Name, reference));
index 30b0106..97b48a4 100644 (file)
@@ -90,10 +90,11 @@ namespace Xamarin.Forms.Build.Tasks
                        MethodReference nullableCtor = null;
                        if (targetTypeRef.Resolve().FullName == "System.Nullable`1")
                        {
+                               var nullableTypeRef = targetTypeRef;
                                targetTypeRef = ((GenericInstanceType)targetTypeRef).GenericArguments[0];
                                isNullable = true;
                                nullableCtor = originalTypeRef.GetMethods(md => md.IsConstructor && md.Parameters.Count == 1, module).Single().Item1;
-                               nullableCtor = nullableCtor.MakeGeneric(targetTypeRef);
+                               nullableCtor = nullableCtor.ResolveGenericParameters(nullableTypeRef, module);
                        }
                        //Obvious Built-in conversions
                        if (targetTypeRef.Resolve().BaseType != null && targetTypeRef.Resolve().BaseType.FullName == "System.Enum")
index 692ef8b..71f19f5 100644 (file)
@@ -239,7 +239,7 @@ namespace Xamarin.Forms.Build.Tasks
                                var provideValueInfo = markExt.Methods.First(md => md.Name == "ProvideValue");
                                var provideValue = module.Import(provideValueInfo);
                                provideValue =
-                                       module.Import(provideValue.MakeGeneric(markupExtension.GenericArguments.Select(tr => module.Import(tr)).ToArray()));
+                                       module.Import(provideValue.ResolveGenericParameters(markupExtension, module));
 
                                var typeNode = node.Properties[new XmlName("", "Type")];
                                TypeReference arrayTypeRef;
@@ -263,7 +263,7 @@ namespace Xamarin.Forms.Build.Tasks
                                var provideValueInfo = markExt.Methods.First(md => md.Name == "ProvideValue");
                                var provideValue = module.Import(provideValueInfo);
                                provideValue =
-                                       module.Import(provideValue.MakeGeneric(markupExtension.GenericArguments.Select(tr => module.Import(tr)).ToArray()));
+                                       module.Import(provideValue.ResolveGenericParameters(markupExtension, module));
 
                                vardefref.VariableDefinition = new VariableDefinition(module.Import(genericArguments.First()));
                                yield return Instruction.Create(OpCodes.Ldloc, context.Variables[node]);
@@ -311,7 +311,7 @@ namespace Xamarin.Forms.Build.Tasks
                        var handled = false;
 
                        //If it's an attached BP, update elementType and propertyName
-                       var attached = GetNameAndTypeRef(ref elementType, propertyName.NamespaceURI, ref localName, context, iXmlLineInfo);
+                       GetNameAndTypeRef(ref elementType, propertyName.NamespaceURI, ref localName, context, iXmlLineInfo);
 
                        //If the target is an event, connect
                        //                      IL_0007:  ldloc.0 
@@ -650,16 +650,18 @@ namespace Xamarin.Forms.Build.Tasks
 
                        //SetDataTemplate
                        parentIl.Emit(OpCodes.Ldftn, loadTemplate);
+                       var funcObjRef = module.Import(typeof(Func<object>));
                        var funcCtor =
-                               module.Import(typeof (Func<>))
-                                       .MakeGenericInstanceType(module.TypeSystem.Object)
+                               funcObjRef
                                        .Resolve()
                                        .Methods.First(md => md.IsConstructor && md.Parameters.Count == 2)
-                                       .MakeGeneric(module.TypeSystem.Object);
+                                       .ResolveGenericParameters(funcObjRef, module);
                        parentIl.Emit(OpCodes.Newobj, module.Import(funcCtor));
 
+#pragma warning disable 0612
                        var propertySetter =
                                module.Import(typeof (IDataTemplate)).Resolve().Properties.First(p => p.Name == "LoadTemplate").SetMethod;
+#pragma warning restore 0612
                        parentContext.IL.Emit(OpCodes.Callvirt, module.Import(propertySetter));
                }
        }
index d09c4b0..2bf19c2 100644 (file)
@@ -76,7 +76,6 @@ namespace Xamarin.Forms.Build.Tasks
                        if (IsCollectionItem(node, parentNode) && parentNode is IElementNode)
                        {
                                // Collection element, implicit content, or implicit collection element.
-                               CustomAttribute cpAttr;
                                var parentVar = Context.Variables[(IElementNode)parentNode];
                                if (parentVar.VariableType.ImplementsInterface(Module.Import(typeof (IEnumerable))))
                                {
index 24ca468..1bdd8bf 100644 (file)
@@ -21,7 +21,7 @@
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
-    <NoWarn>0108;0612;0436;0168;0219</NoWarn>
+    <NoWarn></NoWarn>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>full</DebugType>
@@ -66,9 +66,6 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="..\Xamarin.Forms.Xaml\XmlnsHelper.cs">
-      <Link>XmlnsHelper.cs</Link>
-    </Compile>
     <Compile Include="XamlGTask.cs" />
     <Compile Include="ILContext.cs" />
     <Compile Include="CreateObjectVisitor.cs" />
index 7c429d3..19548b8 100644 (file)
@@ -84,7 +84,7 @@ namespace Xamarin.Forms.Build.Tasks
                        }
                }
 
-               protected void Log(int level, string format, params object[] arg)
+               protected void LogString(int level, string format, params object[] arg)
                {
                        if (level <= 0)
                                Console.Error.Write(format, arg);
@@ -193,7 +193,7 @@ namespace Xamarin.Forms.Build.Tasks
                                var resourcesToPrune = new List<EmbeddedResource>();
                                foreach (var resource in module.Resources.OfType<EmbeddedResource>())
                                {
-                                       Log(2, "  Resource: {0}... ", resource.Name);
+                                       LogString(2, "  Resource: {0}... ", resource.Name);
                                        string classname;
                                        if (!resource.IsXaml(out classname))
                                        {
@@ -232,7 +232,7 @@ namespace Xamarin.Forms.Build.Tasks
                                        }
                                        LogLine(2, "");
 
-                                       Log(2, "   Parsing Xaml... ");
+                                       LogString(2, "   Parsing Xaml... ");
                                        var rootnode = ParseXaml(resource.GetResourceStream(), typeDef);
                                        if (rootnode == null)
                                        {
@@ -245,7 +245,7 @@ namespace Xamarin.Forms.Build.Tasks
 
                                        try
                                        {
-                                               Log(2, "   Replacing {0}.InitializeComponent ()... ", typeDef.Name);
+                                               LogString(2, "   Replacing {0}.InitializeComponent ()... ", typeDef.Name);
                                                var body = new MethodBody(initComp);
                                                var il = body.GetILProcessor();
                                                il.Emit(OpCodes.Nop);
@@ -291,7 +291,7 @@ namespace Xamarin.Forms.Build.Tasks
 
                                        if (OptimizeIL)
                                        {
-                                               Log(2, "   Optimizing IL... ");
+                                               LogString(2, "   Optimizing IL... ");
                                                initComp.Body.OptimizeMacros();
                                                LogLine(2, "done");
                                        }
@@ -299,7 +299,7 @@ namespace Xamarin.Forms.Build.Tasks
                                        if (OutputGeneratedILAsCode)
                                        {
                                                var filepath = Path.Combine(Path.GetDirectoryName(Assembly), typeDef.FullName + ".decompiled.cs");
-                                               Log(2, "   Decompiling {0} into {1}...", typeDef.FullName, filepath);
+                                               LogString(2, "   Decompiling {0} into {1}...", typeDef.FullName, filepath);
                                                var decompilerContext = new DecompilerContext(module);
                                                using (var writer = new StreamWriter(filepath))
                                                {
@@ -320,7 +320,7 @@ namespace Xamarin.Forms.Build.Tasks
                                                LogLine(2, "  Removing compiled xaml resources");
                                        foreach (var resource in resourcesToPrune)
                                        {
-                                               Log(2, "   Removing {0}... ", resource.Name);
+                                               LogString(2, "   Removing {0}... ", resource.Name);
                                                module.Resources.Remove(resource);
                                                LogLine(2, "done");
                                        }
@@ -335,7 +335,7 @@ namespace Xamarin.Forms.Build.Tasks
                                return success;
                        }
 
-                       Log(1, "Writing the assembly... ");
+                       LogString(1, "Writing the assembly... ");
                        try
                        {
                                assemblyDefinition.Write(Assembly, new WriterParameters