bool TryGetFactory(Guid guid, DbgDotNetFormatter formatter, [NotNullWhen(true)] out DbgDotNetEngineValueNodeFactory?factory)
 {
     if (!toLazyFactory.TryGetValue(guid, out var lz))
     {
         factory = null;
         return(false);
     }
     factory = GetFactory(formatter, lz);
     return(true);
 }
 DbgDotNetEngineValueNodeFactory GetFactory(DbgDotNetFormatter formatter, Lazy <DbgDotNetValueNodeFactory, IDbgDotNetValueNodeFactoryMetadata> lz)
 {
     lock (toFactory) {
         if (!toFactory.TryGetValue(lz, out var factory))
         {
             toFactory.Add(lz, factory = new DbgDotNetEngineValueNodeFactoryImpl(formatter, lz.Value, errorMessagesHelper));
         }
         return(factory);
     }
 }
        public override DbgDotNetEngineValueNodeFactory?Create(string languageGuid, DbgDotNetFormatter formatter)
        {
            if (languageGuid is null)
            {
                throw new ArgumentNullException(nameof(languageGuid));
            }
            if (formatter is null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }

            bool b = Guid.TryParse(languageGuid, out var guid);

            Debug.Assert(b);
            if (!b)
            {
                return(null);
            }

            if (TryGetFactory(guid, formatter, out var factory))
            {
                return(factory);
            }
            if (TryGetFactory(LanguageConstants.DefaultLanguageGuid, formatter, out factory))
            {
                return(factory);
            }

            Debug.Fail($"Default value node factory ({LanguageConstants.DefaultLanguageGuid.ToString()}) wasn't exported");
            var lz = toLazyFactory.Values.FirstOrDefault();

            if (lz is not null)
            {
                return(GetFactory(formatter, lz));
            }
            return(null);
        }
Example #4
0
        public override bool FormatValue(DbgEvaluationInfo evalInfo, ITextColorWriter output, DbgDotNetFormatter formatter, DbgValueFormatterOptions options, CultureInfo cultureInfo)
        {
            if (columnFormatter?.FormatValue(evalInfo, output, formatter, options, cultureInfo) == true)
            {
                return(true);
            }

            if (valueText.Parts != null)
            {
                valueText.WriteTo(output);
                return(true);
            }
            return(false);
        }
        public DbgEngineLanguageImpl(DbgModuleReferenceProvider dbgModuleReferenceProvider, string name, string displayName, DbgDotNetExpressionCompiler expressionCompiler, DbgMethodDebugInfoProvider dbgMethodDebugInfoProvider, IDecompiler decompiler, DbgDotNetFormatter formatter, DbgDotNetEngineValueNodeFactory valueNodeFactory, DbgDotNetILInterpreter dnILInterpreter, DbgAliasProvider dbgAliasProvider, IPredefinedEvaluationErrorMessagesHelper predefinedEvaluationErrorMessagesHelper)
        {
            if (dbgModuleReferenceProvider == null)
            {
                throw new ArgumentNullException(nameof(dbgModuleReferenceProvider));
            }
            if (formatter == null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }
            if (valueNodeFactory == null)
            {
                throw new ArgumentNullException(nameof(valueNodeFactory));
            }
            if (dnILInterpreter == null)
            {
                throw new ArgumentNullException(nameof(dnILInterpreter));
            }
            if (dbgAliasProvider == null)
            {
                throw new ArgumentNullException(nameof(dbgAliasProvider));
            }
            if (predefinedEvaluationErrorMessagesHelper == null)
            {
                throw new ArgumentNullException(nameof(predefinedEvaluationErrorMessagesHelper));
            }
            Name        = name ?? throw new ArgumentNullException(nameof(name));
            DisplayName = displayName ?? throw new ArgumentNullException(nameof(displayName));
            this.dbgMethodDebugInfoProvider = dbgMethodDebugInfoProvider ?? throw new ArgumentNullException(nameof(dbgMethodDebugInfoProvider));
            this.expressionCompiler         = expressionCompiler ?? throw new ArgumentNullException(nameof(expressionCompiler));
            this.decompiler = decompiler ?? throw new ArgumentNullException(nameof(decompiler));
            var expressionEvaluator = new DbgEngineExpressionEvaluatorImpl(dbgModuleReferenceProvider, expressionCompiler, dnILInterpreter, dbgAliasProvider, predefinedEvaluationErrorMessagesHelper);

            ExpressionEvaluator               = expressionEvaluator;
            Formatter                         = new DbgEngineFormatterImpl(formatter);
            LocalsProvider                    = new DbgEngineLocalsProviderImpl(dbgModuleReferenceProvider, expressionCompiler, valueNodeFactory, dnILInterpreter, dbgAliasProvider);
            AutosProvider                     = new DbgEngineAutosProviderImpl(valueNodeFactory);
            ExceptionsProvider                = new DbgEngineExceptionsProviderImpl(valueNodeFactory);
            ReturnValuesProvider              = new DbgEngineReturnValuesProviderImpl(valueNodeFactory);
            TypeVariablesProvider             = new DbgEngineTypeVariablesProviderImpl(valueNodeFactory);
            ValueNodeFactory                  = new DbgEngineValueNodeFactoryImpl(expressionEvaluator, valueNodeFactory, formatter);
            debuggerDisplayAttributeEvaluator = expressionEvaluator;
        }
Example #6
0
 public DbgEngineFormatterImpl(DbgDotNetFormatter formatter) =>
 this.formatter = formatter ?? throw new ArgumentNullException(nameof(formatter));
Example #7
0
        bool FormatDebuggerDisplayAttributeType(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgDotNetFormatter formatter, DbgValueFormatterOptions options, CultureInfo?cultureInfo)
        {
            if (Value is null)
            {
                return(false);
            }
            if ((options & DbgValueFormatterOptions.NoDebuggerDisplay) != 0)
            {
                return(false);
            }
            var languageFormatter = formatter as LanguageFormatter;

            Debug2.Assert(languageFormatter is not null);
            if (languageFormatter is null)
            {
                return(false);
            }
            var displayAttrFormatter = new DebuggerDisplayAttributeFormatter(evalInfo, languageFormatter, output, options, cultureInfo);

            return(displayAttrFormatter.FormatType(Value));
        }
Example #8
0
 public DbgEngineValueNodeFactoryImpl(DbgEngineExpressionEvaluatorImpl expressionEvaluator, DbgDotNetEngineValueNodeFactory valueNodeFactory, DbgDotNetFormatter formatter)
 {
     this.expressionEvaluator = expressionEvaluator ?? throw new ArgumentNullException(nameof(expressionEvaluator));
     this.valueNodeFactory    = valueNodeFactory ?? throw new ArgumentNullException(nameof(valueNodeFactory));
     this.formatter           = formatter ?? throw new ArgumentNullException(nameof(formatter));
 }
Example #9
0
 public virtual bool FormatActualType(DbgEvaluationInfo evalInfo, ITextColorWriter output, DbgDotNetFormatter formatter, DbgValueFormatterTypeOptions options, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo) => false;
Example #10
0
 /// <summary>
 /// Formats the value column. Returns false if nothing was written to <paramref name="output"/>
 /// </summary>
 /// <param name="evalInfo">Evaluation info</param>
 /// <param name="output">Output</param>
 /// <param name="formatter">Formatter</param>
 /// <param name="options">Options</param>
 /// <param name="cultureInfo">Culture or null to use invariant culture</param>
 /// <returns></returns>
 public virtual bool FormatValue(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgDotNetFormatter formatter, DbgValueFormatterOptions options, CultureInfo?cultureInfo) => false;
 public abstract DbgDotNetEngineValueNodeFactory?Create(string languageGuid, DbgDotNetFormatter formatter);
 public override bool FormatValue(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgDotNetFormatter formatter, DbgValueFormatterOptions options, CultureInfo cultureInfo)
 {
     noResultsName.WriteTo(output);
     return(true);
 }
Example #13
0
 public DbgDotNetEngineValueNodeFactoryImpl(DbgDotNetFormatter formatter, DbgDotNetValueNodeFactory factory, IPredefinedEvaluationErrorMessagesHelper errorMessagesHelper)
 {
     this.formatter      = formatter ?? throw new ArgumentNullException(nameof(formatter));
     this.factory        = factory ?? throw new ArgumentNullException(nameof(factory));
     ErrorMessagesHelper = errorMessagesHelper ?? throw new ArgumentNullException(nameof(errorMessagesHelper));
 }
Example #14
0
 public virtual bool FormatExpectedType(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgDotNetFormatter formatter, DbgValueFormatterTypeOptions options, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo) => false;
        public override bool FormatName(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgDotNetFormatter formatter, DbgValueFormatterOptions options, CultureInfo?cultureInfo)
        {
            var          formatString = dnSpy_Roslyn_Resources.LocalsWindow_MethodOrProperty_Returned;
            const string pattern      = "{0}";
            int          index        = formatString.IndexOf(pattern);

            Debug.Assert(index >= 0);
            if (index < 0)
            {
                formatString = "{0} returned";
                index        = formatString.IndexOf(pattern);
            }

            if (index != 0)
            {
                output.Write(DbgTextColor.Text, formatString.Substring(0, index));
            }
            owner.FormatReturnValueMethodName(evalInfo, output, options, cultureInfo, method);
            if (index + pattern.Length != formatString.Length)
            {
                output.Write(DbgTextColor.Text, formatString.Substring(index + pattern.Length));
            }
            return(true);
        }
Example #16
0
 public override bool FormatExpectedType(DbgEvaluationInfo evalInfo, ITextColorWriter output, DbgDotNetFormatter formatter, DbgValueFormatterTypeOptions options, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo) =>
 columnFormatter?.FormatExpectedType(evalInfo, output, formatter, options, valueOptions, cultureInfo) ??
 FormatDebuggerDisplayAttributeType(evalInfo, output, formatter, valueOptions, cultureInfo);
Example #17
0
        public override bool FormatName(DbgEvaluationInfo evalInfo, ITextColorWriter output, DbgDotNetFormatter formatter, DbgValueFormatterOptions options, CultureInfo cultureInfo)
        {
            if (columnFormatter?.FormatName(evalInfo, output, formatter, options, cultureInfo) == true)
            {
                return(true);
            }
            if (Value == null)
            {
                return(false);
            }
            if ((options & DbgValueFormatterOptions.NoDebuggerDisplay) != 0)
            {
                return(false);
            }
            var languageFormatter = formatter as LanguageFormatter;

            Debug.Assert(languageFormatter != null);
            if (languageFormatter == null)
            {
                return(false);
            }
            var displayAttrFormatter = new DebuggerDisplayAttributeFormatter(evalInfo, languageFormatter, output, options, cultureInfo);

            return(displayAttrFormatter.FormatName(Value));
        }
Example #18
0
        public DbgEngineLanguageImpl(DbgModuleReferenceProvider dbgModuleReferenceProvider, string name, string displayName, DbgDotNetExpressionCompiler expressionCompiler, DbgMetadataService dbgMetadataService, IDecompiler decompiler, DbgDotNetFormatter formatter, DbgDotNetEngineValueNodeFactory valueNodeFactory)
        {
            if (dbgModuleReferenceProvider == null)
            {
                throw new ArgumentNullException(nameof(dbgModuleReferenceProvider));
            }
            if (expressionCompiler == null)
            {
                throw new ArgumentNullException(nameof(expressionCompiler));
            }
            if (formatter == null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }
            Name                    = name ?? throw new ArgumentNullException(nameof(name));
            DisplayName             = displayName ?? throw new ArgumentNullException(nameof(displayName));
            this.dbgMetadataService = dbgMetadataService ?? throw new ArgumentNullException(nameof(dbgMetadataService));
            this.decompiler         = decompiler ?? throw new ArgumentNullException(nameof(decompiler));
            var dnILInterpreter     = new DbgDotNetILInterpreterImpl();
            var expressionEvaluator = new DbgEngineExpressionEvaluatorImpl(dbgModuleReferenceProvider, expressionCompiler, dnILInterpreter);

            ExpressionEvaluator   = expressionEvaluator;
            ValueFormatter        = new DbgEngineValueFormatterImpl();
            Formatter             = new DbgEngineFormatterImpl(formatter);
            LocalsProvider        = new DbgEngineLocalsProviderImpl(dbgModuleReferenceProvider, expressionCompiler, valueNodeFactory, dnILInterpreter);
            AutosProvider         = new DbgEngineAutosProviderImpl(valueNodeFactory);
            ExceptionsProvider    = new DbgEngineExceptionsProviderImpl(valueNodeFactory);
            ReturnValuesProvider  = new DbgEngineReturnValuesProviderImpl(valueNodeFactory);
            TypeVariablesProvider = new DbgEngineTypeVariablesProviderImpl(valueNodeFactory);
            ValueNodeFactory      = new DbgEngineValueNodeFactoryImpl(expressionEvaluator, valueNodeFactory, formatter);
        }