protected CodeDomTypeMetadata(CodeType codeType, bool isNullable, bool isTask, CodeDomFileMetadata file)
 {
     this.codeType   = codeType;
     this.isNullable = isNullable;
     this.isTask     = isTask;
     this.file       = file;
 }
 protected CodeDomTypeMetadata(CodeType codeType, bool isNullable, bool isTask, CodeDomFileMetadata file)
 {
     this.codeType = codeType;
     this.isNullable = isNullable;
     this.isTask = isTask;
     this.file = file;
 }
        internal static IEnumerable<IEnumValueMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
        {
            var value = -1;

            foreach (var codeVariable in codeElements.OfType<CodeVariable2>())
            {
                if (codeVariable.InitExpression == null)
                    value++;
                else
                {
                    string initExpression = codeVariable.InitExpression.ToString();

                    if (int.TryParse(initExpression, out value) == false)
                    {
                        // Handle init expressions from char constants e.g. 'A' = 65
                        if (initExpression.Length == 3 && initExpression.StartsWith("'") && initExpression.EndsWith("'"))
                        {
                            value = initExpression[1];
                        }
                        else if (initExpression.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
                        {
                            var convertedValue = _converter.ConvertFromString(initExpression);
                            value = (int?)convertedValue ?? -1;
                        }
                        else
                        {
                            value = -1;
                        }
                    }
                }

                yield return new CodeDomEnumValueMetadata(codeVariable, file, value);
            }
        }
        public static IEnumerable<ITypeMetadata> LoadGenericTypeArguments(bool isGeneric, string typeFullName, CodeDomFileMetadata file)
        {
            if (isGeneric == false) return new ITypeMetadata[0];

            return LazyCodeDomTypeMetadata.ExtractGenericTypeNames(typeFullName).Select(fullName =>
            {
                if (fullName.EndsWith("[]"))
                    fullName = $"System.Collections.Generic.ICollection<{fullName.TrimEnd('[', ']')}>";

                var isNullable = fullName.EndsWith("?") || fullName.StartsWith("System.Nullable<");
                if (isNullable)
                {
                    fullName = fullName.EndsWith("?") ? fullName.TrimEnd('?') : fullName.Substring(16, fullName.Length - 17);
                    return new LazyCodeDomTypeMetadata(fullName, true, false, file);
                }

                var isTask = fullName.StartsWith("System.Threading.Tasks.Task");
                if (isTask)
                {
                    fullName = fullName.Contains("<") ? fullName.Substring(28, fullName.Length - 29) : "System.Void";

                    isNullable = fullName.EndsWith("?") || fullName.StartsWith("System.Nullable<");
                    if (isNullable)
                    {
                        fullName = fullName.EndsWith("?") ? fullName.TrimEnd('?') : fullName.Substring(16, fullName.Length - 17);
                        return new LazyCodeDomTypeMetadata(fullName, true, true, file);
                    }

                    return new LazyCodeDomTypeMetadata(fullName, false, true, file);
                }

                return new LazyCodeDomTypeMetadata(fullName, false, false, file);
            });
        }
        internal static IEnumerable<IEnumValueMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
        {
            var value = -1;

            foreach (var codeVariable in codeElements.OfType<CodeVariable2>())
            {
                if (codeVariable.InitExpression == null)
                    value++;
                else
                    value = Convert.ToInt32(codeVariable.InitExpression);

                yield return new CodeDomEnumValueMetadata(codeVariable, file, value);
            }
        }
        private CodeDomConstantMetadata(CodeVariable2 codeVariable, CodeDomFileMetadata file) : base(codeVariable, file)
        {
            var initValue = codeVariable.InitExpression.ToString();
            var value     = initValue == "null" ? string.Empty : initValue;

            if (value.Length >= 2 && value.StartsWith("\"") && value.EndsWith("\""))
            {
                Value = value.Substring(1, value.Length - 2).Replace("\\\"", "\"");
            }
            else
            {
                Value = value;
            }
        }
        private CodeDomConstantMetadata(CodeVariable2 codeVariable, CodeDomFileMetadata file)
            : base(codeVariable, file)
        {
            var initValue = codeVariable.InitExpression.ToString();
            var value = initValue == "null" ? string.Empty : initValue;

            if (value.Length >= 2 && value.StartsWith("\"") && value.EndsWith("\""))
            {
                Value = value.Substring(1, value.Length - 2).Replace("\\\"", "\"");
            }
            else
            {
                Value = value;
            }
        }
        private static ITypeMetadata GetType(dynamic element, CodeDomFileMetadata file)
        {
            var isGenericTypeArgument = element.Type.TypeKind == (int)vsCMTypeRef.vsCMTypeRefOther && element.Type.AsFullName.Split('.').Length == 1;

            if (isGenericTypeArgument)
            {
                return(new GenericTypeMetadata(element.Type.AsFullName));
            }

            var isArray = element.Type.TypeKind == (int)vsCMTypeRef.vsCMTypeRefArray;

            if (isArray)
            {
                var name = element.Type.ElementType.AsFullName;
                return(new LazyCodeDomTypeMetadata($"System.Collections.Generic.ICollection<{name}>", false, false, file));
            }

            CodeType codeType = element.Type.CodeType;

            var isNullable = codeType.FullName.EndsWith("?") || codeType.FullName.StartsWith("System.Nullable<");

            if (isNullable)
            {
                var name = codeType.FullName;
                name = name.EndsWith("?") ? name.TrimEnd('?') : name.Substring(16, name.Length - 17);

                return(new LazyCodeDomTypeMetadata(name, true, false, file));
            }

            var isTask = codeType.FullName.StartsWith("System.Threading.Tasks.Task");

            if (isTask)
            {
                var name = codeType.FullName;
                name = name.Contains("<") ? name.Substring(28, name.Length - 29) : "System.Void";

                isNullable = name.EndsWith("?") || name.StartsWith("System.Nullable<");
                if (isNullable)
                {
                    name = name.EndsWith("?") ? name.TrimEnd('?') : name.Substring(16, name.Length - 17);
                    return(new LazyCodeDomTypeMetadata(name, true, true, file));
                }

                return(new LazyCodeDomTypeMetadata(name, false, true, file));
            }

            return(new CodeDomTypeMetadata(codeType, false, false, file));
        }
示例#9
0
        private static ITypeMetadata GetType(dynamic element, CodeDomFileMetadata file)
        {
            //try
            //{
            var isGenericTypeArgument = element.Type.TypeKind == (int)vsCMTypeRef.vsCMTypeRefOther && element.Type.AsFullName.Split('.').Length == 1;

            if (isGenericTypeArgument)
            {
                return(new GenericTypeMetadata(element.Type.AsFullName));
            }

            var isArray = element.Type.TypeKind == (int)vsCMTypeRef.vsCMTypeRefArray;

            if (isArray)
            {
                var name = element.Type.ElementType.AsFullName;
                return(new LazyCodeDomTypeMetadata($"System.Collections.Generic.ICollection<{name}>", false, file));
            }

            CodeType codeType = element.Type.CodeType;

            var isNullable = codeType.FullName.EndsWith("?") || codeType.FullName.StartsWith("System.Nullable<");

            if (isNullable)
            {
                var name = codeType.FullName;
                name = name.EndsWith("?") ? name.TrimEnd('?') : name.Substring(16, name.Length - 17);

                return(new LazyCodeDomTypeMetadata(name, true, file));
            }

            return(new CodeDomTypeMetadata(codeType, false, file));
            //}
            //catch (NotImplementedException)
            //{
            //    return new LazyCodeDomType<T>(fullName, parent);
            //}
        }
 private CodeDomInterfaceMetadata(CodeInterface2 codeInterface, CodeDomFileMetadata file)
 {
     this.codeInterface = codeInterface;
     this.file = file;
 }
 private CodeDomMethodMetadata(CodeFunction2 codeFunction, CodeDomFileMetadata file)
 {
     this.codeFunction = codeFunction;
     this.file         = file;
 }
 private CodeDomMethodMetadata(CodeFunction2 codeFunction, CodeDomFileMetadata file)
 {
     this.codeFunction = codeFunction;
     this.file = file;
 }
 protected CodeDomFieldMetadata(CodeVariable2 codeVariable, CodeDomFileMetadata file)
 {
     this.codeVariable = codeVariable;
     this.file = file;
 }
 internal new static IEnumerable <IConstantMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeVariable2>().Where(v => v.IsConstant && v.Access == vsCMAccess.vsCMAccessPublic)
            .Select(v => new CodeDomConstantMetadata(v, file)));
 }
示例#15
0
 private CodeDomInterfaceMetadata(CodeInterface2 codeInterface, CodeDomFileMetadata file)
 {
     _codeInterface = codeInterface;
     _file          = file;
 }
 protected CodeDomFieldMetadata(CodeVariable2 codeVariable, CodeDomFileMetadata file)
 {
     this.codeVariable = codeVariable;
     this.file         = file;
 }
示例#17
0
 private CodeDomClassMetadata(CodeClass2 codeClass, CodeDomFileMetadata file)
 {
     this.codeClass = codeClass;
     this.file      = file;
 }
示例#18
0
 private CodeDomEventMetadata(CodeEvent codeEvent, CodeDomFileMetadata file)
 {
     this.codeEvent = codeEvent;
     this.file      = file;
 }
示例#19
0
 internal static IEnumerable <IEventMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeEvent>().Where(f => f.Access == vsCMAccess.vsCMAccessPublic && f.IsShared == false).Select(f => new CodeDomEventMetadata(f, file)));
 }
 private CodeDomClassMetadata(CodeClass2 codeClass, CodeDomFileMetadata file)
 {
     this.codeClass = codeClass;
     this.file = file;
 }
 private CodeDomEnumValueMetadata(CodeVariable2 codeVariable, CodeDomFileMetadata file, int value)
 {
     this.codeVariable = codeVariable;
     this.file = file;
     this.value = value;
 }
        public static IEnumerable <ITypeMetadata> LoadGenericTypeArguments(bool isGeneric, string typeFullName, CodeDomFileMetadata file)
        {
            if (isGeneric == false)
            {
                return(new ITypeMetadata[0]);
            }

            return(LazyCodeDomTypeMetadata.ExtractGenericTypeNames(typeFullName).Select(fullName =>
            {
                if (fullName.EndsWith("[]"))
                {
                    fullName = $"System.Collections.Generic.ICollection<{fullName.TrimEnd('[', ']')}>";
                }

                var isNullable = fullName.EndsWith("?") || fullName.StartsWith("System.Nullable<");
                if (isNullable)
                {
                    fullName = fullName.EndsWith("?") ? fullName.TrimEnd('?') : fullName.Substring(16, fullName.Length - 17);
                    return new LazyCodeDomTypeMetadata(fullName, true, false, file);
                }

                var isTask = fullName.StartsWith("System.Threading.Tasks.Task");
                if (isTask)
                {
                    fullName = fullName.Contains("<") ? fullName.Substring(28, fullName.Length - 29) : "System.Void";

                    isNullable = fullName.EndsWith("?") || fullName.StartsWith("System.Nullable<");
                    if (isNullable)
                    {
                        fullName = fullName.EndsWith("?") ? fullName.TrimEnd('?') : fullName.Substring(16, fullName.Length - 17);
                        return new LazyCodeDomTypeMetadata(fullName, true, true, file);
                    }

                    return new LazyCodeDomTypeMetadata(fullName, false, true, file);
                }

                return new LazyCodeDomTypeMetadata(fullName, false, false, file);
            }));
        }
示例#23
0
 private CodeDomDelegateMetadata(CodeDelegate2 codeDelegate, CodeDomFileMetadata file)
 {
     this.codeDelegate = codeDelegate;
     this.file         = file;
 }
示例#24
0
 private CodeDomEnumMetadata(CodeEnum codeEnum, CodeDomFileMetadata file)
 {
     this.codeEnum = codeEnum;
     this.file     = file;
 }
示例#25
0
 internal static IEnumerable <IDelegateMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeDelegate2>().Where(d => d.Access == vsCMAccess.vsCMAccessPublic).Select(d => FromCodeDelegate(d, file)));
 }
示例#26
0
 internal static IEnumerable <IEnumMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeEnum>().Where(e => e.Access == vsCMAccess.vsCMAccessPublic).Select(e => new CodeDomEnumMetadata(e, file)));
 }
示例#27
0
 internal static IClassMetadata FromCodeClass(CodeClass2 codeClass, CodeDomFileMetadata file)
 {
     return(codeClass == null || codeClass.Access != vsCMAccess.vsCMAccessPublic || codeClass.FullName == "System.Object" ? null : new CodeDomClassMetadata(codeClass, file));
 }
示例#28
0
        private static ITypeMetadata GetType(dynamic element, CodeDomFileMetadata file)
        {
            var isGenericTypeArgument = element.Type.TypeKind == (int)vsCMTypeRef.vsCMTypeRefOther && element.Type.AsFullName.Split('.').Length == 1;
            if (isGenericTypeArgument)
            {
                return new GenericTypeMetadata(element.Type.AsFullName);
            }

            var isArray = element.Type.TypeKind == (int)vsCMTypeRef.vsCMTypeRefArray;
            if (isArray)
            {
                var name = element.Type.ElementType.AsFullName;
                return new LazyCodeDomTypeMetadata($"System.Collections.Generic.ICollection<{name}>", false, false, file);
            }

            CodeType codeType = element.Type.CodeType;

            var isNullable = codeType.FullName.EndsWith("?") || codeType.FullName.StartsWith("System.Nullable<");
            if (isNullable)
            {
                var name = codeType.FullName;
                name = name.EndsWith("?") ? name.TrimEnd('?') : name.Substring(16, name.Length - 17);

                return new LazyCodeDomTypeMetadata(name, true, false, file);
            }

            var isTask = codeType.FullName.StartsWith("System.Threading.Tasks.Task");
            if (isTask)
            {
                var name = codeType.FullName;
                name = name.Contains("<") ? name.Substring(28, name.Length - 29) : "System.Void";

                isNullable = name.EndsWith("?") || name.StartsWith("System.Nullable<");
                if (isNullable)
                {
                    name = name.EndsWith("?") ? name.TrimEnd('?') : name.Substring(16, name.Length - 17);
                    return new LazyCodeDomTypeMetadata(name, true, true, file);
                }

                return new LazyCodeDomTypeMetadata(name, false, true, file);
            }

            return new CodeDomTypeMetadata(codeType, false, false, file);
        }
 internal static IDelegateMetadata FromCodeDelegate(CodeDelegate2 codeElement, CodeDomFileMetadata file)
 {
     return new CodeDomDelegateMetadata(codeElement, file);
 }
 internal static IEnumerable<IAttributeMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeAttribute2>().Select(a => new CodeDomAttributeMetadata(a, file));
 }
 internal static IClassMetadata FromCodeClass(CodeClass2 codeClass, CodeDomFileMetadata file)
 {
     return codeClass == null || codeClass.Access != vsCMAccess.vsCMAccessPublic || codeClass.FullName == "System.Object" ? null : new CodeDomClassMetadata(codeClass, file);
 }
示例#32
0
 public static ITypeMetadata FromCodeElement(CodeParameter2 codeVariable, CodeDomFileMetadata file)
 {
     return GetType(codeVariable, file);
 }
 internal static IEnumerable<IMethodMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeFunction2>().Where(f => f.Access == vsCMAccess.vsCMAccessPublic && f.FunctionKind != vsCMFunction.vsCMFunctionConstructor && f.IsShared == false).Select(f => new CodeDomMethodMetadata(f, file));
 }
 private CodeDomAttributeMetadata(CodeAttribute2 codeAttribute, CodeDomFileMetadata file)
 {
     this.codeAttribute = codeAttribute;
     this.file = file;
 }
 internal static IEnumerable<IFieldMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeVariable2>().Where(v => v.Access == vsCMAccess.vsCMAccessPublic && v.IsConstant == false && v.IsShared == false).Select(v => new CodeDomFieldMetadata(v, file));
 }
示例#36
0
 private CodeDomInterfaceMetadata(CodeInterface2 codeInterface, CodeDomFileMetadata file)
 {
     this.codeInterface = codeInterface;
     this.file          = file;
 }
 internal static IEnumerable<IInterfaceMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeInterface2>().Where(i => i.Access == vsCMAccess.vsCMAccessPublic).Select(i => new CodeDomInterfaceMetadata(i, file));
 }
示例#38
0
        internal static IEnumerable <IEnumValueMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
        {
            var value = -1;

            foreach (var codeVariable in codeElements.OfType <CodeVariable2>())
            {
                if (codeVariable.InitExpression == null)
                {
                    value++;
                }
                else
                {
                    string initExpression = codeVariable.InitExpression.ToString();

                    if (int.TryParse(initExpression, out value) == false)
                    {
                        // Handle init expressions from char constants e.g. 'A' = 65
                        if (initExpression.Length == 3 && initExpression.StartsWith("'") && initExpression.EndsWith("'"))
                        {
                            value = initExpression[1];
                        }
                        else
                        {
                            value = -1;
                        }
                    }
                }

                yield return(new CodeDomEnumValueMetadata(codeVariable, file, value));
            }
        }
 internal static IEnumerable <IMethodMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeFunction2>().Where(f => f.Access == vsCMAccess.vsCMAccessPublic && f.FunctionKind != vsCMFunction.vsCMFunctionConstructor && f.IsShared == false).Select(f => new CodeDomMethodMetadata(f, file)));
 }
示例#40
0
 private CodeDomEnumMetadata(CodeEnum codeEnum, CodeDomFileMetadata file)
 {
     this.codeEnum = codeEnum;
     this.file = file;
 }
示例#41
0
 internal static IDelegateMetadata FromCodeDelegate(CodeDelegate2 codeElement, CodeDomFileMetadata file)
 {
     return(new CodeDomDelegateMetadata(codeElement, file));
 }
示例#42
0
 internal static IEnumerable<IEnumMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeEnum>().Where(e => e.Access == vsCMAccess.vsCMAccessPublic).Select(e => new CodeDomEnumMetadata(e, file));
 }
 public LazyCodeDomTypeMetadata(string fullName, bool isNullable, CodeDomFileMetadata file) : base(null, isNullable, file)
 {
     this.fullName = fullName;
     this.file     = file;
 }
示例#44
0
 private CodeDomPropertyMetadata(CodeProperty2 codeProperty, CodeDomFileMetadata file)
 {
     this.codeProperty = codeProperty;
     this.file         = file;
 }
示例#45
0
 internal static IEnumerable <IClassMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeClass2>().Where(c => c.Access == vsCMAccess.vsCMAccessPublic && c.FullName != "System.Object").Select(c => new CodeDomClassMetadata(c, file)));
 }
 private CodeDomEnumValueMetadata(CodeVariable2 codeVariable, CodeDomFileMetadata file, long value)
 {
     this.codeVariable = codeVariable;
     this.file         = file;
     this.value        = value;
 }
 private CodeDomParameterMetadata(CodeParameter2 codeParameter, CodeDomFileMetadata file)
 {
     this.codeParameter = codeParameter;
     this.file = file;
 }
 private CodeDomEventMetadata(CodeEvent codeEvent, CodeDomFileMetadata file)
 {
     this.codeEvent = codeEvent;
     this.file = file;
 }
 private CodeDomDelegateMetadata(CodeDelegate2 codeDelegate, CodeDomFileMetadata file)
 {
     this.codeDelegate = codeDelegate;
     this.file = file;
 }
 internal static IEnumerable<IParameterMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeParameter2>().Select(p => new CodeDomParameterMetadata(p, file));
 }
 internal static IEnumerable<IDelegateMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeDelegate2>().Where(d => d.Access == vsCMAccess.vsCMAccessPublic).Select(d => FromCodeDelegate(d, file));
 }
 public LazyCodeDomTypeMetadata(string fullName, bool isNullable, bool isType, CodeDomFileMetadata file) : base(null, isNullable, isType, file)
 {
     this.fullName = fullName;
     this.file = file;
 }
示例#53
0
 internal static IEnumerable <IInterfaceMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeInterface2>().Where(i => i.Access == vsCMAccess.vsCMAccessPublic).Select(i => new CodeDomInterfaceMetadata(i, file)));
 }
 internal static IEnumerable<IClassMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeClass2>().Where(c => c.Access == vsCMAccess.vsCMAccessPublic && c.FullName != "System.Object").Select(c => new CodeDomClassMetadata(c, file));
 }
示例#55
0
 internal static IEnumerable <IPropertyMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeProperty2>().Where(p => p.Access == vsCMAccess.vsCMAccessPublic && p.IsShared == false).Select(p => new CodeDomPropertyMetadata(p, file)));
 }
 private CodeDomConstantMetadata(CodeVariable2 codeVariable, CodeDomFileMetadata file) : base(codeVariable, file)
 {
 }
        internal static IEnumerable <IEnumValueMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
        {
            long value = -1;

            foreach (var codeVariable in codeElements.OfType <CodeVariable2>())
            {
                if (codeVariable.InitExpression == null)
                {
                    value++;
                }
                else
                {
                    string initExpression = codeVariable.InitExpression.ToString();

                    if (long.TryParse(initExpression, out value) == false)
                    {
                        // Handle init expressions from char constants e.g. 'A' = 65
                        if (initExpression.Length == 3 && initExpression.StartsWith("'") && initExpression.EndsWith("'"))
                        {
                            value = initExpression[1];
                        }
                        else if (initExpression.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
                        {
                            var convertedValue = _converter.ConvertFromString(initExpression);
                            value = (long?)convertedValue ?? -1;
                        }
                        else
                        {
                            value = -1;
                        }
                    }
                }

                yield return(new CodeDomEnumValueMetadata(codeVariable, file, value));
            }
        }
 private CodeDomParameterMetadata(CodeParameter2 codeParameter, CodeDomFileMetadata file)
 {
     this.codeParameter = codeParameter;
     this.file          = file;
 }
 internal static IEnumerable<IEventMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return codeElements.OfType<CodeEvent>().Where(f => f.Access == vsCMAccess.vsCMAccessPublic && f.IsShared == false).Select(f => new CodeDomEventMetadata(f, file));
 }
 internal static IEnumerable <IParameterMetadata> FromCodeElements(CodeElements codeElements, CodeDomFileMetadata file)
 {
     return(codeElements.OfType <CodeParameter2>().Select(p => new CodeDomParameterMetadata(p, file)));
 }