Exemple #1
0
        public GraphSemanticModelForCodeMap(PXGraphEventSemanticModel graphEventSemanticModel, PXContext context)
        {
            graphEventSemanticModel.ThrowOnNull(nameof(graphEventSemanticModel));
            context.ThrowOnNull(nameof(context));

            GraphModel  = graphEventSemanticModel;
            PXOverrides = GetPXOverrides(graphEventSemanticModel.Symbol, context).ToImmutableArray();
        }
        private void AnalyzeGraphEventsForEventType(EventType eventType, SymbolAnalysisContext context, PXContext pxContext,
                                                    PXGraphEventSemanticModel graphOrGraphExtensionWithEvents)
        {
            var graphEventsOfEventType      = graphOrGraphExtensionWithEvents.GetEventsByEventType(eventType);
            ThrowInGraphEventsWalker?walker = null;

            foreach (GraphEventInfoBase graphEvent in graphEventsOfEventType)
            {
                walker ??= new ThrowInGraphEventsWalker(context, pxContext, eventType, graphOrGraphExtensionWithEvents);

                graphEvent.Node.Accept(walker);
            }
        }
        protected virtual bool TryToInferGraphOrGraphExtensionSemanticModel(INamedTypeSymbol graphSymbol, PXContext context,
                                                                            out ISemanticModel graphSemanticModel,
                                                                            CancellationToken cancellationToken = default)
        {
            var graphSimpleModel = PXGraphEventSemanticModel.InferModels(context, graphSymbol, cancellationToken).FirstOrDefault();

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

            graphSemanticModel = new GraphSemanticModelForCodeMap(graphSimpleModel, context);
            return(true);
        }
        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 ThrowInGraphEventsWalker(SymbolAnalysisContext context, PXContext pxContext, EventType eventType,
                                 PXGraphEventSemanticModel graphOrGraphExtension) :
     base(context, pxContext, eventType)
 {
     _graphOrGraphExtension = graphOrGraphExtension;
 }