private CsProperty CreatePropertyFromMethodGroup()

in SharpGen/Transform/PropertyBuilder.cs [36:70]


        private CsProperty CreatePropertyFromMethodGroup(IGrouping<string, CsMethod> group)
        {
            var getters = group.Where(method => GetPropertySpec(method).PropertyMethod == PropertyMethod.Getter).ToList();
            var setters = group.Where(method => GetPropertySpec(method).PropertyMethod == PropertyMethod.Setter).ToList();

            if (getters.Count == 0 && setters.Count == 0)
                return null;

            if (getters.Count > 1 || setters.Count > 1)
                return null;

            var getter = getters.Count == 0 ? null : getters[0];
            var setter = setters.Count == 0 ? null : setters[0];

            if (!ValidateGetter(getter) || !ValidateSetter(setter))
                return null;

            var isParamGetter = getter != null && getter.Parameters.Count == 1;
            var getterPropType = isParamGetter ? getter.Parameters[0].PublicType : getter?.ReturnValue.PublicType;
            var setterPropType = setter?.Parameters[0].PublicType;

            if (getterPropType != null && setterPropType != null && getterPropType != setterPropType)
                return null;

            // Associate the property with the underlying method's C++ element.
            var cppElement = getter?.CppElement ?? setter?.CppElement;

            if (isParamGetter)
                isParamGetter = !getter.Parameters[0].UsedAsReturn;

            return new CsProperty(ioc, (CppMethod) cppElement, group.Key, getter, setter, isParamGetter)
            {
                PublicType = getterPropType ?? setterPropType
            };
        }