Пример #1
0
        private async Task NavigateToHandlerOrDeclarationAsync(Document document, IWpfTextView textView, ISymbol memberSymbol,
                                                               MemberDeclarationSyntax memberNode, SemanticModel semanticModel, PXContext context)
        {
            INamedTypeSymbol     graphOrExtensionType = memberSymbol.ContainingType;
            PXGraphSemanticModel graphSemanticModel   = PXGraphSemanticModel.InferModels(context, graphOrExtensionType)
                                                        ?.FirstOrDefault();

            if (graphSemanticModel == null || graphSemanticModel.Type == GraphType.None)
            {
                return;
            }

            switch (memberSymbol)
            {
            case IFieldSymbol fieldSymbol when fieldSymbol.Type.IsPXAction():
                await NavigateToPXActionHandlerAsync(document, textView, fieldSymbol, graphSemanticModel, context);

                return;

            case IFieldSymbol fieldSymbol when fieldSymbol.Type.IsBqlCommand(context):
                await NavigateToPXViewDelegateAsync(document, textView, fieldSymbol, graphSemanticModel, context);

                return;

            case IMethodSymbol methodSymbol:
                await NavigateToActionOrViewDeclarationAsync(document, textView, methodSymbol, graphSemanticModel, context);

                return;
            }
        }
Пример #2
0
        protected override void AnalyzeSymbol(SymbolAnalysisContext context, PXContext pxContext)
        {
            context.CancellationToken.ThrowIfCancellationRequested();

            if (!(context.Symbol is INamedTypeSymbol type))
            {
                return;
            }

            ParallelOptions parallelOptions = new ParallelOptions
            {
                CancellationToken = context.CancellationToken
            };

            var inferredGraphs = PXGraphSemanticModel.InferModels(pxContext, type, GraphSemanticModelCreationOptions.CollectAll, context.CancellationToken);

            foreach (var graph in inferredGraphs)
            {
                Parallel.ForEach(_innerAnalyzers, parallelOptions, innerAnalyzer =>
                {
                    context.CancellationToken.ThrowIfCancellationRequested();

                    if (innerAnalyzer.ShouldAnalyze(pxContext, graph))
                    {
                        innerAnalyzer.Analyze(context, pxContext, graph);
                    }
                });
            }
        }
Пример #3
0
        private void AnalyzeGraph(SymbolAnalysisContext context, PXContext pxContext)
        {
            context.CancellationToken.ThrowIfCancellationRequested();

            if (!(context.Symbol is INamedTypeSymbol type))
            {
                return;
            }

            IEnumerable <PXGraphSemanticModel> graphs = PXGraphSemanticModel.InferModels(pxContext, type, context.CancellationToken);

            foreach (IPXGraphAnalyzer innerAnalyzer in _innerAnalyzers)
            {
                foreach (PXGraphSemanticModel g in graphs)
                {
                    context.CancellationToken.ThrowIfCancellationRequested();
                    innerAnalyzer.Analyze(context, pxContext, g);
                }
            }
        }
Пример #4
0
        protected override void AnalyzeSymbol(SymbolAnalysisContext context, PXContext pxContext, CodeAnalysisSettings settings)
        {
            context.CancellationToken.ThrowIfCancellationRequested();

            if (!(context.Symbol is INamedTypeSymbol type))
            {
                return;
            }

            var inferredGraphs = PXGraphSemanticModel.InferModels(pxContext, type, context.CancellationToken);

            foreach (var innerAnalyzer in _innerAnalyzers)
            {
                foreach (var graph in inferredGraphs)
                {
                    context.CancellationToken.ThrowIfCancellationRequested();
                    innerAnalyzer.Analyze(context, pxContext, settings, graph);
                }
            }
        }