Changeset 5850 for trunk/sources/HeuristicLab.PluginInfrastructure
- Timestamp:
- 03/28/11 19:12:31 (14 years ago)
- Location:
- trunk/sources/HeuristicLab.PluginInfrastructure/3.3
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.PluginInfrastructure/3.3/DefaultApplicationManager.cs
r5741 r5850 225 225 } 226 226 227 internal static IEnumerable<Type> GetTypes(IEnumerable<Type> types, bool onlyInstantiable, bool allTypes) { 228 IEnumerable<Type> result = GetTypes(types.First(), onlyInstantiable); 229 foreach (Type type in types.Skip(1)) { 230 IEnumerable<Type> discoveredTypes = GetTypes(type, onlyInstantiable); 231 if (allTypes) result = result.Intersect(discoveredTypes); 232 else result = result.Union(discoveredTypes); 233 } 234 235 if (!allTypes) return result.Distinct(); 236 return result; 237 } 238 227 239 /// <summary> 228 240 /// Finds all types that are subtypes or equal to the specified type if they are part of the given … … 243 255 } 244 256 257 internal static IEnumerable<Type> GetTypes(IEnumerable<Type> types, IPluginDescription pluginDescription, bool onlyInstantiable, bool allTypes) { 258 IEnumerable<Type> result = GetTypes(types.First(), pluginDescription, onlyInstantiable); 259 foreach (Type type in types.Skip(1)) { 260 IEnumerable<Type> discoveredTypes = GetTypes(type, pluginDescription, onlyInstantiable); 261 if (allTypes) result = result.Intersect(discoveredTypes); 262 else result = result.Union(discoveredTypes); 263 } 264 265 if (!allTypes) return result.Distinct(); 266 return result; 267 } 268 245 269 private static bool IsDynamicAssembly(Assembly asm) { 246 270 return (asm is System.Reflection.Emit.AssemblyBuilder) || string.IsNullOrEmpty(asm.Location); … … 314 338 } 315 339 316 IEnumerable<Type> IApplicationManager.GetTypes(Type type) {317 return GetTypes(type, true);318 }319 320 340 IEnumerable<Type> IApplicationManager.GetTypes(Type type, bool onlyInstantiable) { 321 341 return GetTypes(type, onlyInstantiable); 322 342 } 323 324 IEnumerable<Type> IApplicationManager.GetTypes(Type type, IPluginDescription plugin) { 325 return GetTypes(type, plugin, true); 343 IEnumerable<Type> IApplicationManager.GetTypes(IEnumerable<Type> types, bool onlyInstantiable, bool allTypes) { 344 return GetTypes(types, onlyInstantiable, allTypes); 326 345 } 327 346 328 347 IEnumerable<Type> IApplicationManager.GetTypes(Type type, IPluginDescription plugin, bool onlyInstantiable) { 329 348 return GetTypes(type, plugin, onlyInstantiable); 349 } 350 IEnumerable<Type> IApplicationManager.GetTypes(IEnumerable<Type> types, IPluginDescription plugin, bool onlyInstantiable, bool allTypes) { 351 return GetTypes(types, plugin, onlyInstantiable, allTypes); 330 352 } 331 353 -
trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Interfaces/IApplicationManager.cs
r5445 r5850 56 56 /// </summary> 57 57 /// <param name="type">The type to discover.</param> 58 /// <param name="onlyInstantiable">Return only types that are instantiable (instance, abstract... are not returned)</param> 58 59 /// <returns>An enumerable of discovered types.</returns> 59 IEnumerable<Type> GetTypes(Type type );60 IEnumerable<Type> GetTypes(Type type, bool onlyInstantiable = true); 60 61 61 62 /// <summary> 62 /// Discovers all types implementing or inheriting <paramref name="type"/> (directly and indirectly).63 /// Discovers all types implementing or inheriting all or any type in <paramref name="types"/> (directly and indirectly). 63 64 /// </summary> 64 /// <param name="type ">The typeto discover.</param>65 /// <param name="types">The types to discover.</param> 65 66 /// <param name="onlyInstantiable">Return only types that are instantiable (instance, abstract... are not returned)</param> 67 /// <param name="allTypes">Specifies if discovered types must implement or inherit all given <paramref name="types"/>.</param> 66 68 /// <returns>An enumerable of discovered types.</returns> 67 IEnumerable<Type> GetTypes(Type type, bool onlyInstantiable); 68 69 /// <summary> 70 /// Discovers all types implementing or inheriting <paramref name="type"/> (directly and indirectly) that are declaed in any assembly of <paramref name="plugin"/>. 71 /// </summary> 72 /// <param name="type">The type to discover.</param> 73 /// <param name="plugin">The declaring plugin.</param> 74 /// <returns>An enumerable of discovered types.</returns> 75 IEnumerable<Type> GetTypes(Type type, IPluginDescription plugin); 69 IEnumerable<Type> GetTypes(IEnumerable<Type> types, bool onlyInstantiable = true, bool allTypes = true); 76 70 77 71 /// <summary> … … 82 76 /// <param name="onlyInstantiable">Return only types that are instantiable (instance, abstract... are not returned)</param> 83 77 /// <returns>An enumerable of discovered types.</returns> 84 IEnumerable<Type> GetTypes(Type type, IPluginDescription plugin, bool onlyInstantiable); 78 IEnumerable<Type> GetTypes(Type type, IPluginDescription plugin, bool onlyInstantiable = true); 79 80 /// <summary> 81 /// Discovers all types implementing or inheriting all or any type in <paramref name="types"/> (directly and indirectly) that are declaed in any assembly of <paramref name="plugin"/>. 82 /// </summary> 83 /// <param name="types">The types to discover.</param> 84 /// <param name="plugin">The declaring plugin.</param> 85 /// <param name="onlyInstantiable">Return only types that are instantiable (instance, abstract... are not returned)</param> 86 /// /// <param name="allTypes">Specifies if discovered types must implement or inherit all given <paramref name="types"/>.</param> 87 /// <returns>An enumerable of discovered types.</returns> 88 IEnumerable<Type> GetTypes(IEnumerable<Type> types, IPluginDescription plugin, bool onlyInstantiable = true, bool allTypes = true); 85 89 86 90 /// <summary> -
trunk/sources/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs
r5741 r5850 82 82 } 83 83 84 85 /// <summary> 86 /// Finds all instantiable types that are subtypes or equal to the specified type. 87 /// </summary> 88 /// <param name="type">Most general type for which to find matching types.</param> 84 /// <summary> 85 /// Finds all instantiable types that are subtypes or equal to the specified types. 86 /// </summary> 87 /// <param name="types">Most general types for which to find matching types.</param> 89 88 /// <remarks>Return only types that are instantiable 90 89 /// (interfaces, abstract classes... are not returned)</remarks> 91 90 /// <returns>Enumerable of the discovered types.</returns> 92 public IEnumerable<Type> GetTypes(Type type) { 93 return GetTypes(type, true); 91 public IEnumerable<Type> GetTypes(IEnumerable<Type> types, bool onlyInstantiable = true, bool allTypes = true) { 92 IEnumerable<Type> result = GetTypes(types.First(), onlyInstantiable); 93 foreach (Type type in types.Skip(1)) { 94 IEnumerable<Type> discoveredTypes = GetTypes(type, onlyInstantiable); 95 if (allTypes) result = result.Intersect(discoveredTypes); 96 else result = result.Union(discoveredTypes); 97 } 98 99 if (!allTypes) return result.Distinct(); 100 return result; 94 101 } 95 102 … … 101 108 /// (interfaces, abstract classes... are not returned)</param> 102 109 /// <returns>Enumerable of the discovered types.</returns> 103 public IEnumerable<Type> GetTypes(Type type, bool onlyInstantiable ) {110 public IEnumerable<Type> GetTypes(Type type, bool onlyInstantiable = true) { 104 111 return from asm in AppDomain.CurrentDomain.GetAssemblies() 105 112 from t in GetTypes(type, asm, onlyInstantiable) … … 115 122 /// (interfaces, abstract classes... are not returned)</param> 116 123 /// <returns>Enumerable of the discovered types.</returns> 117 private static IEnumerable<Type> GetTypes(Type type, Assembly assembly, bool onlyInstantiable ) {124 private static IEnumerable<Type> GetTypes(Type type, Assembly assembly, bool onlyInstantiable = true) { 118 125 try { 119 126 var assemblyTypes = assembly.GetTypes(); … … 175 182 /// <returns></returns> 176 183 /// <throws>NotSupportedException</throws> 177 public IEnumerable<Type> GetTypes(Type type, IPluginDescription plugin, bool onlyInstantiable) { 184 public IEnumerable<Type> GetTypes(Type type, IPluginDescription plugin, bool onlyInstantiable = true) { 185 throw new NotSupportedException("LightweightApplicationManager doesn't support type discovery for plugins."); 186 } 187 188 /// <summary> 189 /// Not supported by the LightweightApplicationManager 190 /// </summary> 191 /// <param name="type"></param> 192 /// <param name="plugin"></param> 193 /// <param name="onlyInstantiable"></param> 194 /// <returns></returns> 195 /// <throws>NotSupportedException</throws> 196 public IEnumerable<Type> GetTypes(IEnumerable<Type> types, IPluginDescription plugin, bool onlyInstantiable = true, bool allTypes = true) { 178 197 throw new NotSupportedException("LightweightApplicationManager doesn't support type discovery for plugins."); 179 198 }
Note: See TracChangeset
for help on using the changeset viewer.