Example #1
0
        public static CodegenExpression CodegenGetterEventDistinct(
            bool isDistinct,
            EventType eventType,
            MultiKeyClassRef optionalDistinctMultiKey,
            CodegenMethod method,
            CodegenClassScope classScope)
        {
            if (!isDistinct)
            {
                return(ConstantNull());
            }

            var propertyNames = eventType.PropertyNames;
            var spi           = (EventTypeSPI)eventType;

            if (propertyNames.Length == 1)
            {
                var propertyName = propertyNames[0];
                var result       = eventType.GetPropertyType(propertyName);
                var getter       = spi.GetGetterSPI(propertyName);
                return(EventTypeUtility.CodegenGetterWCoerceWArray(
                           typeof(EventPropertyValueGetter),
                           getter,
                           result,
                           null,
                           method,
                           typeof(MultiKeyCodegen),
                           classScope));
            }

            var getters           = new EventPropertyGetterSPI[propertyNames.Length];
            var getterResultTypes = new Type[propertyNames.Length];

            for (var i = 0; i < propertyNames.Length; i++)
            {
                getterResultTypes[i] = eventType.GetPropertyType(propertyNames[i]);
                getters[i]           = spi.GetGetterSPI(propertyNames[i]);
            }

            if (eventType is VariantEventType)
            {
                return(CodegenMultikeyGetterBeanGet(getters, getterResultTypes, optionalDistinctMultiKey, method, classScope));
            }

            return(CodegenGetterMayMultiKey(eventType, getters, getterResultTypes, null, optionalDistinctMultiKey, method, classScope));
        }