diff options
author | Stephane Delcroix <stephane@delcroix.org> | 2016-11-16 20:51:53 +0100 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-11-16 11:51:53 -0800 |
commit | d97dfe91b28a30e9a350155262b1149eed8d462f (patch) | |
tree | 0dd0a9cab6461d9207410c0d84e7cd8dca796af1 /Xamarin.Forms.Build.Tasks | |
parent | bc7755ca56e3958318434263d74611c249a59aff (diff) | |
download | xamarin-forms-d97dfe91b28a30e9a350155262b1149eed8d462f.tar.gz xamarin-forms-d97dfe91b28a30e9a350155262b1149eed8d462f.tar.bz2 xamarin-forms-d97dfe91b28a30e9a350155262b1149eed8d462f.zip |
[XamlC] use correct filePath for XamlC error reporting (#513)
* [XamlG] decorate partial classes with [XamlFile] attribute
* [XamlC] use correct filePath for XamlC error reporting
* [docs] update docs
Diffstat (limited to 'Xamarin.Forms.Build.Tasks')
-rw-r--r-- | Xamarin.Forms.Build.Tasks/XamlCTask.cs | 9 | ||||
-rw-r--r-- | Xamarin.Forms.Build.Tasks/XamlGTask.cs | 22 |
2 files changed, 21 insertions, 10 deletions
diff --git a/Xamarin.Forms.Build.Tasks/XamlCTask.cs b/Xamarin.Forms.Build.Tasks/XamlCTask.cs index 689a6a59..d8b80233 100644 --- a/Xamarin.Forms.Build.Tasks/XamlCTask.cs +++ b/Xamarin.Forms.Build.Tasks/XamlCTask.cs @@ -141,6 +141,11 @@ namespace Xamarin.Forms.Build.Tasks } Logger.LogLine(2, ""); + CustomAttribute xamlFilePathAttr; + var xamlFilePath = typeDef.HasCustomAttributes && (xamlFilePathAttr = typeDef.CustomAttributes.FirstOrDefault(ca => ca.AttributeType.FullName == "Xamarin.Forms.Xaml.XamlFilePathAttribute")) != null ? + (string)xamlFilePathAttr.ConstructorArguments [0].Value : + resource.Name; + var initCompRuntime = typeDef.Methods.FirstOrDefault(md => md.Name == "__InitComponentRuntime"); if (initCompRuntime != null) Logger.LogLine(2, " __InitComponentRuntime already exists... not duplicating"); @@ -167,7 +172,7 @@ namespace Xamarin.Forms.Build.Tasks success = false; Logger.LogLine(2, "failed."); thrownExceptions?.Add(e); - Logger.LogException(null, null, null, resource.Name, e); + Logger.LogException(null, null, null, xamlFilePath, e); Logger.LogLine(4, e.StackTrace); continue; } @@ -307,4 +312,4 @@ namespace Xamarin.Forms.Build.Tasks } } } -}
\ No newline at end of file +} diff --git a/Xamarin.Forms.Build.Tasks/XamlGTask.cs b/Xamarin.Forms.Build.Tasks/XamlGTask.cs index a0813a5c..ada6bb68 100644 --- a/Xamarin.Forms.Build.Tasks/XamlGTask.cs +++ b/Xamarin.Forms.Build.Tasks/XamlGTask.cs @@ -101,7 +101,7 @@ namespace Xamarin.Forms.Build.Tasks } internal static void GenerateCode(string rootType, string rootNs, CodeTypeReference baseType, - IDictionary<string, CodeTypeReference> namesAndTypes, string outFile) + IDictionary<string, CodeTypeReference> namesAndTypes, string xamlFile, string outFile) { if (rootType == null) { @@ -113,8 +113,13 @@ namespace Xamarin.Forms.Build.Tasks var declNs = new CodeNamespace(rootNs); ccu.Namespaces.Add(declNs); - var declType = new CodeTypeDeclaration(rootType); - declType.IsPartial = true; + var declType = new CodeTypeDeclaration(rootType) { + IsPartial = true, + CustomAttributes = { + new CodeAttributeDeclaration(new CodeTypeReference($"global::{typeof(XamlFilePathAttribute).FullName}"), + new CodeAttributeArgument(new CodePrimitiveExpression(xamlFile))) + } + }; declType.BaseTypes.Add(baseType); declNs.Types.Add(declType); @@ -124,7 +129,7 @@ namespace Xamarin.Forms.Build.Tasks Name = "InitializeComponent", CustomAttributes = { - new CodeAttributeDeclaration(new CodeTypeReference(typeof (GeneratedCodeAttribute)), + new CodeAttributeDeclaration(new CodeTypeReference($"global::{typeof (GeneratedCodeAttribute).FullName}"), new CodeAttributeArgument(new CodePrimitiveExpression("Xamarin.Forms.Build.Tasks.XamlG")), new CodeAttributeArgument(new CodePrimitiveExpression("0.0.0.0"))) } @@ -132,7 +137,7 @@ namespace Xamarin.Forms.Build.Tasks declType.Members.Add(initcomp); initcomp.Statements.Add(new CodeMethodInvokeExpression( - new CodeTypeReferenceExpression(new CodeTypeReference("global::Xamarin.Forms.Xaml.Extensions")), + new CodeTypeReferenceExpression(new CodeTypeReference($"global::{typeof(Extensions).FullName}")), "LoadFromXaml", new CodeThisReferenceExpression(), new CodeTypeOfExpression(declType.Name))); foreach (var entry in namesAndTypes) @@ -146,7 +151,7 @@ namespace Xamarin.Forms.Build.Tasks Type = type, CustomAttributes = { - new CodeAttributeDeclaration(new CodeTypeReference(typeof (GeneratedCodeAttribute)), + new CodeAttributeDeclaration(new CodeTypeReference($"global::{typeof (GeneratedCodeAttribute).FullName}"), new CodeAttributeArgument(new CodePrimitiveExpression("Xamarin.Forms.Build.Tasks.XamlG")), new CodeAttributeArgument(new CodePrimitiveExpression("0.0.0.0"))) } @@ -156,7 +161,7 @@ namespace Xamarin.Forms.Build.Tasks var find_invoke = new CodeMethodInvokeExpression( new CodeMethodReferenceExpression( - new CodeTypeReferenceExpression(new CodeTypeReference("global::Xamarin.Forms.NameScopeExtensions")), + new CodeTypeReferenceExpression(new CodeTypeReference($"global::{typeof(NameScopeExtensions).FullName}")), "FindByName", type), new CodeThisReferenceExpression(), new CodePrimitiveExpression(name)); @@ -177,9 +182,10 @@ namespace Xamarin.Forms.Build.Tasks string rootType, rootNs; CodeTypeReference baseType; IDictionary<string, CodeTypeReference> namesAndTypes; + using (StreamReader reader = File.OpenText(xamlFile)) ParseXaml(reader, out rootType, out rootNs, out baseType, out namesAndTypes); - GenerateCode(rootType, rootNs, baseType, namesAndTypes, outFile); + GenerateCode(rootType, rootNs, baseType, namesAndTypes, System.IO.Path.GetFullPath(xamlFile), outFile); } static Dictionary<string, CodeTypeReference> GetNamesAndTypes(XmlNode root, XmlNamespaceManager nsmgr) |