Ejemplo n.º 1
0
        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);
                }
            }
Ejemplo n.º 3
0
        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));
            }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
            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);
                }
            }