/// <summary> /// NOTE: Code-generation-invoked method, method name and parameter order matters /// </summary> /// <param name="eventBean">bean</param> /// <param name="propertyGetterCache">cache</param> /// <param name="propertyName">name</param> /// <returns>value</returns> public static bool VariantExists( EventBean eventBean, VariantPropertyGetterCache propertyGetterCache, string propertyName) { var variant = (VariantEvent) eventBean; var getter = propertyGetterCache.GetGetter(propertyName, variant.UnderlyingEventBean.EventType); return getter != null && getter.IsExistsProperty(variant.UnderlyingEventBean); }
/// <summary> /// NOTE: Code-generation-invoked method, method name and parameter order matters /// </summary> /// <param name="eventBean">bean</param> /// <param name="propertyGetterCache">cache</param> /// <param name="propertyName">name</param> /// <returns>value</returns> /// <throws>PropertyAccessException ex</throws> public static object VariantGet( EventBean eventBean, VariantPropertyGetterCache propertyGetterCache, string propertyName) { var variant = (VariantEvent) eventBean; var getter = propertyGetterCache.GetGetter(propertyName, variant.UnderlyingEventBean.EventType); var result = getter?.Get(variant.UnderlyingEventBean); return result; }
/// <summary> /// Ctor. /// </summary> /// <param name="variantSpec">the variant specification</param> /// <param name="metadata">event type metadata</param> public VariantEventType( EventTypeMetadata metadata, VariantSpec variantSpec) { Metadata = metadata; Variants = variantSpec.EventTypes; IsVariantAny = variantSpec.TypeVariance == TypeVariance.ANY; VariantPropertyGetterCache = new VariantPropertyGetterCache(variantSpec.EventTypes); if (IsVariantAny) { propertyResStrategy = new VariantPropResolutionStrategyAny(this); } else { propertyResStrategy = new VariantPropResolutionStrategyDefault(this); } propertyDesc = new Dictionary<string, VariantPropertyDesc>(); foreach (var type in Variants) { foreach (var property in CollectionUtil.CopyAndSort(type.PropertyNames)) { if (!propertyDesc.ContainsKey(property)) { FindProperty(property); } } } var propertyNameKeySet = propertyDesc.Keys; PropertyNames = propertyNameKeySet.ToArray(); // for each of the properties in each type, attempt to load the property to build a property list PropertyDescriptors = new EventPropertyDescriptor[propertyDesc.Count]; propertyDescriptorMap = new Dictionary<string, EventPropertyDescriptor>(); var count = 0; foreach (var desc in propertyDesc) { var type = desc.Value.PropertyType; var descriptor = new EventPropertyDescriptor( desc.Key, type, type.GetIndexType(), false, false, type.IsIndexed(), false, desc.Value.PropertyType.IsFragmentableType()); PropertyDescriptors[count++] = descriptor; propertyDescriptorMap.Put(desc.Key, descriptor); } }