Example #1
0
 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);
        }
Example #4
0
        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));
            }
        }
Example #6
0
        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);
                    }
                }
            }
        }