/// <summary> /// Expands properties and items in the argument, and verifies that the result is consistent /// with a scalar parameter type. /// </summary> /// <param name="function">Function name for errors</param> /// <param name="argumentNode">Argument to be expanded</param> /// <param name="state"></param> /// <param name="isFilePath">True if this is afile name and the path should be normalized</param> /// <returns>Scalar result</returns> private static string ExpandArgumentForScalarParameter(string function, GenericExpressionNode argumentNode, ConditionEvaluator.IConditionEvaluationState state, bool isFilePath = true) { string argument = argumentNode.GetUnexpandedValue(state); // Fix path before expansion if (isFilePath) { argument = FileUtilities.FixFilePath(argument); } IList <TaskItem> items = state.ExpandIntoTaskItems(argument); string expandedValue = String.Empty; if (items.Count == 0) { // Empty argument, that's fine. } else if (items.Count == 1) { expandedValue = items[0].ItemSpec; } else // too many items for the function { // We only allow a single item to be passed into a scalar parameter. ProjectErrorUtilities.ThrowInvalidProject( state.ElementLocation, "CannotPassMultipleItemsIntoScalarFunction", function, argument, state.ExpandIntoString(argument)); } return(expandedValue); }
private List <string> ExpandArgumentAsFileList(GenericExpressionNode argumentNode, ConditionEvaluator.IConditionEvaluationState state, bool isFilePath = true) { string argument = argumentNode.GetUnexpandedValue(state); // Fix path before expansion if (isFilePath) { argument = FileUtilities.FixFilePath(argument); } IList <TaskItem> expanded = state.ExpandIntoTaskItems(argument); var expandedCount = expanded.Count; if (expandedCount == 0) { return(null); } var list = new List <string>(capacity: expandedCount); for (var i = 0; i < expandedCount; i++) { var item = expanded[i]; if (state.EvaluationDirectory != null && !Path.IsPathRooted(item.ItemSpec)) { list.Add(Path.GetFullPath(Path.Combine(state.EvaluationDirectory, item.ItemSpec))); } else { list.Add(item.ItemSpec); } } return(list); }