private static void AssignListProperty <TItem>(TItem item, PropertyInfo prop, IEnumerable <AttributeSyntax> matchingAttributes)
        {
            var propType       = UnderlyingType(prop.PropertyType);
            var concreteMethod = ReflectionSupport.MakeMethod(typeof(ParserForMetadata <T>), "AssignListPropertyGeneric", typeof(TItem), propType);

            concreteMethod.Invoke(null, new object[] { item, prop, matchingAttributes });
        }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TMethod"></typeparam>
        /// <param name="node"></param>
        /// <returns></returns>
        /// <remarks>
        /// Don't be concerned by the lack of references, this is called via reflection
        /// </remarks>
        private IEnumerable <TParamItem> GetParsedParametersGeneric <TParamItem>(MethodDeclarationSyntax methodNode)
        {
            var ret            = new List <TParamItem>();
            var concreteMethod = ReflectionSupport.MakeMethod(typeof(ParserForMetadata <T>), "ParseParameter", typeof(TParamItem));
            var parameterNodes = methodNode.GetParameters();

            foreach (var parameterNode in parameterNodes)
            {
                ret.Add((TParamItem)concreteMethod.Invoke(this, new object[] { parameterNode }));
            }
            return(ret);
        }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TMethod"></typeparam>
        /// <param name="node"></param>
        /// <returns></returns>
        /// <remarks>
        /// Don't be concerned by the lack of references, this is called via reflection
        /// </remarks>
        private IEnumerable <TMethodItem> GetParsedMethodsGeneric <TMethodItem>(ClassDeclarationSyntax classNode)
        {
            var ret            = new List <TMethodItem>();
            var concreteMethod = ReflectionSupport.MakeMethod(typeof(ParserForMetadata <T>), "ParseMethod", typeof(TMethodItem));
            var methodNodes    = classNode.GetMethods();

            foreach (var methodNode in methodNodes)
            {
                ret.Add((TMethodItem)concreteMethod.Invoke(this, new object[] { methodNode }));
            }
            return(ret);
        }
        private IEnumerable GetParsedMethods <TDom>(TDom domItem, System.Reflection.TypeInfo propType)
        {
            var ret            = new List <TMethodItem>();
            var concreteMethod = ReflectionSupport.MakeMethod(typeof(ParserForMetadata <T>), "ParseMethod", typeof(TMethodItem));
            var methodNodes    = classNode.GetMethods();

            foreach (var methodNode in methodNodes)
            {
                ret.Add((TMethodItem)concreteMethod.Invoke(this, new object[] { methodNode }));
            }
            return(ret);

            var concreteMethod = ReflectionSupport.MakeMethod(typeof(ParserForMetadata <T>), "GetParsedMethodsGeneric", propType);

            return((IEnumerable)concreteMethod.Invoke(this, new object[] { classNode }));
        }
        private IEnumerable GetParsedParameters(SyntaxNode methodNode, Type propType)
        {
            var concreteMethod = ReflectionSupport.MakeMethod(typeof(ParserForMetadata <T>), "GetParsedParametersGeneric", propType);

            return((IEnumerable)concreteMethod.Invoke(this, new object[] { methodNode }));
        }