public SD_Type_Reflected(Type type) { reflectedType = type; modifiers = type.IsNested ? (type.IsNestedPublic ? Modifiers.Public : type.IsNestedFamORAssem ? Modifiers.Internal | Modifiers.Protected : type.IsNestedAssembly ? Modifiers.Internal : type.IsNestedFamily ? Modifiers.Protected : Modifiers.Private) : (type.IsPublic ? Modifiers.Public : !type.IsVisible ? Modifiers.Internal : Modifiers.Private); if (type.IsAbstract && type.IsSealed) { modifiers |= Modifiers.Static; } else if (type.IsAbstract) { modifiers |= Modifiers.Abstract; } else if (type.IsSealed) { modifiers |= Modifiers.Sealed; } accessLevel = AccessLevelFromModifiers(modifiers); var assemblyDefinition = SD_Assembly.FromAssembly(type.Assembly); var generic = type.Name.IndexOf('`'); name = generic < 0 ? type.Name : type.Name.Substring(0, generic); name = name.Replace("[*]", "[]"); parentSymbol = string.IsNullOrEmpty(type.Namespace) ? assemblyDefinition.GlobalNamespace : assemblyDefinition.FindNamespace(type.Namespace); if (type.IsInterface) { kind = SymbolKind.Interface; } else if (type.IsEnum) { kind = SymbolKind.Enum; } else if (type.IsValueType) { kind = SymbolKind.Struct; } else if (type.IsClass) { kind = SymbolKind.Class; if (type.BaseType == typeof(System.MulticastDelegate)) { kind = SymbolKind.Delegate; } } else { kind = SymbolKind.None; } if (type.IsGenericTypeDefinition) { var gtd = type.GetGenericTypeDefinition() ?? type; var tp = gtd.GetGenericArguments(); var numGenericArgs = tp.Length; var declaringType = gtd.DeclaringType; if (declaringType != null && declaringType.IsGenericType) { var parentArgs = declaringType.GetGenericArguments(); numGenericArgs -= parentArgs.Length; } if (numGenericArgs > 0) { typeParameters = new List <SD_Type_Parameter>(numGenericArgs); for (var i = tp.Length - numGenericArgs; i < tp.Length; ++i) { var tpDef = new SD_Type_Parameter { kind = SymbolKind.TypeParameter, name = tp[i].Name, parentSymbol = this }; typeParameters.Add(tpDef); } } } if (type.BaseType != null) { baseType = ReflectedTypeReference.ForType(type.BaseType ?? typeof(object)); } interfaces = new List <SymbolReference>(); var implements = type.GetInterfaces(); for (var i = 0; i < implements.Length; ++i) { interfaces.Add(ReflectedTypeReference.ForType(implements[i])); } if (IsStatic && NumTypeParameters == 0 && !type.IsNested) { var attributes = System.Attribute.GetCustomAttributes(type); foreach (var attribute in attributes) { if (attribute is System.Runtime.CompilerServices.ExtensionAttribute) { ReflectAllMembers(BindingFlags.Public | BindingFlags.NonPublic); break; } } } }