Пример #1
0
        private void InitProcessingDelegatesInfo()
        {
            if (!ModelCreationOptions.HasFlag(GraphSemanticModelCreationOptions.CollectProcessingDelegates))
            {
                IsProcessing = Views.Any(v => v.IsProcessing);
                return;
            }

            var processingViewSymbols = Views.Where(v => v.IsProcessing)
                                        .Select(v => v.Symbol)
                                        .ToImmutableHashSet();

            IsProcessing = processingViewSymbols.Count > 0;

            if (!IsProcessing)
            {
                return;
            }

            _cancellation.ThrowIfCancellationRequested();
            var declaringNodes = Symbol.DeclaringSyntaxReferences
                                 .Select(r => r.GetSyntax(_cancellation));
            var walker = new ProcessingDelegatesWalker(PXContext, processingViewSymbols, _cancellation);

            foreach (var node in declaringNodes)
            {
                walker.Visit(node);
            }

            foreach (var(viewName, paramsDelegateInfo) in walker.ParametersDelegateListByView)
            {
                ViewsByNames[viewName].ParametersDelegates = paramsDelegateInfo.ToImmutableArray();
            }

            _cancellation.ThrowIfCancellationRequested();

            foreach (var(viewName, processDelegateInfo) in walker.ProcessDelegateListByView)
            {
                ViewsByNames[viewName].ProcessDelegates = processDelegateInfo.ToImmutableArray();
            }

            _cancellation.ThrowIfCancellationRequested();

            foreach (var(viewName, finalProcessDelegateInfo) in walker.FinallyProcessDelegateListByView)
            {
                ViewsByNames[viewName].FinallyProcessDelegates = finalProcessDelegateInfo.ToImmutableArray();
            }
        }
Пример #2
0
        private void InitProcessingDelegatesInfo()
        {
            var processingViewSymbols = Views.Where(v => v.IsProcessing)
                                        .Select(v => v.Symbol)
                                        .ToImmutableHashSet();

            IsProcessing = processingViewSymbols.Count > 0;

            if (!IsProcessing)
            {
                return;
            }

            var declaringNodes = Symbol.DeclaringSyntaxReferences
                                 .Select(r => r.GetSyntax(_cancellation));
            var walker = new ProcessingDelegatesWalker(_pxContext, processingViewSymbols, _cancellation);

            foreach (var node in declaringNodes)
            {
                walker.Visit(node);
            }

            foreach (var delegateInfo in walker.ParametersDelegateListByView)
            {
                ViewsByNames[delegateInfo.Key].ParametersDelegates = delegateInfo.Value.ToImmutableArray();
            }

            foreach (var delegateInfo in walker.ProcessDelegateListByView)
            {
                ViewsByNames[delegateInfo.Key].ProcessDelegates = delegateInfo.Value.ToImmutableArray();
            }

            foreach (var delegateInfo in walker.FinallyProcessDelegateListByView)
            {
                ViewsByNames[delegateInfo.Key].FinallyProcessDelegates = delegateInfo.Value.ToImmutableArray();
            }
        }