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); }
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; }
public DbgEngineFormatterImpl(DbgDotNetFormatter formatter) => this.formatter = formatter ?? throw new ArgumentNullException(nameof(formatter));
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)); }
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)); }
public virtual bool FormatActualType(DbgEvaluationInfo evalInfo, ITextColorWriter output, DbgDotNetFormatter formatter, DbgValueFormatterTypeOptions options, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo) => false;
/// <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); }
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)); }
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); }
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);
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)); }
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); }