/// <summary> /// Creates a new <see cref="NodeEvaluationResult" />. /// </summary> /// <param name="variable">Variable provider.</param> /// <returns>Result.</returns> public NodeEvaluationResult Create(INodeVariable variable) { Utilities.ArgumentNotNull("variable", variable); int id = variable.Id; NodeStackFrame stackFrame = variable.StackFrame; NodeEvaluationResult parent = variable.Parent; string name = variable.Name; string fullName = GetFullName(parent, variable.Name, ref name); string stringValue, hexValue = null; string typeName = variable.TypeName; var type = NodeExpressionType.None; switch (typeName) { case "undefined": stringValue = "undefined"; typeName = NodeVariableType.Undefined; break; case "null": stringValue = "null"; typeName = NodeVariableType.Null; break; case "number": stringValue = variable.Value ?? variable.Text; typeName = NodeVariableType.Number; int intValue; if (int.TryParse(stringValue, out intValue)) { hexValue = string.Format(CultureInfo.InvariantCulture, "0x{0:x}", intValue); } break; case "boolean": stringValue = (variable.Value ?? variable.Text).ToLowerInvariant(); typeName = NodeVariableType.Boolean; type |= NodeExpressionType.Boolean; break; case "regexp": stringValue = variable.Value ?? variable.Text; typeName = NodeVariableType.Regexp; type |= NodeExpressionType.Expandable; break; case "function": stringValue = string.IsNullOrEmpty(variable.Text) ? string.Format(CultureInfo.InvariantCulture, "{{{0}}}", NodeVariableType.Function) : variable.Text; typeName = NodeVariableType.Function; type |= NodeExpressionType.Function | NodeExpressionType.Expandable; break; case "string": stringValue = variable.Value ?? variable.Text; typeName = NodeVariableType.String; type |= NodeExpressionType.String; break; case "object": stringValue = variable.Class == NodeVariableType.Object ? "{...}" : string.Format(CultureInfo.InvariantCulture, "{{{0}}}", variable.Class); typeName = NodeVariableType.Object; type |= NodeExpressionType.Expandable; break; case "error": stringValue = variable.Value ?? variable.Text; if (!string.IsNullOrEmpty(stringValue) && stringValue.StartsWith("Error: ", StringComparison.Ordinal)) { stringValue = stringValue.Substring(7); } typeName = NodeVariableType.Error; type |= NodeExpressionType.Expandable; break; default: stringValue = variable.Value ?? variable.Text; typeName = NodeVariableType.Unknown; break; } if (variable.Attributes.HasFlag(NodePropertyAttributes.ReadOnly)) { type |= NodeExpressionType.ReadOnly; } if (variable.Attributes.HasFlag(NodePropertyAttributes.DontEnum)) { type |= NodeExpressionType.Private; } return new NodeEvaluationResult(id, stringValue, hexValue, typeName, name, fullName, type, stackFrame); }
/// <summary> /// Creates a new <see cref="NodeEvaluationResult" />. /// </summary> /// <param name="variable">Variable provider.</param> /// <returns>Result.</returns> public NodeEvaluationResult Create(INodeVariable variable) { Utilities.ArgumentNotNull(nameof(variable), variable); var id = variable.Id; var stackFrame = variable.StackFrame; var parent = variable.Parent; var name = variable.Name; var fullName = GetFullName(parent, variable.Name, ref name); string stringValue, hexValue = null; var typeName = variable.TypeName; var type = NodeExpressionType.None; switch (typeName) { case "undefined": stringValue = "undefined"; typeName = NodeVariableType.Undefined; break; case "null": stringValue = "null"; typeName = NodeVariableType.Null; break; case "number": stringValue = variable.Value ?? variable.Text; typeName = NodeVariableType.Number; int intValue; if (int.TryParse(stringValue, out intValue)) { hexValue = string.Format(CultureInfo.InvariantCulture, "0x{0:x}", intValue); } break; case "boolean": stringValue = (variable.Value ?? variable.Text).ToLowerInvariant(); typeName = NodeVariableType.Boolean; type |= NodeExpressionType.Boolean; break; case "regexp": stringValue = variable.Value ?? variable.Text; typeName = NodeVariableType.Regexp; type |= NodeExpressionType.Expandable; break; case "function": stringValue = string.IsNullOrEmpty(variable.Text) ? string.Format(CultureInfo.InvariantCulture, "{{{0}}}", NodeVariableType.Function) : variable.Text; typeName = NodeVariableType.Function; type |= NodeExpressionType.Function | NodeExpressionType.Expandable; break; case "string": stringValue = variable.Value ?? variable.Text; typeName = NodeVariableType.String; type |= NodeExpressionType.String; break; case "object": stringValue = variable.Class == NodeVariableType.Object ? "{...}" : string.Format(CultureInfo.InvariantCulture, "{{{0}}}", variable.Class); typeName = NodeVariableType.Object; type |= NodeExpressionType.Expandable; break; case "error": stringValue = variable.Value ?? variable.Text; if (!string.IsNullOrEmpty(stringValue) && stringValue.StartsWith("Error: ", StringComparison.Ordinal)) { stringValue = stringValue.Substring(7); } typeName = NodeVariableType.Error; type |= NodeExpressionType.Expandable; break; default: stringValue = variable.Value ?? variable.Text; typeName = NodeVariableType.Unknown; break; } if (variable.Attributes.HasFlag(NodePropertyAttributes.ReadOnly)) { type |= NodeExpressionType.ReadOnly; } if (variable.Attributes.HasFlag(NodePropertyAttributes.DontEnum)) { type |= NodeExpressionType.Private; } return(new NodeEvaluationResult(id, stringValue, hexValue, typeName, name, fullName, type, stackFrame)); }