protected virtual void BuildCache() { System.Type v_safeFilterType = m_filterType == null ? (m_acceptAbstract ? typeof(object) : null) : m_filterType; string v_safeTypeNameInAssembly = GetSafeTypedNameInAssembly(v_safeFilterType); ArrayDict <Assembly, System.Type[]> v_assemblyTypesDict = AssemblyUtils.GetAssemblyTypesDict(false); List <Assembly> v_assemblies = new List <Assembly>(); m_currentAssembly = m_currentType == null || m_currentType.CastedType == null ? null : m_currentType.CastedType.Assembly; //Filter Assemblies foreach (KVPair <Assembly, System.Type[]> v_pair in v_assemblyTypesDict) { if (v_pair != null && v_pair.Key != null) { if (AssemblyContainsFilteredType(v_pair.Key, m_filterType, m_acceptGeneric, m_acceptAbstract)) { v_assemblies.Add(v_pair.Key); } try { if (m_currentAssembly == null && m_currentType != null && ((SerializableType)m_currentType).StringType.Contains(v_pair.Key.FullName)) { m_currentAssembly = v_pair.Key; } } catch { } } } if (m_acceptNull) { v_assemblies.Insert(0, null); } if (m_currentAssembly == null && !m_acceptNull) { m_currentAssembly = v_safeFilterType.Assembly; } //Draw Popup Select Assembly m_possibleAssemblies = v_assemblies.ToArray(); m_possibleAssembliesString = v_assemblies.GetStringList().ToArray(); m_selectedAssemblyIndex = v_assemblies.Contains(m_currentAssembly) ? v_assemblies.IndexOf(m_currentAssembly) : -1; //Pick All Types if dont use Assembly Filter List <System.Type> v_assemblyTypes = new List <System.Type>(); foreach (var v_assembly in v_assemblies) { try { var v_types = v_assemblyTypesDict.GetValueWithKey(v_assembly); if (v_types != null) { foreach (System.Type v_type in v_types) { if (v_type != null && (!v_type.IsGenericTypeDefinition || m_acceptGeneric) && (!v_type.IsAbstract || m_acceptAbstract) && (m_filterType == null || TypeExtensions.IsSameOrSubClassOrImplementInterface(v_type, m_filterType) || v_type.FullName.Contains(v_safeTypeNameInAssembly))) { v_assemblyTypes.Add(v_type); } } } } catch { } } if (m_acceptNull) { v_assemblyTypes.Insert(0, null); } m_possibleTypesInAllAssemblies = v_assemblyTypes.ToArray(); m_possibleTypesInAllAssembliesString = v_assemblyTypes.GetStringList().ToArray(); if (m_currentType == null && !m_acceptNull) { m_selectedTypeIndexInAllAssemblies = v_assemblyTypes.Contains(v_safeFilterType) ? v_assemblyTypes.IndexOf(v_safeFilterType) : -1; } else { m_selectedTypeIndexInAllAssemblies = v_assemblyTypes.Contains(m_currentType) ? v_assemblyTypes.IndexOf(m_currentType) : -1; } //Filter Types in Assembly Current Assembly v_assemblyTypes.Clear(); if (m_currentAssembly != null) { try { var v_types = v_assemblyTypesDict.GetValueWithKey(m_currentAssembly); if (v_types != null) { foreach (System.Type v_type in v_types) { if (v_type != null && (!v_type.IsGenericTypeDefinition || m_acceptGeneric) && (!v_type.IsAbstract || m_acceptAbstract) && (m_filterType == null || TypeExtensions.IsSameOrSubClassOrImplementInterface(v_type, m_filterType) || v_type.FullName.Contains(v_safeTypeNameInAssembly))) { v_assemblyTypes.Add(v_type); } } } } catch { } } if (m_acceptNull) { v_assemblyTypes.Insert(0, null); } m_possibleTypesInCurrentAssembly = v_assemblyTypes.ToArray(); m_possibleTypesInCurrentAssemblyString = v_assemblyTypes.GetStringList().ToArray(); if (m_currentType == null && !m_acceptNull) { m_selectedTypeIndexInCurrentAssembly = v_assemblyTypes.Contains(v_safeFilterType) ? v_assemblyTypes.IndexOf(v_safeFilterType) : -1; } else { m_selectedTypeIndexInCurrentAssembly = v_assemblyTypes.Contains(m_currentType) ? v_assemblyTypes.IndexOf(m_currentType) : -1; } }