public void Set(string variableName, string value, bool isEditable = true, CMakeCommand command = null) { variableName = ResolveString(variableName); value = ResolveString(value); if (Contains(variableName)) { CMakeVariable v = variables [variableName]; v.Value = value; v.IsEditable = false; v.Commands.Add(command); return; } AddVariable(variableName, value, isEditable, command); }
void TraverseArguments(CMakeCommand command, Action <string, CMakeCommand> callback, HashSet <CMakeCommand> commands = null) { CMakeVariableManager vm = parent.VariableManager; if (commands == null) { commands = new HashSet <CMakeCommand> (); } if (commands.Contains(command)) { return; } commands.Add(command); foreach (var arg in command.Arguments) { foreach (var val in arg.GetValues()) { if (vm.IsVariable(val)) { CMakeVariable v = vm.GetVariable(val.Substring(2, val.Length - 3)); if (v == null) { continue; } foreach (var c in v.Commands) { TraverseArguments(c, callback, commands); } } else { callback(val, command); } } } }