コード例 #1
0
        private EventsCollector InitializeEvents()
        {
            _cancellation.ThrowIfCancellationRequested();
            var methods = GetAllGraphMethodsFromBaseToDerived();

            var eventsCollector  = new EventsCollector(this, _pxContext);
            int declarationOrder = 0;

            foreach (IMethodSymbol method in methods)
            {
                _cancellation.ThrowIfCancellationRequested();

                var(eventType, eventSignatureType) = method.GetEventHandlerInfo(_pxContext);

                if (eventSignatureType == EventHandlerSignatureType.None || eventType == EventType.None)
                {
                    continue;
                }

                GraphEventCategory eventCategory = GetEventCategoryByEventType(eventType);

                if (!IsValidGraphEvent(method, eventSignatureType, eventCategory))
                {
                    continue;
                }

                if (eventCategory == GraphEventCategory.Row)
                {
                    eventsCollector.AddEvent(eventSignatureType, eventType, method, declarationOrder, _cancellation);
                }
                else if (eventCategory == GraphEventCategory.Field)
                {
                    eventsCollector.AddFieldEvent(eventSignatureType, eventType, method, declarationOrder, _cancellation);
                }

                declarationOrder++;
            }

            return(eventsCollector);
        }
コード例 #2
0
        /// <summary>
        /// <see cref="CodeResolvingUtils.GetEventHandlerInfo"/> helper allows not only graph events but also helper methods with appropriate signature.
        /// However, for graph events semantic model we are interested only in graph events, so we need to rule out helper methods by checking their signature.
        /// </summary>
        /// <param name="eventCandidate">The event candidate.</param>
        /// <param name="signatureType">Type of the signature.</param>
        /// <param name="eventCategory">Category the event belongs to.</param>
        /// <returns/>
        private bool IsValidGraphEvent(IMethodSymbol eventCandidate, EventHandlerSignatureType signatureType, GraphEventCategory eventCategory)
        {
            if (eventCandidate.IsStatic || eventCandidate.Parameters.Length > 2 || eventCategory == GraphEventCategory.None)
            {
                return(false);
            }
            else if (signatureType != EventHandlerSignatureType.Default)
            {
                return(true);
            }

            const char underscore = '_';

            if (eventCandidate.Name[0] == underscore || eventCandidate.Name[eventCandidate.Name.Length - 1] == underscore)
            {
                return(false);
            }

            int underscoresCount = eventCandidate.Name.Count(c => c == underscore);

            switch (eventCategory)
            {
            case GraphEventCategory.Row:
                return(underscoresCount == 1);

            case GraphEventCategory.Field:
                return(underscoresCount == 2);

            default:
                return(false);
            }
        }