private static string GetFullName(EvalResultDataItem parent, string name, Formatter formatter) { var parentFullName = parent.ChildFullNamePrefix; if (parentFullName == null) { return(null); } if (parent.ChildShouldParenthesize) { parentFullName = $"({parentFullName})"; } var parentRuntimeType = parent.Value.Type.GetLmrType(); if (!parent.DeclaredTypeAndInfo.Type.Equals(parentRuntimeType)) { bool sawInvalidIdentifier; var parentTypeName = formatter.GetTypeName(new TypeAndCustomInfo(parentRuntimeType), escapeKeywordIdentifiers: true, sawInvalidIdentifier: out sawInvalidIdentifier); if (sawInvalidIdentifier) { return(null); // Wouldn't be parseable. } parentFullName = formatter.GetCastExpression(parentFullName, parentTypeName, parenthesizeEntireExpression: true); } return(parentFullName + name); }
private static string GetFullName(EvalResultDataItem parent, string name, Formatter formatter) { var parentFullName = parent.ChildFullNamePrefix; if (parent.ChildShouldParenthesize) { parentFullName = $"({parentFullName})"; } var parentRuntimeType = parent.Value.Type.GetLmrType(); if (!parent.DeclaredType.Equals(parentRuntimeType)) { parentFullName = formatter.GetCastExpression( parentFullName, formatter.GetTypeName(parentRuntimeType, escapeKeywordIdentifiers: true), parenthesizeEntireExpression: true); } return(parentFullName + name); }
private static string GetFullName(EvalResultDataItem parent, string name, Formatter formatter) { var parentFullName = parent.ChildFullNamePrefix; if (parent.ChildShouldParenthesize) { parentFullName = $"({parentFullName})"; } var parentRuntimeType = parent.Value.Type.GetLmrType(); if (!parent.DeclaredTypeAndInfo.Type.Equals(parentRuntimeType)) { parentFullName = formatter.GetCastExpression( parentFullName, formatter.GetTypeName(new TypeAndCustomInfo(parentRuntimeType), escapeKeywordIdentifiers: true), parenthesizeEntireExpression: true); } return parentFullName + name; }
private static string MakeFullName( Formatter formatter, string name, TypeAndCustomInfo typeDeclaringMemberAndInfo, bool memberAccessRequiresExplicitCast, bool memberIsStatic, EvalResultDataItem parent) { // If the parent is an exception thrown during evaluation, // there is no valid fullname expression for the child. if (parent.Value.EvalFlags.Includes(DkmEvaluationResultFlags.ExceptionThrown)) { return null; } var parentFullName = parent.ChildFullNamePrefix; if (parentFullName == null) { return null; } if (parent.ChildShouldParenthesize) { parentFullName = $"({parentFullName})"; } if (!typeDeclaringMemberAndInfo.Type.IsInterface) { string qualifier; if (memberIsStatic) { qualifier = formatter.GetTypeName(typeDeclaringMemberAndInfo, escapeKeywordIdentifiers: false); } else if (memberAccessRequiresExplicitCast) { var typeName = formatter.GetTypeName(typeDeclaringMemberAndInfo, escapeKeywordIdentifiers: true); qualifier = formatter.GetCastExpression( parentFullName, typeName, parenthesizeEntireExpression: true); } else { qualifier = parentFullName; } return $"{qualifier}.{name}"; } else { // NOTE: This should never interact with debugger proxy types: // 1) Interfaces cannot have debugger proxy types. // 2) Debugger proxy types cannot be interfaces. if (typeDeclaringMemberAndInfo.Type.Equals(parent.DeclaredTypeAndInfo.Type)) { var memberAccessTemplate = parent.ChildShouldParenthesize ? "({0}).{1}" : "{0}.{1}"; return string.Format(memberAccessTemplate, parent.ChildFullNamePrefix, name); } else { var interfaceName = formatter.GetTypeName(typeDeclaringMemberAndInfo, escapeKeywordIdentifiers: true); var memberAccessTemplate = parent.ChildShouldParenthesize ? "(({0})({1})).{2}" : "(({0}){1}).{2}"; return string.Format(memberAccessTemplate, interfaceName, parent.ChildFullNamePrefix, name); } } }
private static string MakeFullName( Formatter formatter, string name, TypeAndCustomInfo typeDeclaringMemberAndInfo, bool memberAccessRequiresExplicitCast, bool memberIsStatic, EvalResultDataItem parent) { // If the parent is an exception thrown during evaluation, // there is no valid fullname expression for the child. if (parent.Value.EvalFlags.Includes(DkmEvaluationResultFlags.ExceptionThrown)) { return(null); } var parentFullName = parent.ChildFullNamePrefix; if (parentFullName == null) { return(null); } if (parent.ChildShouldParenthesize) { parentFullName = $"({parentFullName})"; } if (!typeDeclaringMemberAndInfo.Type.IsInterface) { string qualifier; if (memberIsStatic) { qualifier = formatter.GetTypeName(typeDeclaringMemberAndInfo, escapeKeywordIdentifiers: false); } else if (memberAccessRequiresExplicitCast) { var typeName = formatter.GetTypeName(typeDeclaringMemberAndInfo, escapeKeywordIdentifiers: true); qualifier = formatter.GetCastExpression( parentFullName, typeName, parenthesizeEntireExpression: true); } else { qualifier = parentFullName; } return($"{qualifier}.{name}"); } else { // NOTE: This should never interact with debugger proxy types: // 1) Interfaces cannot have debugger proxy types. // 2) Debugger proxy types cannot be interfaces. if (typeDeclaringMemberAndInfo.Type.Equals(parent.DeclaredTypeAndInfo.Type)) { var memberAccessTemplate = parent.ChildShouldParenthesize ? "({0}).{1}" : "{0}.{1}"; return(string.Format(memberAccessTemplate, parent.ChildFullNamePrefix, name)); } else { var interfaceName = formatter.GetTypeName(typeDeclaringMemberAndInfo, escapeKeywordIdentifiers: true); var memberAccessTemplate = parent.ChildShouldParenthesize ? "(({0})({1})).{2}" : "(({0}){1}).{2}"; return(string.Format(memberAccessTemplate, interfaceName, parent.ChildFullNamePrefix, name)); } } }