From: Atsushi Eno Date: Mon, 2 Dec 2013 10:05:12 +0000 (+0900) Subject: Some parser error message got source string for Condition evaluation. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=6754431cc838ad2439d35988bd2e56d89bf89a3f;p=mono.git Some parser error message got source string for Condition evaluation. --- diff --git a/mcs/class/Microsoft.Build/Microsoft.Build.Exceptions/InvalidProjectFileException.cs b/mcs/class/Microsoft.Build/Microsoft.Build.Exceptions/InvalidProjectFileException.cs index 756ed779914..ad05ff6403a 100644 --- a/mcs/class/Microsoft.Build/Microsoft.Build.Exceptions/InvalidProjectFileException.cs +++ b/mcs/class/Microsoft.Build/Microsoft.Build.Exceptions/InvalidProjectFileException.cs @@ -61,7 +61,7 @@ namespace Microsoft.Build.Exceptions } internal InvalidProjectFileException (ILocation start, string message, string errorSubcategory = null, string errorCode = null, string helpKeyword = null) - : this (null, 0, start != null ? start.Column : 0, 0, 0, message, errorSubcategory, errorCode, helpKeyword) + : this (start != null ? start.File : null, 0, start != null ? start.Column : 0, 0, 0, message, errorSubcategory, errorCode, helpKeyword) { } internal InvalidProjectFileException (ElementLocation start, ElementLocation end, string message, diff --git a/mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectInstance.cs b/mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectInstance.cs index 5edaa5007c7..36158b14b3a 100644 --- a/mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectInstance.cs +++ b/mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectInstance.cs @@ -385,7 +385,7 @@ namespace Microsoft.Build.Execution public bool Build (string[] targets, IEnumerable loggers, out IDictionary targetOutputs) { - return Build (targets, loggers, new ForwardingLoggerRecord [0], out targetOutputs); + return Build (targets, loggers, new ForwardingLoggerRecord [0], out targetOutputs); } public bool Build (string[] targets, IEnumerable loggers, IEnumerable remoteLoggers, out IDictionary targetOutputs) diff --git a/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionConstructs.cs b/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionConstructs.cs index 40777fe52d9..358f58e925c 100644 --- a/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionConstructs.cs +++ b/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionConstructs.cs @@ -58,9 +58,9 @@ namespace Microsoft.Build.Internal.Expressions public int Column { get { return list.Count == 0 ? 0 : list [0].Column; } } - //public string File { - // get { return list.Count == 0 ? null : list [0].File; } - //} + public string File { + get { return list.Count == 0 ? null : list [0].File; } + } public string ToLocationString () { return list.Count == 0 ? null : list [0].Location.ToLocationString (); @@ -99,9 +99,9 @@ namespace Microsoft.Build.Internal.Expressions public int Column { get { return Location.Column; } } - //public string File { - // get { return Location.File; } - //} + public string File { + get { return Location.File; } + } public string ToLocationString () { return Location.ToLocationString (); diff --git a/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionEvaluator.cs b/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionEvaluator.cs index f91a9cfbb75..4aa9b259f2d 100644 --- a/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionEvaluator.cs +++ b/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionEvaluator.cs @@ -65,9 +65,9 @@ namespace Microsoft.Build.Internal.Expressions */ } - EvaluationContext CreateContext () + EvaluationContext CreateContext (string source) { - return new EvaluationContext (this); + return new EvaluationContext (source, this); } public Project Project { get; private set; } @@ -91,7 +91,7 @@ namespace Microsoft.Build.Internal.Expressions { if (exprList == null) throw new ArgumentNullException ("exprList"); - return string.Concat (exprList.Select (e => e.EvaluateAsString (CreateContext ()))); + return string.Concat (exprList.Select (e => e.EvaluateAsString (CreateContext (source)))); } public bool EvaluateAsBoolean (string source) @@ -100,7 +100,7 @@ namespace Microsoft.Build.Internal.Expressions var el = new ExpressionParser ().Parse (source, ExpressionValidationType.StrictBoolean); if (el.Count () != 1) throw new InvalidProjectFileException ("Unexpected number of tokens: " + el.Count ()); - return el.First ().EvaluateAsBoolean (CreateContext ()); + return el.First ().EvaluateAsBoolean (CreateContext (source)); } catch (yyParser.yyException ex) { throw new InvalidProjectFileException (string.Format ("failed to evaluate expression as boolean: '{0}': {1}", source, ex.Message), ex); } @@ -109,10 +109,13 @@ namespace Microsoft.Build.Internal.Expressions class EvaluationContext { - public EvaluationContext (ExpressionEvaluator evaluator) + public EvaluationContext (string source, ExpressionEvaluator evaluator) { + Source = source; Evaluator = evaluator; } + + public string Source { get; private set; } public ExpressionEvaluator Evaluator { get; private set; } public object ContextItem { get; set; } @@ -187,7 +190,7 @@ namespace Microsoft.Build.Internal.Expressions public abstract bool EvaluateAsBoolean (EvaluationContext context); public abstract object EvaluateAsObject (EvaluationContext context); - public bool EvaluateStringAsBoolean (string ret) + public bool EvaluateStringAsBoolean (EvaluationContext context, string ret) { if (ret != null) { if (ret.Equals ("TRUE", StringComparison.InvariantCultureIgnoreCase)) @@ -195,7 +198,7 @@ namespace Microsoft.Build.Internal.Expressions else if (ret.Equals ("FALSE", StringComparison.InvariantCultureIgnoreCase)) return false; } - throw new InvalidProjectFileException (this.Location, null, string.Format ("String is evaluated as '{0}' and cannot be converted to boolean", ret)); + throw new InvalidProjectFileException (this.Location, string.Format ("Condition '{0}' is evaluated as '{1}' and cannot be converted to boolean", context.Source, ret)); } } @@ -298,7 +301,7 @@ namespace Microsoft.Build.Internal.Expressions public override bool EvaluateAsBoolean (EvaluationContext context) { var ret = EvaluateAsString (context); - return EvaluateStringAsBoolean (ret); + return EvaluateStringAsBoolean (context, ret); } public override string EvaluateAsString (EvaluationContext context) @@ -395,7 +398,7 @@ namespace Microsoft.Build.Internal.Expressions { public override bool EvaluateAsBoolean (EvaluationContext context) { - return EvaluateStringAsBoolean (EvaluateAsString (context)); + return EvaluateStringAsBoolean (context, EvaluateAsString (context)); } public override string EvaluateAsString (EvaluationContext context) @@ -425,7 +428,7 @@ namespace Microsoft.Build.Internal.Expressions { public override bool EvaluateAsBoolean (EvaluationContext context) { - return EvaluateStringAsBoolean (EvaluateAsString (context)); + return EvaluateStringAsBoolean (context, EvaluateAsString (context)); } public override string EvaluateAsString (EvaluationContext context) @@ -454,7 +457,7 @@ namespace Microsoft.Build.Internal.Expressions public override bool EvaluateAsBoolean (EvaluationContext context) { var ret = EvaluateAsString (context); - return EvaluateStringAsBoolean (ret); + return EvaluateStringAsBoolean (context, ret); } public override string EvaluateAsString (EvaluationContext context) @@ -498,7 +501,7 @@ namespace Microsoft.Build.Internal.Expressions if (Arguments.Count != 1) throw new InvalidProjectFileException (Location, "Function 'Exists' expects 1 argument"); string val = Arguments.First ().EvaluateAsString (context); - return Directory.Exists (val) || File.Exists (val); + return Directory.Exists (val) || System.IO.File.Exists (val); } if (string.Equals (Name.Name, "HasTrailingSlash", StringComparison.OrdinalIgnoreCase)) { if (Arguments.Count != 1) diff --git a/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionTokenizer.cs b/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionTokenizer.cs index 3ebbc4b89fa..9760ad2acbd 100644 --- a/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionTokenizer.cs +++ b/mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionTokenizer.cs @@ -290,7 +290,7 @@ namespace Microsoft.Build.Internal.Expressions { //int Line { get; } int Column { get; } - //string File { get; } + string File { get; } string ToLocationString (); } @@ -299,7 +299,7 @@ namespace Microsoft.Build.Internal.Expressions { //public int Line { get; set; } public int Column { get; set; } - //public string File { get; set; } + public string File { get; set; } public string ToLocationString () { diff --git a/mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/BuildSubmissionTest.cs b/mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/BuildSubmissionTest.cs index 4d12f94db39..df2febcbf75 100644 --- a/mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/BuildSubmissionTest.cs +++ b/mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/BuildSubmissionTest.cs @@ -72,8 +72,9 @@ namespace MonoTests.Microsoft.Build.Execution var root = ProjectRootElement.Create (xml); root.FullPath = "BuildSubmissionTest.TaskOutputsToLoggers.proj"; var proj = new ProjectInstance (root); + Assert.AreEqual ("$(X)", root.Targets.First ().ItemGroups.First ().Items.First ().Condition, "#0"); var sw = new StringWriter (); - Assert.IsFalse (proj.Build (new ILogger [] {new ConsoleLogger (default (LoggerVerbosity), msg => sw.Write (msg), null, null)}), "#1"); + Assert.IsFalse (proj.Build (new ILogger [] {new ConsoleLogger (LoggerVerbosity.Diagnostic, sw.WriteLine, null, null)}), "#1"); Assert.IsTrue (sw.ToString ().Contains ("$(X)"), "#2"); }