public void Analyze(SymbolAnalysisContext context, PXContext pxContext, CodeAnalysisSettings codeAnalysisSettings,
                            EventType eventType)
        {
            context.CancellationToken.ThrowIfCancellationRequested();

            if (AnalyzedEventTypes.TryGetValue(eventType, out RowChangesAnalysisMode analysisMode))
            {
                var methodSymbol = (IMethodSymbol)context.Symbol;
                var methodSyntax = methodSymbol.GetSyntax(context.CancellationToken) as MethodDeclarationSyntax;

                if (methodSyntax != null)
                {
                    var semanticModel = context.Compilation.GetSemanticModel(methodSyntax.SyntaxTree, true);

                    // Find all variables that are declared and assigned with e.Row inside the analyzed method
                    var variablesWalker = new VariablesWalker(methodSyntax, semanticModel, pxContext,
                                                              context.CancellationToken);
                    methodSyntax.Accept(variablesWalker);

                    // Perform analysis
                    var diagnosticWalker = new DiagnosticWalker(context, semanticModel, pxContext, variablesWalker.Result,
                                                                analysisMode, eventType);
                    methodSyntax.Accept(diagnosticWalker);
                }
            }
        }
                public PXConnectionScopeVisitor(DiagnosticWalker parent, PXContext pxContext)
                {
                    parent.ThrowOnNull(nameof(parent));
                    pxContext.ThrowOnNull(nameof(pxContext));

                    _parent    = parent;
                    _pxContext = pxContext;
                }
Пример #3
0
        private void DiagnoseRoutine(SourceRoutineSymbol routine)
        {
            Contract.ThrowIfNull(routine);

            DiagnosticWalker <VoidStruct> .Analyse(_diagnostics, routine);
        }