summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Build.Tasks
diff options
context:
space:
mode:
authorStephane Delcroix <stephane@delcroix.org>2016-11-16 20:51:53 +0100
committerJason Smith <jason.smith@xamarin.com>2016-11-16 11:51:53 -0800
commitd97dfe91b28a30e9a350155262b1149eed8d462f (patch)
tree0dd0a9cab6461d9207410c0d84e7cd8dca796af1 /Xamarin.Forms.Build.Tasks
parentbc7755ca56e3958318434263d74611c249a59aff (diff)
downloadxamarin-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.cs9
-rw-r--r--Xamarin.Forms.Build.Tasks/XamlGTask.cs22
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)