Exemple #1
0
 public DbgEngineExpressionEvaluatorImpl(DbgModuleReferenceProvider dbgModuleReferenceProvider, DbgDotNetExpressionCompiler expressionCompiler, DbgDotNetILInterpreter dnILInterpreter, IPredefinedEvaluationErrorMessagesHelper predefinedEvaluationErrorMessagesHelper)
 {
     this.dbgModuleReferenceProvider = dbgModuleReferenceProvider ?? throw new ArgumentNullException(nameof(dbgModuleReferenceProvider));
     this.expressionCompiler         = expressionCompiler ?? throw new ArgumentNullException(nameof(expressionCompiler));
     this.dnILInterpreter            = dnILInterpreter ?? throw new ArgumentNullException(nameof(dnILInterpreter));
     this.predefinedEvaluationErrorMessagesHelper = predefinedEvaluationErrorMessagesHelper ?? throw new ArgumentNullException(nameof(predefinedEvaluationErrorMessagesHelper));
 }
Exemple #2
0
        DbgDotNetLanguageServiceImpl(Lazy <DbgMethodDebugInfoProvider> dbgMethodDebugInfoProvider, Lazy <DbgModuleReferenceProvider> dbgModuleReferenceProvider, Lazy <DbgDotNetEngineValueNodeFactoryService> dbgDotNetEngineValueNodeFactoryService, Lazy <DbgDotNetILInterpreter> dnILInterpreter, Lazy <DbgAliasProvider> dbgAliasProvider, [ImportMany] IEnumerable <Lazy <DbgDotNetExpressionCompiler, IDbgDotNetExpressionCompilerMetadata> > dbgDotNetExpressionCompilers, IDecompilerService decompilerService, IPredefinedEvaluationErrorMessagesHelper predefinedEvaluationErrorMessagesHelper, [ImportMany] IEnumerable <Lazy <DbgDotNetFormatter, IDbgDotNetFormatterMetadata> > dbgDotNetFormatters)
        {
            this.dbgMethodDebugInfoProvider             = dbgMethodDebugInfoProvider;
            this.dbgModuleReferenceProvider             = dbgModuleReferenceProvider;
            this.dbgDotNetEngineValueNodeFactoryService = dbgDotNetEngineValueNodeFactoryService;
            this.dnILInterpreter   = dnILInterpreter;
            this.dbgAliasProvider  = dbgAliasProvider;
            this.decompilerService = decompilerService;
            this.predefinedEvaluationErrorMessagesHelper = predefinedEvaluationErrorMessagesHelper;
            var eeList    = new List <Lazy <DbgDotNetExpressionCompiler, IDbgDotNetExpressionCompilerMetadata> >();
            var langGuids = new HashSet <Guid>();

            foreach (var lz in dbgDotNetExpressionCompilers.OrderBy(a => a.Metadata.Order))
            {
                if (!Guid.TryParse(lz.Metadata.LanguageGuid, out var languageGuid))
                {
                    Debug.Fail($"Couldn't parse language GUID: '{lz.Metadata.LanguageGuid}'");
                    continue;
                }
                if (!Guid.TryParse(lz.Metadata.DecompilerGuid, out _))
                {
                    Debug.Fail($"Couldn't parse decompiler GUID: '{lz.Metadata.DecompilerGuid}'");
                    continue;
                }
                if (langGuids.Add(languageGuid))
                {
                    eeList.Add(lz);
                }
            }
            this.dbgDotNetExpressionCompilers = eeList.ToArray();

            formattersDict = new Dictionary <Guid, Lazy <DbgDotNetFormatter, IDbgDotNetFormatterMetadata> >();
            foreach (var lz in dbgDotNetFormatters.OrderBy(a => a.Metadata.Order))
            {
                if (!Guid.TryParse(lz.Metadata.LanguageGuid, out var languageGuid))
                {
                    Debug.Fail($"Couldn't parse language GUID: '{lz.Metadata.LanguageGuid}'");
                    continue;
                }
                if (!formattersDict.ContainsKey(languageGuid))
                {
                    formattersDict.Add(languageGuid, lz);
                }
            }
        }
 DbgDotNetEngineValueNodeFactoryServiceImpl(IPredefinedEvaluationErrorMessagesHelper errorMessagesHelper, [ImportMany] IEnumerable <Lazy <DbgDotNetValueNodeFactory, IDbgDotNetValueNodeFactoryMetadata> > factories)
 {
     this.errorMessagesHelper = errorMessagesHelper;
     toLazyFactory            = new Dictionary <Guid, Lazy <DbgDotNetValueNodeFactory, IDbgDotNetValueNodeFactoryMetadata> >();
     toFactory = new Dictionary <Lazy <DbgDotNetValueNodeFactory, IDbgDotNetValueNodeFactoryMetadata>, DbgDotNetEngineValueNodeFactory>();
     foreach (var lz in factories.OrderBy(a => a.Metadata.Order))
     {
         bool b = Guid.TryParse(lz.Metadata.LanguageGuid, out var languageGuid);
         Debug.Assert(b);
         if (!b)
         {
             continue;
         }
         if (!toLazyFactory.ContainsKey(languageGuid))
         {
             toLazyFactory.Add(languageGuid, lz);
         }
     }
 }
        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;
        }
Exemple #5
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));
 }