예제 #1
0
        private bool IsValidExtensionType(IType actualType, IType extensionType, IExtensionEnabled extension)
        {
            if (TypeCompatibilityRules.IsAssignableFrom(extensionType, actualType))
            {
                return(true);
            }

            // Check for a valid generic extension
            IMethod method = extension as IMethod;

            if (method == null || method.GenericInfo == null)
            {
                return(false);
            }

            System.Collections.Generic.List <IGenericParameter> genericParameters = new System.Collections.Generic.List <IGenericParameter>(GenericsServices.FindGenericParameters(extensionType));
            if (genericParameters.Count == 0)
            {
                return(false);
            }

            TypeInferrer inferrer = new TypeInferrer(genericParameters);

            inferrer.Infer(extensionType, actualType);
            return(inferrer.FinalizeInference());
        }
예제 #2
0
        private bool IsExtensionOf(IType type, IExtensionEnabled entity)
        {
            if (entity == null || !entity.IsExtension)
            {
                return(false);
            }

            IParameter[] parameters = entity.GetParameters();
            if (parameters.Length == 0)
            {
                return(false);
            }

            IType extensionType = parameters[0].Type;

            return(IsValidExtensionType(type, extensionType, entity));
        }
예제 #3
0
            public bool Match(object item)
            {
                IExtensionEnabled e = item as IExtensionEnabled;

                if (e == null)
                {
                    return(true);
                }
                if (!e.IsExtension)
                {
                    return(true);
                }
                IParameter[] parameters = e.GetParameters();
                if (parameters.Length == 0)
                {
                    return(true);
                }
                return(!parameters[0].Type.IsAssignableFrom(_type));
            }