public static DbgLocalsValueNodeInfo[] ToLocalsValueNodeInfoArray(DbgLanguage language, DbgRuntime runtime, DbgEngineLocalsValueNodeInfo[] engineNodeInfos) { var infos = new DbgLocalsValueNodeInfo[engineNodeInfos.Length]; var nodes = new DbgValueNode[engineNodeInfos.Length]; for (int i = 0; i < nodes.Length; i++) { var node = new DbgValueNodeImpl(language, runtime, engineNodeInfos[i].ValueNode); nodes[i] = node; infos[i] = new DbgLocalsValueNodeInfo(engineNodeInfos[i].Kind, node); } runtime.CloseOnContinue(nodes); return(infos); }
DbgLocalsValueNodeInfo[] GetSortedVariables(DbgEvaluationInfo evalInfo, DbgLocalsValueNodeInfo[] variables, DbgValueFormatterOptions nameFormatterOptions, CultureInfo?cultureInfo) { if (variables.Length <= 1) { return(variables); } var sortParameters = debuggerSettings.SortParameters; var sortLocals = debuggerSettings.SortLocals; // If the default options are used, don't sort at all. Let the locals provider // decide how to sort them. if (!sortParameters && !sortLocals) { return(variables); } var output = new DbgStringBuilderTextWriter(); if (debuggerSettings.GroupParametersAndLocalsTogether) { return(variables.OrderBy(a => GetName(evalInfo, output, a.ValueNode, nameFormatterOptions, cultureInfo), StringComparer.OrdinalIgnoreCase).ToArray()); } else { var locals = variables.Where(a => a.Kind == DbgLocalsValueNodeKind.Local).ToArray(); var parameters = variables.Where(a => a.Kind == DbgLocalsValueNodeKind.Parameter).ToArray(); var others = variables.Where(a => a.Kind != DbgLocalsValueNodeKind.Local && a.Kind != DbgLocalsValueNodeKind.Parameter).ToArray(); if (sortLocals && locals.Length > 1) { locals = locals.OrderBy(a => GetName(evalInfo, output, a.ValueNode, nameFormatterOptions, cultureInfo), StringComparer.OrdinalIgnoreCase).ToArray(); } if (sortParameters && parameters.Length > 1) { parameters = parameters.OrderBy(a => GetName(evalInfo, output, a.ValueNode, nameFormatterOptions, cultureInfo), StringComparer.OrdinalIgnoreCase).ToArray(); } if ((sortLocals || sortParameters) && others.Length > 1) { others = others.OrderBy(a => GetName(evalInfo, output, a.ValueNode, nameFormatterOptions, cultureInfo), StringComparer.OrdinalIgnoreCase).ToArray(); } var res = new DbgLocalsValueNodeInfo[locals.Length + parameters.Length + others.Length]; int w = 0; for (int i = 0; i < parameters.Length; i++) { res[w++] = parameters[i]; } for (int i = 0; i < locals.Length; i++) { res[w++] = locals[i]; } for (int i = 0; i < others.Length; i++) { res[w++] = others[i]; } if (w != res.Length) { throw new InvalidOperationException(); } return(res); } }