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(); } }
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(); } }