AgentMulder.ReSharper.Domain.Utils.ContainerExtensions.GetRegisteredTypes C# (CSharp) Method

GetRegisteredTypes() public static method

public static GetRegisteredTypes ( this expression ) : IEnumerable
expression this
return IEnumerable
        public static IEnumerable<ITypeElement> GetRegisteredTypes(this ICSharpExpression expression)
        {
            // match typeof() expressions
            var typeOfExpression = expression as ITypeofExpression;
            if (typeOfExpression != null)
            {
                var typeElement = (IDeclaredType)typeOfExpression.ArgumentType;

                yield return typeElement.GetTypeElement();
            }

            // match new[] or new Type[] expressions
            var arrayExpression = expression as IArrayCreationExpression;
            if (arrayExpression != null)
            {
                foreach (var initializer in arrayExpression.ArrayInitializer.ElementInitializers.OfType<IExpressionInitializer>())
                {
                    foreach (ITypeElement type in initializer.Value.GetRegisteredTypes())
                    {
                        yield return type;
                    }
                }
            }

            // match new List<Type> expressions
            var objectCreationExpression = expression as IObjectCreationExpression;
            if (objectCreationExpression != null)
            {
                foreach (var initializer in objectCreationExpression.Initializer.InitializerElements.OfType<ICollectionElementInitializer>())
                {
                    // todo find out if THERE CAN BE ONLY ONE!!!1
                    if (initializer.Arguments.Count != 1)
                    {
                        continue;
                    }

                    foreach (ITypeElement type in initializer.Arguments[0].Value.GetRegisteredTypes())
                    {
                        yield return type;
                    }
                }
            }
        }