private async Task <HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeAsync( DiagnosticAnalyzer analyzer, HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { var analyzerAndOptions = new AnalyzerAndOptions(analyzer, analyzerExecutor.AnalyzerOptions); try { return(await GetCompilationAnalysisScopeCoreAsync(analyzerAndOptions, sessionScope, analyzerExecutor).ConfigureAwait(false)); } catch (OperationCanceledException) { // Task to compute the scope was cancelled. // Clear the entry in scope map for analyzer, so we can attempt a retry. ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> > compilationActionsMap; if (_compilationScopeMap.TryGetValue(analyzerAndOptions, out compilationActionsMap)) { compilationActionsMap.Remove(analyzerExecutor.Compilation); } analyzerExecutor.CancellationToken.ThrowIfCancellationRequested(); return(await GetCompilationAnalysisScopeAsync(analyzer, sessionScope, analyzerExecutor).ConfigureAwait(false)); } }
private async Task<HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeAsync( DiagnosticAnalyzer analyzer, HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { var analyzerAndOptions = new AnalyzerAndOptions(analyzer, analyzerExecutor.AnalyzerOptions); try { return await GetCompilationAnalysisScopeCoreAsync(analyzerAndOptions, sessionScope, analyzerExecutor).ConfigureAwait(false); } catch (OperationCanceledException) { // Task to compute the scope was cancelled. // Clear the entry in scope map for analyzer, so we can attempt a retry. ConditionalWeakTable<Compilation, Task<HostCompilationStartAnalysisScope>> compilationActionsMap; if (_compilationScopeMap.TryGetValue(analyzerAndOptions, out compilationActionsMap)) { compilationActionsMap.Remove(analyzerExecutor.Compilation); } analyzerExecutor.CancellationToken.ThrowIfCancellationRequested(); return await GetCompilationAnalysisScopeAsync(analyzer, sessionScope, analyzerExecutor).ConfigureAwait(false); } }
public bool Equals(AnalyzerAndOptions other) { if (ReferenceEquals(this, other)) { return(true); } return(other != null && Analyzer.Equals(other.Analyzer) && _analyzerOptions.Equals(other._analyzerOptions)); }
public bool Equals(AnalyzerAndOptions other) { if (ReferenceEquals(this, other)) { return true; } return other != null && Analyzer.Equals(other.Analyzer) && _analyzerOptions.Equals(other._analyzerOptions); }
private void ClearCompilationScopeMap(AnalyzerAndOptions analyzerAndOptions, AnalyzerExecutor analyzerExecutor) { ConditionalWeakTable<Compilation, Task<HostCompilationStartAnalysisScope>> compilationActionsCache; lock (_compilationScopeMap) { if (_compilationScopeMap.TryGetValue(analyzerAndOptions, out compilationActionsCache)) { compilationActionsCache.Remove(analyzerExecutor.Compilation); } } }
private void ClearCompilationScopeMap(AnalyzerAndOptions analyzerAndOptions, AnalyzerExecutor analyzerExecutor) { ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> > compilationActionsCache; lock (_compilationScopeMap) { if (_compilationScopeMap.TryGetValue(analyzerAndOptions, out compilationActionsCache)) { compilationActionsCache.Remove(analyzerExecutor.Compilation); } } }
private ConditionalWeakTable<Compilation, Task<HostCompilationStartAnalysisScope>> GetOrCreateCompilationActionsCache(AnalyzerAndOptions analyzerAndOptions) { lock (_compilationScopeMap) { ConditionalWeakTable<Compilation, Task<HostCompilationStartAnalysisScope>> value; if (_compilationScopeMap.TryGetValue(analyzerAndOptions, out value)) { return value; } value = new ConditionalWeakTable<Compilation, Task<HostCompilationStartAnalysisScope>>(); _compilationScopeMap.Add(analyzerAndOptions, value); return value; } }
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); }
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)); }
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)); }
private ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> > GetOrCreateCompilationActionsCache(AnalyzerAndOptions analyzerAndOptions) { lock (_compilationScopeMap) { ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> > value; if (_compilationScopeMap.TryGetValue(analyzerAndOptions, out value)) { return(value); } value = new ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> >(); _compilationScopeMap.Add(analyzerAndOptions, value); return(value); } }