VariableEntry(IVariableDataSource dataSource, IJobQueue jobQueue, RefreshVariableJob.Factory refreshVariableJobFactory, IDebugSessionContext debugSessionContext, IVariableExpander variableExpander) { _dataSource = dataSource; _jobQueue = jobQueue; _refreshVariableJobFactory = refreshVariableJobFactory; _debugSessionContext = debugSessionContext; _variableExpander = variableExpander; }
/// <summary> /// Get's a variable, but fails with more detailed message if it doesn't exist. Can be called with child variable names /// to follow variable expansion tree. /// </summary> public static IVariableInspector GetVariable(this IVariableExpander variableExpander, params string[] names) { Parameter.ThrowIfIsInvalid(names.Length, 0, nameof(names)); IVariableInspector variableInspector = null; foreach (var name in names) { variableInspector = GetVariablePart(variableExpander, name); variableExpander = variableInspector; } return(variableInspector); }
private static IVariableInspector GetVariablePart(IVariableExpander variableExpander, string name) { IVariableInspector inspector; if (variableExpander.Variables.TryGetValue(name, out inspector)) { return(inspector); } string existingVariables = variableExpander.Variables.ToReadableString(); throw new KeyNotFoundException("Variable " + name + " not found. Existing variables: " + existingVariables); }
private string ExpandVariables(string path, IVariableExpander expander, IProjectImportService service) { if (string.IsNullOrEmpty(path)) { return(path); } path = expander.ExpandVariables(path); if (path.Contains("$(")) { service.Logger.LogLine("Warning: could not expand CrossWorks-specific path: " + path); } return(path); }
/// <summary> /// Verify the child variables match the expected names and values. /// </summary> /// <param name="variableExpander">The parent to the variables</param> /// <param name="variables">An alternating list of variable name and variabl value.</param> public static void AssertVariables(this IVariableExpander variableExpander, params string[] variables) { if (variables.Length % 2 != 0) { throw new ArgumentException("Missing a property!"); } for (int i = 0; i < variables.Length; i += 2) { string name = variables[i]; string value = variables[i + 1]; Assert.True(variableExpander.Variables.ContainsKey(name), "Expected variable name '{0}'.".FormatInvariantWithArgs(name)); Assert.True(string.Equals(variableExpander.Variables[name].Value, value, StringComparison.Ordinal), "Expected variable value '{0}' for '{1}'. Actual value is '{2}'.".FormatInvariantWithArgs(value, name, variableExpander.Variables[name].Value)); } }
private void ImportProjectFolderRecursively(XmlElement projectOrFolder, ImportedExternalProject.ConstructedVirtualDirectory constructedDir, ProjectImportParameters parameters, IVariableExpander expander, IProjectImportService service) { foreach (var el in projectOrFolder.ChildNodes.OfType <XmlElement>()) { if (el.Name == "file") { string relPath = ExpandVariables(el.GetAttribute("file_name"), expander, service); if (!string.IsNullOrEmpty(relPath) && !relPath.EndsWith(".vec")) { string fullPath = Path.Combine(Path.GetDirectoryName(parameters.ProjectFile), relPath); constructedDir.AddFile(fullPath, relPath.EndsWith(".h", StringComparison.InvariantCultureIgnoreCase)); } } else if (el.Name == "folder") { string name = el.GetAttribute("Name"); if (string.IsNullOrEmpty(name)) { name = "Subfolder"; } if (name == "Source Files" || name == "Header Files") { //Visual Studio already provides filters for source/header files, so we don't need to specify them explicitly ImportProjectFolderRecursively(el, constructedDir, parameters, expander, service); } else { ImportProjectFolderRecursively(el, constructedDir.ProvideSudirectory(name), parameters, expander, service); } } } }