private Task <HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeCoreAsync( DiagnosticAnalyzer analyzer, HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { Func <DiagnosticAnalyzer, Task <HostCompilationStartAnalysisScope> > getTask = a => { return(Task.Run(() => { var compilationAnalysisScope = new HostCompilationStartAnalysisScope(sessionScope); analyzerExecutor.ExecuteCompilationStartActions(sessionScope.CompilationStartActions, compilationAnalysisScope); return compilationAnalysisScope; }, analyzerExecutor.CancellationToken)); }; var compilationActionsMap = _compilationScopeMap.GetOrCreateValue(analyzerExecutor.Compilation); return(compilationActionsMap.GetOrAdd(analyzer, getTask)); }
public Task <HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeAsync( HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { lock (_gate) { if (_lazyCompilationScopeTask == null) { _lazyCompilationScopeTask = Task.Run(() => { var compilationAnalysisScope = new HostCompilationStartAnalysisScope(sessionScope); analyzerExecutor.ExecuteCompilationStartActions(sessionScope.GetAnalyzerActions(_analyzer).CompilationStartActions, compilationAnalysisScope); return(compilationAnalysisScope); }, analyzerExecutor.CancellationToken); } return(_lazyCompilationScopeTask); } }
private Task <HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeCoreAsync( AnalyzerAndOptions analyzerAndOptions, HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { Func <AnalyzerAndOptions, Task <HostCompilationStartAnalysisScope> > getTask = a => { return(Task.Run(() => { var compilationAnalysisScope = new HostCompilationStartAnalysisScope(sessionScope); analyzerExecutor.ExecuteCompilationStartActions(sessionScope.CompilationStartActions, compilationAnalysisScope); return compilationAnalysisScope; }, analyzerExecutor.CancellationToken)); }; var compilationActionsMap = _compilationScopeMap.GetValue(analyzerExecutor.Compilation, _compilationScopeMapCallback); return(compilationActionsMap.GetOrAdd(analyzerAndOptions, getTask)); }
public Task <HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeAsync( HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { Func <Compilation, Task <HostCompilationStartAnalysisScope> > getTask = comp => { return(Task.Run(() => { var compilationAnalysisScope = new HostCompilationStartAnalysisScope(sessionScope); analyzerExecutor.ExecuteCompilationStartActions(sessionScope.CompilationStartActions, compilationAnalysisScope); return compilationAnalysisScope; }, analyzerExecutor.CancellationToken)); }; var callback = new ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> > .CreateValueCallback(getTask); var compilationActionsCache = GetOrCreateCompilationActionsCache(analyzerExecutor.AnalyzerOptions); return(compilationActionsCache.GetValue(analyzerExecutor.Compilation, callback)); }
private Task <HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeCoreAsync( AnalyzerAndOptions analyzerAndOptions, HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { Func <Compilation, Task <HostCompilationStartAnalysisScope> > getTask = comp => { return(Task.Run(() => { var compilationAnalysisScope = new HostCompilationStartAnalysisScope(sessionScope); analyzerExecutor.ExecuteCompilationStartActions(sessionScope.CompilationStartActions, compilationAnalysisScope); return compilationAnalysisScope; }, analyzerExecutor.CancellationToken)); }; var callback = new ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> > .CreateValueCallback(getTask); var compilationActionsMap = _compilationScopeMap.GetOrAdd(analyzerAndOptions, new ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> >()); return(compilationActionsMap.GetValue(analyzerExecutor.Compilation, callback)); }
public Task <HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeAsync( HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { lock (_gate) { _lazyCompilationScopeCache = _lazyCompilationScopeCache ?? new ConditionalWeakTable <Compilation, Dictionary <AnalyzerOptions, Task <HostCompilationStartAnalysisScope> > >(); var compilationActionsMap = _lazyCompilationScopeCache.GetOrCreateValue(analyzerExecutor.Compilation); Task <HostCompilationStartAnalysisScope> task; if (!compilationActionsMap.TryGetValue(analyzerExecutor.AnalyzerOptions, out task)) { task = Task.Run(() => { var compilationAnalysisScope = new HostCompilationStartAnalysisScope(sessionScope); analyzerExecutor.ExecuteCompilationStartActions(sessionScope.CompilationStartActions, compilationAnalysisScope); return(compilationAnalysisScope); }, analyzerExecutor.CancellationToken); compilationActionsMap.Add(analyzerExecutor.AnalyzerOptions, task); } return(task); } }