public void Analyze(SymbolAnalysisContext context, PXContext pxContext, CodeAnalysisSettings settings, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); StartLongOperationWalker walker = new StartLongOperationWalker(context, pxContext, Descriptors.PX1054_PXGraphLongRunOperationDuringInitialization); foreach (GraphInitializerInfo initializer in pxGraph.Initializers) { context.CancellationToken.ThrowIfCancellationRequested(); walker.Visit(initializer.Node); } }
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel graphModel) { var viewWithoutDelegatesNames = graphModel.Views.Where(view => !graphModel.ViewDelegatesByNames.ContainsKey(view.Symbol.Name)) .Select(view => view.Symbol.Name) .ToList(capacity: graphModel.ViewsByNames.Count); if (viewWithoutDelegatesNames.Count == 0) { return; } var delegateCandidates = from method in graphModel.Symbol.GetMembers().OfType <IMethodSymbol>() where method.ContainingType.Equals(graphModel.Symbol) && !method.IsOverride && (!graphModel.ViewDelegatesByNames.TryGetValue(method.Name, out var delegateInfo) || method != delegateInfo.Symbol) && method.IsValidViewDelegate(pxContext) && !method.IsValidActionHandler(pxContext) select method; foreach (IMethodSymbol method in delegateCandidates) { if (viewWithoutDelegatesNames.Any(viewName => viewName == method.Name)) { continue; } string nearestViewName = FindNearestView(viewWithoutDelegatesNames, method); if (nearestViewName != null && !method.Locations.IsEmpty) { var properties = ImmutableDictionary.CreateBuilder <string, string>(); properties.Add(ViewFieldNameProperty, nearestViewName); context.ReportDiagnosticWithSuppressionCheck( Diagnostic.Create(Descriptors.PX1005_TypoInViewDelegateName, method.Locations.First(), properties.ToImmutable(), nearestViewName), pxContext.CodeAnalysisSettings); } } }
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph) { foreach (var actionHandler in pxGraph.DeclaredActionHandlers) { context.CancellationToken.ThrowIfCancellationRequested(); if (actionHandler.Symbol == null || actionHandler.Node == null) { continue; } CheckActionHandler(context, pxContext, actionHandler.Symbol, actionHandler.Node, pxGraph.Type); } }
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph) { var dbQueriesWalker = new Walker(context, pxContext, Descriptors.PX1085_DatabaseQueriesInPXGraphInitialization); foreach (var initializer in pxGraph.Initializers) { context.CancellationToken.ThrowIfCancellationRequested(); dbQueriesWalker.Visit(initializer.Node); } }
public virtual bool ShouldAnalyze(PXContext pxContext, PXGraphSemanticModel graph) => true;
bool IPXGraphAnalyzer.ShouldAnalyze(PXContext pxContext, PXGraphSemanticModel graph) => graph?.Type == GraphType.PXGraphExtension;
public bool ShouldAnalyze(PXContext pxContext, PXGraphSemanticModel graphExtension) => graphExtension?.Type == GraphType.PXGraphExtension && graphExtension.IsActiveMethodInfo == null && !graphExtension.Symbol.IsAbstract && !graphExtension.Symbol.IsStatic && !graphExtension.Symbol.IsGenericType;
private static ISymbol GetActionOrViewSymbolToNavigateTo(IMethodSymbol methodSymbol, PXGraphSemanticModel graphSemanticModel, PXContext context) { IEnumerable <ISymbol> candidates; if (methodSymbol.IsValidActionHandler(context)) { candidates = from action in graphSemanticModel.Actions where string.Equals(action.Symbol.Name, methodSymbol.Name, StringComparison.OrdinalIgnoreCase) select action.Symbol; } else if (methodSymbol.IsValidViewDelegate(context)) { candidates = from viewInfo in graphSemanticModel.Views where string.Equals(viewInfo.Symbol.Name, methodSymbol.Name, StringComparison.OrdinalIgnoreCase) select viewInfo.Symbol; } else { return(null); } if (candidates.IsSingle()) { return(candidates.First()); } else { return(candidates.Where(symbol => symbol.ContainingType == methodSymbol.ContainingType || symbol.ContainingType.OriginalDefinition == methodSymbol.ContainingType.OriginalDefinition) .FirstOrDefault()); } }
public override bool ShouldAnalyze(PXContext pxContext, PXGraphSemanticModel graph) => graph.IsProcessing;
public void Analyze(SymbolAnalysisContext context, PXContext pxContext, CodeAnalysisSettings settings, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); var ownDelegatesDictionary = pxGraph.ViewDelegates .Where(d => pxGraph.Symbol.Equals(d.Symbol.ContainingType)) .ToDictionary(d => d.Symbol.Name, d => d, StringComparer.OrdinalIgnoreCase); var ownRelatedViewsHashSet = pxGraph.Views .Where(v => ownDelegatesDictionary.ContainsKey(v.Symbol.Name) && pxGraph.Symbol.Equals(v.Symbol.ContainingType)) .Select(v => v.Symbol.Name) .ToImmutableHashSet(StringComparer.OrdinalIgnoreCase); var baseNonRedeclaredRelatedViewsBuilder = ImmutableHashSet <ISymbol> .Empty.ToBuilder(); foreach (var view in pxGraph.Views) { for (var curView = view; curView != null; curView = curView.Base) { if (ownDelegatesDictionary.ContainsKey(curView.Symbol.Name) && !pxGraph.Symbol.Equals(curView.Symbol.ContainingType) && !ownRelatedViewsHashSet.Contains(curView.Symbol.Name)) { baseNonRedeclaredRelatedViewsBuilder.Add(curView.Symbol); } } } var baseNonRedeclaredRelatedViewsHashSet = baseNonRedeclaredRelatedViewsBuilder.ToImmutable(); foreach (var viewDelegate in ownDelegatesDictionary.Values) { var walker = new Walker(context, pxContext, baseNonRedeclaredRelatedViewsHashSet); walker.Visit(viewDelegate.Node); } }
private void NavigateToPXActionHandler(Document document, IWpfTextView textView, ISymbol actionSymbol, PXGraphSemanticModel graphSemanticModel, PXContext context) { if (!graphSemanticModel.ActionHandlersByNames.TryGetValue(actionSymbol.Name, out ActionHandlerInfo actionHandler)) { return; } IWpfTextView textViewToNavigateTo = textView; if (!(actionHandler.Node is MethodDeclarationSyntax handlerNode) || handlerNode.SyntaxTree == null) { return; } if (handlerNode.SyntaxTree.FilePath != document.FilePath) { textViewToNavigateTo = OpenOtherDocumentForNavigationAndGetItsTextView(document, handlerNode.SyntaxTree); } if (textViewToNavigateTo == null) { return; } SetNewPositionInTextView(textViewToNavigateTo, handlerNode.Identifier.Span); }
public override void Analyze(SymbolAnalysisContext symbolContext, PXContext pxContext, PXGraphSemanticModel pxGraph) { symbolContext.CancellationToken.ThrowIfCancellationRequested(); var declaredActions = pxGraph.DeclaredActions.ToList(); if (declaredActions.Count == 0 || symbolContext.CancellationToken.IsCancellationRequested) { return; } PrimaryDacFinder primaryDacFinder = PrimaryDacFinder.Create(pxContext, pxGraph, symbolContext.CancellationToken); ITypeSymbol primaryDAC = primaryDacFinder?.FindPrimaryDAC(); if (primaryDAC == null) { return; } ImmutableDictionary <string, string> diagnosticExtraData = null; foreach (ActionInfo action in declaredActions) { symbolContext.CancellationToken.ThrowIfCancellationRequested(); if (CheckActionIsDeclaredForPrimaryDAC(action.Type, primaryDAC)) { continue; } diagnosticExtraData = diagnosticExtraData ?? new Dictionary <string, string> { { DiagnosticProperty.DacName, primaryDAC.Name }, { DiagnosticProperty.DacMetadataName, primaryDAC.GetCLRTypeNameFromType() } } .ToImmutableDictionary(); RegisterDiagnosticForAction(action.Symbol, primaryDAC.Name, diagnosticExtraData, symbolContext, pxContext); } }
public override void Analyze(SymbolAnalysisContext symbolContext, PXContext pxContext, PXGraphSemanticModel pxGraph) { symbolContext.CancellationToken.ThrowIfCancellationRequested(); var actionHandlerWithBadSignature = from method in pxGraph.Symbol.GetMembers().OfType <IMethodSymbol>() where pxGraph.Symbol.Equals(method.ContainingType) && CheckIfDiagnosticShouldBeRegisteredForMethod(method, pxContext) && pxGraph.ActionsByNames.ContainsKey(method.Name) select method; foreach (IMethodSymbol method in actionHandlerWithBadSignature) { symbolContext.CancellationToken.ThrowIfCancellationRequested(); Location methodLocation = method.Locations.FirstOrDefault(); if (methodLocation != null) { symbolContext.ReportDiagnosticWithSuppressionCheck( Diagnostic.Create(Descriptors.PX1000_InvalidPXActionHandlerSignature, methodLocation), pxContext.CodeAnalysisSettings); } } }
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); var walker = new WalkerForGraphAnalyzer(context, pxContext, Descriptors.PX1086_ThrowingSetupNotEnteredExceptionInLongRunningOperation); CheckProcessingDelegates(pxGraph, walker, context.CancellationToken); CheckLongOperationStartDelegates(pxGraph.Symbol, walker, pxContext, context.Compilation, context.CancellationToken); }
void IPXGraphAnalyzer.Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel graphOrGraphExtension) { context.CancellationToken.ThrowIfCancellationRequested(); PXGraphEventSemanticModel graphOrGraphExtensionWithEvents = PXGraphEventSemanticModel.EnrichGraphModelWithEvents(graphOrGraphExtension, context.CancellationToken); foreach (EventType eventType in Enum.GetValues(typeof(EventType))) { if (eventType == EventType.None) { continue; } AnalyzeGraphEventsForEventType(eventType, context, pxContext, graphOrGraphExtensionWithEvents); } }
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); var walker = new WalkerForGraphAnalyzer(context, pxContext, Descriptors.PX1090_ThrowingSetupNotEnteredExceptionInActionHandlers); var delegateNodes = pxGraph.DeclaredActionHandlers .Where(h => h.Node != null) .Select(h => h.Node); foreach (var node in delegateNodes) { context.CancellationToken.ThrowIfCancellationRequested(); walker.Visit(node); } }
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); var walker = new StartLongOperationWalker(context, pxContext, Descriptors.PX1080_DataViewDelegateLongOperationStart); foreach (DataViewDelegateInfo del in pxGraph.ViewDelegates) { context.CancellationToken.ThrowIfCancellationRequested(); walker.Visit(del.Node); } }
private static bool GraphContainsViewDeclaration(PXGraphSemanticModel graphSemanticModel, DataViewInfo viewInfo) => graphSemanticModel.Symbol.OriginalDefinition?.Equals(viewInfo.Symbol.ContainingType?.OriginalDefinition) ?? false;
void IPXGraphAnalyzer.Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel graphExtension) => CheckSymbolIsPublic(context, pxContext, graphExtension);
/// <summary> /// Starting from the Acumatica 2018R2 version a new method is used to initialize caches with explicit ordering of caches. /// </summary> /// <returns/> public override bool ShouldAnalyze(PXContext pxContext, PXGraphSemanticModel graph) => pxContext.PXGraph.InitCacheMapping == null && graph.ViewsByNames.Count > 0;
public void Analyze(SymbolAnalysisContext symbolContext, PXContext pxContext, PXGraphSemanticModel graphExtension) { symbolContext.CancellationToken.ThrowIfCancellationRequested(); // ShouldAnalyze already filtered everything and left only graph extensions without IsActive // We just need to report them var syntaxNode = graphExtension.Symbol.GetSyntax(symbolContext.CancellationToken); Location location = (syntaxNode as ClassDeclarationSyntax)?.Identifier.GetLocation() ?? syntaxNode?.GetLocation(); if (location == null) { return; } symbolContext.ReportDiagnosticWithSuppressionCheck( Diagnostic.Create(Descriptors.PX1016_NoIsActiveMethodForGraphExtension, location), pxContext.CodeAnalysisSettings); }
public override void Analyze(SymbolAnalysisContext symbolContext, PXContext pxContext, PXGraphSemanticModel graphSemanticModel) { symbolContext.CancellationToken.ThrowIfCancellationRequested(); var viewsGroupedByDAC = GetViewsUsedInAnalysis(graphSemanticModel).Where(view => view.DAC != null) .ToLookup(view => view.DAC); if (viewsGroupedByDAC.Count == 0) { return; } foreach (IGrouping <ITypeSymbol, DataViewInfo> dacViews in viewsGroupedByDAC) { symbolContext.CancellationToken.ThrowIfCancellationRequested(); AnalyzeDacViewsForNumberOfCaches(graphSemanticModel, symbolContext, pxContext, dacViews, viewsGroupedByDAC); } }
public abstract void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph);
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); if (pxGraph.Type != GraphType.PXGraphExtension) { return; } var redeclaredActionNamesHashSet = pxGraph.Actions .Where(a => pxGraph.Symbol.Equals(a.Symbol?.ContainingSymbol) && a.Base != null) .Select(a => a.Symbol.Name) .ToImmutableHashSet(StringComparer.OrdinalIgnoreCase); var redeclaredHandlersWithoutActionsList = pxGraph.ActionHandlers .Where(h => pxGraph.Symbol.Equals(h.Symbol?.ContainingSymbol) && h.Base != null) .Where(h => !redeclaredActionNamesHashSet.Contains(h.Symbol.Name)) .ToList(); var baseHandlersHashSet = redeclaredHandlersWithoutActionsList .Select(h => h.Base.Symbol) .ToImmutableHashSet(); var baseActionsHashSet = redeclaredHandlersWithoutActionsList .Select(h => pxGraph.ActionsByNames[h.Symbol.Name].Symbol) .ToImmutableHashSet(); var walker = new Walker(context, pxContext, baseActionsHashSet, baseHandlersHashSet); foreach (var actionHandler in redeclaredHandlersWithoutActionsList) { context.CancellationToken.ThrowIfCancellationRequested(); walker.Visit(actionHandler.Node); } }
public override bool ShouldAnalyze(PXContext pxContext, PXGraphSemanticModel graph) => base.ShouldAnalyze(pxContext, graph) && graph.Type != GraphType.None; //-V3063
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); SaveChangesWalker walker = new SaveChangesWalker(context, pxContext, Descriptors.PX1058_PXGraphSavingChangesDuringInitialization); foreach (GraphInitializerInfo initializer in pxGraph.Initializers) { context.CancellationToken.ThrowIfCancellationRequested(); walker.Visit(initializer.Node); } walker = new SaveChangesWalker(context, pxContext, Descriptors.PX1083_SavingChangesInDataViewDelegate); foreach (DataViewDelegateInfo del in pxGraph.ViewDelegates) { context.CancellationToken.ThrowIfCancellationRequested(); walker.Visit(del.Node); } }
public void Analyze(SymbolAnalysisContext context, PXContext pxContext, CodeAnalysisSettings settings, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); PXGraphCreateInstanceWalker walker = new PXGraphCreateInstanceWalker(context, pxContext, Descriptors.PX1057_PXGraphCreationDuringInitialization); foreach (GraphInitializerInfo initializer in pxGraph.Initializers) { context.CancellationToken.ThrowIfCancellationRequested(); walker.Visit(initializer.Node); } walker = new PXGraphCreateInstanceWalker(context, pxContext, Descriptors.PX1084_GraphCreationInDataViewDelegate); foreach (DataViewDelegateInfo del in pxGraph.ViewDelegates) { context.CancellationToken.ThrowIfCancellationRequested(); walker.Visit(del.Node); } }
bool IPXGraphAnalyzer.ShouldAnalyze(PXContext pxContext, PXGraphSemanticModel graphOrGraphExtension) => !graphOrGraphExtension.Symbol.IsStatic;
public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); var walker = new Walker(context, pxContext, Descriptors.PX1089_UiPresentationLogicInActionDelegates); var delegateNodes = pxGraph.DeclaredActionHandlers .Where(h => h.Node != null) .Select(h => h.Node); foreach (var node in delegateNodes) { walker.Visit(node); } }
public void Analyze(SymbolAnalysisContext context, PXContext pxContext, CodeAnalysisSettings settings, PXGraphSemanticModel pxGraph) { context.CancellationToken.ThrowIfCancellationRequested(); var walker = new Walker(context, pxContext); CheckProcessingDelegates(pxGraph, walker, context.CancellationToken); CheckLongOperationStartDelegates(pxGraph.Symbol, walker, pxContext, context.Compilation, context.CancellationToken); }