|
3 | 3 | using System; |
4 | 4 | using System.Collections.Generic; |
5 | 5 | using System.IO; |
| 6 | + using System.Linq; |
6 | 7 | using System.Reflection; |
7 | 8 | using TypeReferences; |
8 | 9 | using UnityEngine; |
@@ -143,12 +144,18 @@ public static Assembly TryLoadAssembly(string assemblyName) |
143 | 144 |
|
144 | 145 | private static List<Type> GetFilteredTypesFromAssembly(Assembly assembly, TypeOptionsAttribute filter) |
145 | 146 | { |
146 | | - var visibleTypes = GetVisibleTypesFromAssembly(assembly); |
| 147 | + List<Type> assemblyTypes; |
| 148 | + |
| 149 | + assemblyTypes = filter.AllowInternal |
| 150 | + ? GetAllTypesFromAssembly(assembly) |
| 151 | + : GetVisibleTypesFromAssembly(assembly); |
| 152 | + |
147 | 153 | var filteredTypes = new List<Type>(); |
148 | | - int visibleTypesCount = visibleTypes.Count; |
| 154 | + int visibleTypesCount = assemblyTypes.Count; |
| 155 | + |
149 | 156 | for (int i = 0; i < visibleTypesCount; i++) |
150 | 157 | { |
151 | | - Type type = visibleTypes[i]; |
| 158 | + Type type = assemblyTypes[i]; |
152 | 159 | if (FilterConstraintIsSatisfied(filter, type)) |
153 | 160 | { |
154 | 161 | filteredTypes.Add(type); |
@@ -179,6 +186,19 @@ private static List<Type> GetVisibleTypesFromAssembly(Assembly assembly) |
179 | 186 | } |
180 | 187 | } |
181 | 188 |
|
| 189 | + private static List<Type> GetAllTypesFromAssembly(Assembly assembly) |
| 190 | + { |
| 191 | + try |
| 192 | + { |
| 193 | + return assembly.GetTypes().ToList(); |
| 194 | + } |
| 195 | + catch (ReflectionTypeLoadException e) |
| 196 | + { |
| 197 | + Debug.LogError($"Types could not be extracted from assembly {assembly}: {e.Message}"); |
| 198 | + return new List<Type>(0); |
| 199 | + } |
| 200 | + } |
| 201 | + |
182 | 202 | private static bool FilterConstraintIsSatisfied(TypeOptionsAttribute filter, Type type) |
183 | 203 | { |
184 | 204 | return filter == null || filter.MatchesRequirements(type); |
|
0 commit comments