internal DkmEvaluationResult FormatResult(string name, string fullName, DkmClrValue value, DkmClrType declaredType = null, bool[] declaredTypeInfo = null, DkmInspectionContext inspectionContext = null)
        {
            DkmEvaluationResult evaluationResult = null;
            var workList = new DkmWorkList();

            _resultProvider.GetResult(
                value,
                workList,
                declaredType: declaredType ?? value.Type,
                customTypeInfo: DynamicFlagsCustomTypeInfo.Create(declaredTypeInfo).GetCustomTypeInfo(),
                inspectionContext: inspectionContext ?? DefaultInspectionContext,
                formatSpecifiers: Formatter.NoFormatSpecifiers,
                resultName: name,
                resultFullName: null,
                completionRoutine: asyncResult => evaluationResult = asyncResult.Result);
            workList.Execute();
            return(evaluationResult);
        }
Exemple #2
0
        private string GetValueStringForCharacter(DkmClrValue value, DkmInspectionContext inspectionContext, ObjectDisplayOptions options)
        {
            Debug.Assert(value.Type.GetLmrType().IsCharacter());
            if (UsesHexadecimalNumbers(inspectionContext))
            {
                options |= ObjectDisplayOptions.UseHexadecimalNumbers;
            }
            // check if HostObjectValue is null, since any of these types might actually be a synthetic value as well.
            if (value.HostObjectValue == null)
            {
                return(_hostValueNotFoundString);
            }

            var charTemp = FormatLiteral((char)value.HostObjectValue, options);

            Debug.Assert(charTemp != null);
            return(charTemp);
        }
Exemple #3
0
        internal override void GetRows(
            ResultProvider resultProvider,
            ArrayBuilder <EvalResult> rows,
            DkmInspectionContext inspectionContext,
            EvalResultDataItem parent,
            DkmClrValue value,
            int startIndex,
            int count,
            bool visitAll,
            ref int index)
        {
            if (InRange(startIndex, count, index))
            {
                rows.Add(CreateResultsViewRow(inspectionContext, parent, resultProvider.FullNameProvider));
            }

            index++;
        }
Exemple #4
0
        internal override void GetRows(
            ResultProvider resultProvider,
            ArrayBuilder <DkmEvaluationResult> rows,
            DkmInspectionContext inspectionContext,
            EvalResultDataItem parent,
            DkmClrValue value,
            int startIndex,
            int count,
            bool visitAll,
            ref int index)
        {
            if (InRange(startIndex, count, index))
            {
                rows.Add(GetRow(resultProvider, inspectionContext, value, _elementType, parent));
            }

            index++;
        }
 internal DkmClrValue CreateDkmClrValue(
     object value,
     DkmClrType type,
     string alias = null,
     DkmEvaluationResultFlags evalFlags = DkmEvaluationResultFlags.None,
     DkmClrValueFlags valueFlags        = DkmClrValueFlags.None,
     ulong nativeComPointer             = 0)
 {
     return(new DkmClrValue(
                value,
                DkmClrValue.GetHostObjectValue(type.GetLmrType(), value),
                type,
                alias,
                _formatter,
                evalFlags,
                valueFlags,
                nativeComPointer: nativeComPointer));
 }
Exemple #6
0
        internal static string GetExceptionMessage(
            this DkmClrValue value,
            DkmInspectionContext inspectionContext,
            string fullNameWithoutFormatSpecifiers
            )
        {
            var typeName = inspectionContext.GetTypeName(
                value.Type,
                null,
                Formatter.NoFormatSpecifiers
                );

            return(string.Format(
                       Resources.ExceptionThrown,
                       fullNameWithoutFormatSpecifiers,
                       typeName
                       ));
        }
Exemple #7
0
        private EvalResult CreateResultsViewRow(
            DkmInspectionContext inspectionContext,
            string name,
            string fullName,
            ReadOnlyCollection <string> formatSpecifiers,
            TypeAndCustomInfo declaredTypeAndInfo,
            DkmClrValue value,
            bool includeResultsFormatSpecifier,
            IDkmClrFullNameProvider fullNameProvider
            )
        {
            if (includeResultsFormatSpecifier)
            {
                formatSpecifiers = Formatter.AddFormatSpecifier(
                    formatSpecifiers,
                    ResultsFormatSpecifier
                    );
            }
            var childFullNamePrefix = fullNameProvider.GetClrObjectCreationExpression(
                inspectionContext,
                _proxyValue.Type,
                customTypeInfo: null,
                arguments: new[] { fullName }
                );

            return(new EvalResult(
                       ExpansionKind.Default,
                       name,
                       typeDeclaringMemberAndInfo: default(TypeAndCustomInfo),
                       declaredTypeAndInfo: declaredTypeAndInfo,
                       useDebuggerDisplay: false,
                       value: value,
                       displayValue: null,
                       expansion: new IndirectExpansion(_proxyValue, _proxyMembers),
                       childShouldParenthesize: false,
                       fullName: fullName,
                       childFullNamePrefixOpt: childFullNamePrefix,
                       formatSpecifiers: formatSpecifiers,
                       category: DkmEvaluationResultCategory.Method,
                       flags: DkmEvaluationResultFlags.ReadOnly,
                       editableValue: null,
                       inspectionContext: inspectionContext
                       ));
        }
Exemple #8
0
        internal override void GetRows(
            ResultProvider resultProvider,
            ArrayBuilder <EvalResult> rows,
            DkmInspectionContext inspectionContext,
            EvalResultDataItem parent,
            DkmClrValue value,
            int startIndex,
            int count,
            bool visitAll,
            ref int index)
        {
            var memberValue = value.GetMemberValue(_member, inspectionContext);
            var isDynamicDebugViewEmptyException = memberValue.Type.GetLmrType().IsDynamicDebugViewEmptyException();

            if (isDynamicDebugViewEmptyException || memberValue.IsError())
            {
                if (InRange(startIndex, count, index))
                {
                    if (isDynamicDebugViewEmptyException)
                    {
                        var emptyMember = memberValue.Type.GetMemberByName("Empty");
                        memberValue = memberValue.GetMemberValue(emptyMember, inspectionContext);
                    }
                    var row = new EvalResult(Resources.ErrorName, (string)memberValue.HostObjectValue, inspectionContext);
                    rows.Add(row);
                }
                index++;
            }
            else
            {
                var other = MemberExpansion.CreateMemberDataItem(
                    resultProvider,
                    inspectionContext,
                    _member,
                    memberValue,
                    parent,
                    _customTypeInfoMap,
                    ExpansionFlags.IncludeBaseMembers | ExpansionFlags.IncludeResultsView,
                    supportsFavorites: false);
                var expansion = other.Expansion;
                expansion?.GetRows(resultProvider, rows, inspectionContext, other.ToDataItem(), other.Value, startIndex, count, visitAll, ref index);
            }
        }
        internal override void GetRows(
            ResultProvider resultProvider,
            ArrayBuilder <DkmEvaluationResult> rows,
            DkmInspectionContext inspectionContext,
            EvalResultDataItem parent,
            DkmClrValue value,
            int startIndex,
            int count,
            bool visitAll,
            ref int index)
        {
            if (InRange(startIndex, count, index))
            {
                var evalResult = CreateEvaluationResult(Resources.ResultsView, parent, resultProvider.Formatter);
                rows.Add(evalResult);
            }

            index++;
        }
Exemple #10
0
 internal DkmClrValue CreateDkmClrValue(
     object value,
     Type type    = null,
     string alias = null,
     DkmEvaluationResultFlags evalFlags = DkmEvaluationResultFlags.None,
     DkmClrValueFlags valueFlags        = DkmClrValueFlags.None)
 {
     if (type == null)
     {
         type = value.GetType();
     }
     return(new DkmClrValue(
                value,
                DkmClrValue.GetHostObjectValue((TypeImpl)type, value),
                new DkmClrType((TypeImpl)type),
                alias,
                evalFlags,
                valueFlags));
 }
Exemple #11
0
        private static EvalResultDataItem GetMemberRow(
            ResultProvider resultProvider,
            DkmInspectionContext inspectionContext,
            DkmClrValue value,
            MemberAndDeclarationInfo member,
            EvalResultDataItem parent,
            DynamicFlagsMap dynamicFlagsMap)
        {
            var memberValue = GetMemberValue(value, member, inspectionContext);

            return(CreateMemberDataItem(
                       resultProvider,
                       inspectionContext,
                       member,
                       memberValue,
                       parent,
                       dynamicFlagsMap,
                       ExpansionFlags.All));
        }
        private string TryFormatValue(DkmClrValue value, DkmInspectionContext inspectionContext)
        {
            if (value.ValueFlags.HasFlag(DkmClrValueFlags.Error))
            {
                // Error message.  Just show the error.
                return(value.HostObjectValue as string);
            }

            Type lmrType = value.Type.GetLmrType();

            if (lmrType.IsEnum)
            {
                return(value.GetValueString(inspectionContext, null));
            }
            XSharpType xType = Utility.GetXSharpTypeForLmrType(lmrType);

            if (xType == XSharpType.Invalid)
            {
                // We don't know how to format this value
                return(null);
            }
            uint   radix           = inspectionContext.Radix;
            object hostObjectValue = value.HostObjectValue;

            if (hostObjectValue != null)
            {
                // If the value can be marshalled into the debugger process, HostObjectValue is the
                // equivalent value in the debugger process.
                switch (System.Type.GetTypeCode(hostObjectValue.GetType()))
                {
                case TypeCode.Int32:
                    return(FormatInteger((int)hostObjectValue, radix));

                case TypeCode.Boolean:
                    return((bool)hostObjectValue ? "TRUE" : "FALSE");

                case TypeCode.String:
                    return(FormatString(hostObjectValue.ToString(), inspectionContext.EvaluationFlags));
                }
            }

            return(null);
        }
Exemple #13
0
        private static EvalResult GetMemberRow(
            ResultProvider resultProvider,
            DkmInspectionContext inspectionContext,
            DkmClrValue value,
            MemberAndDeclarationInfo member,
            EvalResultDataItem parent,
            CustomTypeInfoTypeArgumentMap customTypeInfoMap)
        {
            var memberValue = value.GetMemberValue(member, inspectionContext);

            return(CreateMemberDataItem(
                       resultProvider,
                       inspectionContext,
                       member,
                       memberValue,
                       parent,
                       customTypeInfoMap,
                       ExpansionFlags.All));
        }
Exemple #14
0
 internal static void GetTupleFieldValues(this DkmClrValue tuple, int cardinality, ArrayBuilder <string> values, DkmInspectionContext inspectionContext)
 {
     while (true)
     {
         int n = Math.Min(cardinality, TupleFieldRestPosition - 1);
         for (int i = 0; i < n; i++)
         {
             var value = GetFieldValue(tuple, TupleFieldItemNamePrefix + (i + 1), inspectionContext);
             var str   = value.GetValueString(inspectionContext, Formatter.NoFormatSpecifiers);
             values.Add(str);
         }
         cardinality -= n;
         if (cardinality == 0)
         {
             return;
         }
         tuple = GetFieldValue(tuple, TupleFieldRestName, inspectionContext);
     }
 }
Exemple #15
0
        internal static DynamicViewExpansion CreateExpansion(
            DkmInspectionContext inspectionContext,
            DkmClrValue value,
            ResultProvider resultProvider
            )
        {
            if (value.IsError() || value.IsNull || value.HasExceptionThrown())
            {
                return(null);
            }

            var type = value.Type.GetLmrType();

            if (!(type.IsComObject() || type.IsIDynamicMetaObjectProvider()))
            {
                return(null);
            }

            var proxyValue = value.InstantiateDynamicViewProxy(inspectionContext);

            Debug.Assert(
                (proxyValue == null) ||
                (
                    !proxyValue.IsNull &&
                    !proxyValue.IsError() &&
                    !proxyValue.HasExceptionThrown()
                )
                );
            // InstantiateDynamicViewProxy may return null (if required assembly is missing, for instance).
            if (proxyValue == null)
            {
                return(null);
            }

            // Expansion is based on the 'DynamicMetaObjectProviderDebugView.Items' property.
            var proxyType            = proxyValue.Type;
            var itemsMemberExpansion = RootHiddenExpansion.CreateExpansion(
                proxyType.GetMemberByName("Items"),
                CustomTypeInfoTypeArgumentMap.Create(new TypeAndCustomInfo(proxyType))
                );

            return(new DynamicViewExpansion(proxyValue, itemsMemberExpansion));
        }
        public EvalResult(
            ExpansionKind kind,
            string name,
            TypeAndCustomInfo typeDeclaringMemberAndInfo,
            TypeAndCustomInfo declaredTypeAndInfo,
            bool useDebuggerDisplay,
            DkmClrValue value,
            string displayValue,
            Expansion expansion,
            bool childShouldParenthesize,
            string fullName,
            string childFullNamePrefixOpt,
            ReadOnlyCollection <string> formatSpecifiers,
            DkmEvaluationResultCategory category,
            DkmEvaluationResultFlags flags,
            string editableValue,
            DkmInspectionContext inspectionContext,
            string displayName = null,
            string displayType = null)
        {
            Debug.Assert(name != null);
            Debug.Assert(formatSpecifiers != null);
            Debug.Assert((flags & DkmEvaluationResultFlags.Expandable) == 0);

            this.Kind = kind;
            this.Name = name;
            this.TypeDeclaringMemberAndInfo = typeDeclaringMemberAndInfo;
            this.DeclaredTypeAndInfo        = declaredTypeAndInfo;
            this.UseDebuggerDisplay         = useDebuggerDisplay;
            this.Value                           = value;
            this.DisplayValue                    = displayValue;
            this.ChildShouldParenthesize         = childShouldParenthesize;
            this.FullNameWithoutFormatSpecifiers = fullName;
            this.ChildFullNamePrefix             = childFullNamePrefixOpt;
            this.FormatSpecifiers                = formatSpecifiers;
            this.Category                        = category;
            this.EditableValue                   = editableValue;
            this.Flags                           = flags | GetFlags(value, inspectionContext) | ((expansion == null) ? DkmEvaluationResultFlags.None : DkmEvaluationResultFlags.Expandable);
            this.Expansion                       = expansion;
            this.InspectionContext               = inspectionContext;
            this.DisplayName                     = displayName;
            this.DisplayType                     = displayType;
        }
 public EvalResultDataItem(
     string name,
     TypeAndCustomInfo declaredTypeAndInfo,
     DkmClrValue value,
     Expansion expansion,
     bool childShouldParenthesize,
     string fullNameWithoutFormatSpecifiers,
     string childFullNamePrefixOpt,
     ReadOnlyCollection <string> formatSpecifiers)
 {
     this.Name = name;
     this.DeclaredTypeAndInfo = declaredTypeAndInfo;
     this.Value = value;
     this.ChildShouldParenthesize         = childShouldParenthesize;
     this.FullNameWithoutFormatSpecifiers = fullNameWithoutFormatSpecifiers;
     this.ChildFullNamePrefix             = childFullNamePrefixOpt;
     this.FormatSpecifiers = formatSpecifiers;
     this.Expansion        = expansion;
 }
Exemple #18
0
        private static EvalResultDataItem CreateMemberDataItem(
            ResultProvider resultProvider,
            DkmInspectionContext inspectionContext,
            MemberAndDeclarationInfo member,
            DkmClrValue memberValue,
            EvalResultDataItem parent,
            DynamicFlagsMap dynamicFlagsMap,
            ExpansionFlags flags)
        {
            var    declaredType     = member.Type;
            var    declaredTypeInfo = dynamicFlagsMap.SubstituteDynamicFlags(member.OriginalDefinitionType, new DynamicFlagsCustomTypeInfo(member.TypeInfo)).GetCustomTypeInfo();
            string memberName;
            // Considering, we're not handling the case of a member inherited from a generic base type.
            var typeDeclaringMember     = member.GetExplicitlyImplementedInterface(out memberName) ?? member.DeclaringType;
            var typeDeclaringMemberInfo = typeDeclaringMember.IsInterface
                ? dynamicFlagsMap.SubstituteDynamicFlags(typeDeclaringMember.GetInterfaceListEntry(member.DeclaringType), originalDynamicFlags: default(DynamicFlagsCustomTypeInfo)).GetCustomTypeInfo()
                : null;
            var formatter = resultProvider.Formatter;

            memberName = formatter.GetIdentifierEscapingPotentialKeywords(memberName);
            var fullName = MakeFullName(
                formatter,
                memberName,
                new TypeAndCustomInfo(typeDeclaringMember, typeDeclaringMemberInfo), // Note: Won't include DynamicAttribute.
                member.RequiresExplicitCast,
                member.IsStatic,
                parent);

            return(resultProvider.CreateDataItem(
                       inspectionContext,
                       memberName,
                       typeDeclaringMemberAndInfo: (member.IncludeTypeInMemberName || typeDeclaringMember.IsInterface) ? new TypeAndCustomInfo(typeDeclaringMember, typeDeclaringMemberInfo) : default(TypeAndCustomInfo), // Note: Won't include DynamicAttribute.
                       declaredTypeAndInfo: new TypeAndCustomInfo(declaredType, declaredTypeInfo),
                       value: memberValue,
                       parent: parent,
                       expansionFlags: flags,
                       childShouldParenthesize: false,
                       fullName: fullName,
                       formatSpecifiers: Formatter.NoFormatSpecifiers,
                       category: DkmEvaluationResultCategory.Other,
                       flags: memberValue.EvalFlags,
                       evalFlags: DkmEvaluationFlags.None));
        }
Exemple #19
0
        private string GetUnderlyingStringImpl(DkmClrValue value, DkmInspectionContext inspectionContext)
        {
            Debug.Assert(!value.IsError());

            if (value.IsNull)
            {
                return(null);
            }

            var lmrType = value.Type.GetLmrType();

            if (lmrType.IsEnum || lmrType.IsArray || lmrType.IsPointer)
            {
                return(null);
            }

            if (lmrType.IsNullable())
            {
                var nullableValue = value.GetNullableValue(inspectionContext);
                return(nullableValue != null?GetUnderlyingStringImpl(nullableValue, inspectionContext) : null);
            }

            if (lmrType.IsString())
            {
                return((string)value.HostObjectValue);
            }
            else if (!IsPredefinedType(lmrType))
            {
                // Check for special cased non-primitives that have underlying strings
                if (lmrType.IsType("System.Data.SqlTypes", "SqlString"))
                {
                    var fieldValue = value.GetFieldValue(InternalWellKnownMemberNames.SqlStringValue, inspectionContext);
                    return(fieldValue.HostObjectValue as string);
                }
                else if (lmrType.IsOrInheritsFrom("System.Xml.Linq", "XNode"))
                {
                    return(value.EvaluateToString(inspectionContext));
                }
            }

            return(null);
        }
        private static ResultsViewExpansion CreateExpansion(DkmClrValue value, DkmClrType enumerableType, Formatter formatter)
        {
            var proxyValue = value.InstantiateResultsViewProxy(enumerableType);

            // InstantiateResultsViewProxy may return null
            // (if assembly is missing for instance).
            if (proxyValue == null)
            {
                return(null);
            }

            var proxyMembers = MemberExpansion.CreateExpansion(
                proxyValue.Type.GetLmrType(),
                proxyValue,
                ExpansionFlags.None,
                TypeHelpers.IsPublic,
                formatter);

            return(new ResultsViewExpansion(proxyValue, proxyMembers));
        }
Exemple #21
0
 internal override void GetRows(
     ResultProvider resultProvider,
     ArrayBuilder <EvalResult> rows,
     DkmInspectionContext inspectionContext,
     EvalResultDataItem parent,
     DkmClrValue value,
     int startIndex,
     int count,
     bool visitAll,
     ref int index)
 {
     foreach (var expansion in _expansions)
     {
         expansion.GetRows(resultProvider, rows, inspectionContext, parent, value, startIndex, count, visitAll, ref index);
         if (!visitAll && (index >= startIndex + count))
         {
             return;
         }
     }
 }
Exemple #22
0
        internal override void GetRows(
            ResultProvider resultProvider,
            ArrayBuilder <EvalResult> rows,
            DkmInspectionContext inspectionContext,
            EvalResultDataItem parent,
            DkmClrValue value,
            int startIndex,
            int count,
            bool visitAll,
            ref int index)
        {
            _proxyItem?.Expansion.GetRows(resultProvider, rows, inspectionContext, _proxyItem.ToDataItem(), _proxyItem.Value, startIndex, count, visitAll, ref index);

            if (InRange(startIndex, count, index))
            {
                rows.Add(this.CreateRawViewRow(resultProvider, inspectionContext));
            }

            index++;
        }
        private DkmEvaluationResult GetRow(ResultProvider resultProvider, DkmClrValue value, int index, EvalResultDataItem parent)
        {
            var inspectionContext = value.InspectionContext;
            var appDomain         = value.Type.AppDomain;
            var typeParameter     = _typeParameters[index];
            var typeArgument      = _typeArguments[index];
            var type     = DkmClrType.Create(appDomain, typeArgument);
            var name     = typeParameter.Name;
            var dataItem = new EvalResultDataItem(
                name,
                typeDeclaringMember: null,
                declaredType: typeArgument,
                value: null,
                expansion: null,
                childShouldParenthesize: false,
                fullName: null,
                childFullNamePrefixOpt: null,
                formatSpecifiers: Formatter.NoFormatSpecifiers,
                category: DkmEvaluationResultCategory.Data,
                flags: DkmEvaluationResultFlags.ReadOnly,
                editableValue: null);
            var typeName = inspectionContext.GetTypeName(DkmClrType.Create(appDomain, typeArgument));

            return(DkmSuccessEvaluationResult.Create(
                       inspectionContext,
                       value.StackFrame,
                       name,
                       dataItem.FullName,
                       dataItem.Flags,
                       Value: typeName,
                       EditableValue: null,
                       Type: typeName,
                       Category: dataItem.Category,
                       Access: value.Access,
                       StorageType: value.StorageType,
                       TypeModifierFlags: value.TypeModifierFlags,
                       Address: value.Address,
                       CustomUIVisualizers: null,
                       ExternalModules: null,
                       DataItem: dataItem));
        }
Exemple #24
0
        private static EvalResultDataItem CreateMemberDataItem(
            ResultProvider resultProvider,
            DkmInspectionContext inspectionContext,
            MemberAndDeclarationInfo member,
            DkmClrValue memberValue,
            EvalResultDataItem parent,
            ExpansionFlags flags)
        {
            var    formatter = resultProvider.Formatter;
            string memberName;
            var    typeDeclaringMember = member.GetExplicitlyImplementedInterface(out memberName) ?? member.DeclaringType;

            memberName = formatter.GetIdentifierEscapingPotentialKeywords(memberName);
            // If the value is actually an exception that was thrown, we can't expect it to
            // have any relation to the declared type of the value.  Therefore, we will
            // pretend that the exception type was the declared type for the purposes
            // of creating the full name and expansion.
            var declaredType = memberValue.EvalFlags.Includes(DkmEvaluationResultFlags.ExceptionThrown) ? memberValue.Type.GetLmrType() : member.Type;
            var fullName     = MakeFullName(
                formatter,
                memberName,
                typeDeclaringMember,
                member.RequiresExplicitCast,
                member.IsStatic,
                parent);

            return(resultProvider.CreateDataItem(
                       inspectionContext,
                       memberName,
                       typeDeclaringMember: (member.IncludeTypeInMemberName || typeDeclaringMember.IsInterface) ? typeDeclaringMember : null,
                       declaredType: declaredType,
                       value: memberValue,
                       parent: parent,
                       expansionFlags: flags,
                       childShouldParenthesize: false,
                       fullName: fullName,
                       formatSpecifiers: Formatter.NoFormatSpecifiers,
                       category: DkmEvaluationResultCategory.Other,
                       flags: memberValue.EvalFlags,
                       evalFlags: DkmEvaluationFlags.None));
        }
Exemple #25
0
        private EvalResult GetRow(
            DkmInspectionContext inspectionContext,
            DkmClrValue value,
            int index,
            EvalResultDataItem parent
            )
        {
            var typeParameter    = _typeParameters[index];
            var typeArgument     = _typeArguments[index];
            var typeArgumentInfo = _customTypeInfoMap.SubstituteCustomTypeInfo(
                typeParameter,
                customInfo: null
                );
            var formatSpecifiers = Formatter.NoFormatSpecifiers;

            return(new EvalResult(
                       ExpansionKind.TypeVariable,
                       typeParameter.Name,
                       typeDeclaringMemberAndInfo: default(TypeAndCustomInfo),
                       declaredTypeAndInfo: new TypeAndCustomInfo(
                           DkmClrType.Create(value.Type.AppDomain, typeArgument),
                           typeArgumentInfo
                           ),
                       useDebuggerDisplay: parent != null,
                       value: value,
                       displayValue: inspectionContext.GetTypeName(
                           DkmClrType.Create(value.Type.AppDomain, typeArgument),
                           typeArgumentInfo,
                           formatSpecifiers
                           ),
                       expansion: null,
                       childShouldParenthesize: false,
                       fullName: null,
                       childFullNamePrefixOpt: null,
                       formatSpecifiers: formatSpecifiers,
                       category: DkmEvaluationResultCategory.Data,
                       flags: DkmEvaluationResultFlags.ReadOnly,
                       editableValue: null,
                       inspectionContext: inspectionContext
                       ));
        }
Exemple #26
0
 private EvalResult CreateRawViewRow(
     ResultProvider resultProvider,
     DkmInspectionContext inspectionContext,
     EvalResultDataItem parent,
     DkmClrValue value
 )
 {
     var displayName = Resources.RawView;
     var displayValue = value.GetValueString(
         inspectionContext,
         Formatter.NoFormatSpecifiers
     );
     var displayType = ResultProvider.GetTypeName(
         inspectionContext,
         value,
         _typeAndInfo.ClrType,
         _typeAndInfo.Info,
         isPointerDereference: false
     );
     var expansion = new TupleExpansion(_typeAndInfo, _cardinality, useRawView: true);
     return new EvalResult(
         ExpansionKind.Explicit,
         displayName,
         default(TypeAndCustomInfo),
         _typeAndInfo,
         useDebuggerDisplay: false,
         value: value,
         displayValue: displayValue,
         expansion: expansion,
         childShouldParenthesize: parent.ChildShouldParenthesize,
         fullName: parent.FullNameWithoutFormatSpecifiers,
         childFullNamePrefixOpt: parent.ChildFullNamePrefix,
         formatSpecifiers: Formatter.AddFormatSpecifier(parent.FormatSpecifiers, "raw"),
         category: DkmEvaluationResultCategory.Data,
         flags: DkmEvaluationResultFlags.ReadOnly,
         editableValue: null,
         inspectionContext: inspectionContext,
         displayName: displayName,
         displayType: displayType
     );
 }
Exemple #27
0
        internal string FormatPrimitive(DkmClrValue value, ObjectDisplayOptions options)
        {
            Debug.Assert(value != null);

            object obj;

            if (value.Type.GetLmrType().IsDateTime())
            {
                DkmClrValue dateDataValue = value.GetFieldValue(DateTimeUtilities.DateTimeDateDataFieldName);
                Debug.Assert(dateDataValue.HostObjectValue != null);

                obj = DateTimeUtilities.ToDateTime((ulong)dateDataValue.HostObjectValue);
            }
            else
            {
                Debug.Assert(value.HostObjectValue != null);
                obj = value.HostObjectValue;
            }

            return(FormatPrimitiveObject(obj, options));
        }
Exemple #28
0
        internal static TupleExpansion CreateExpansion(
            DkmInspectionContext inspectionContext,
            TypeAndCustomInfo declaredTypeAndInfo,
            DkmClrValue value,
            int cardinality
        )
        {
            if (value.IsNull)
            {
                // No expansion.
                return null;
            }

            bool useRawView =
                (inspectionContext.EvaluationFlags & DkmEvaluationFlags.ShowValueRaw) != 0;
            return new TupleExpansion(
                new TypeAndCustomInfo(value.Type, declaredTypeAndInfo.Info),
                cardinality,
                useRawView
            );
        }
Exemple #29
0
        private string FormatPrimitive(DkmClrValue value, ObjectDisplayOptions options, DkmInspectionContext inspectionContext)
        {
            Debug.Assert(value != null);

            object obj;

            if (value.Type.GetLmrType().IsDateTime())
            {
                DkmClrValue dateDataValue = value.GetPropertyValue("Ticks", inspectionContext);
                Debug.Assert(dateDataValue.HostObjectValue != null);

                obj = new DateTime((long)dateDataValue.HostObjectValue);
            }
            else
            {
                Debug.Assert(value.HostObjectValue != null);
                obj = value.HostObjectValue;
            }

            return(FormatPrimitiveObject(obj, options));
        }
Exemple #30
0
        /// <summary>
        /// Generate a Results Only row if the value is a synthesized
        /// value declared as IEnumerable or IEnumerable&lt;T&gt;.
        /// </summary>
        internal static EvalResult CreateResultsOnlyRowIfSynthesizedEnumerable(
            DkmInspectionContext inspectionContext,
            string name,
            string fullName,
            ReadOnlyCollection <string> formatSpecifiers,
            DkmClrType declaredType,
            DkmClrCustomTypeInfo declaredTypeInfo,
            DkmClrValue value,
            ResultProvider resultProvider)
        {
            if ((value.ValueFlags & DkmClrValueFlags.Synthetic) == 0)
            {
                return(null);
            }

            // Must be declared as IEnumerable or IEnumerable<T>, not a derived type.
            var enumerableType = GetEnumerableType(value, declaredType, requireExactInterface: true);

            if (enumerableType == null)
            {
                return(null);
            }

            var expansion = CreateExpansion(inspectionContext, value, enumerableType, resultProvider);

            if (expansion == null)
            {
                return(null);
            }

            return(expansion.CreateResultsViewRow(
                       inspectionContext,
                       name,
                       fullName,
                       formatSpecifiers,
                       new TypeAndCustomInfo(declaredType, declaredTypeInfo),
                       value,
                       includeResultsFormatSpecifier: false,
                       fullNameProvider: resultProvider.FullNameProvider));
        }