Skip to content

Commit 8ce05eb

Browse files
committed
Added new overloads to Types
1 parent dd0c650 commit 8ce05eb

File tree

2 files changed

+185
-19
lines changed

2 files changed

+185
-19
lines changed

TestStack.ConventionTests/ConventionData/TypeExtensions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Collections.Generic;
55
using System.Linq;
66
using System.Reflection;
7+
using System.Runtime.CompilerServices;
78
using System.Text;
89
using System.Text.RegularExpressions;
910

@@ -24,6 +25,11 @@ public static bool IsStatic(this Type type)
2425
return type.IsClass && !(type.IsSealed && type.IsAbstract);
2526
}
2627

28+
public static bool IsCompilerGenerated(this Type type)
29+
{
30+
return type.IsDefined(typeof(CompilerGeneratedAttribute), true);
31+
}
32+
2733
public static bool HasDefaultConstructor(this Type type)
2834
{
2935
return type.GetConstructors(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic |

TestStack.ConventionTests/ConventionData/Types.cs

Lines changed: 179 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
{
33
using System;
44
using System.Collections.Generic;
5+
using System.ComponentModel;
56
using System.Linq;
6-
using System.Runtime.CompilerServices;
7+
using System.Reflection;
78

89
/// <summary>
910
/// This is where we set what our convention is all about.
@@ -19,31 +20,190 @@ public Types(string descriptionOfTypes)
1920

2021
public string Description { get; private set; }
2122

22-
public bool HasData {get { return TypesToVerify.Any(); }}
23+
public bool HasData
24+
{
25+
get { return TypesToVerify.Any(); }
26+
}
27+
28+
/// <summary>
29+
/// Gets a filtered list of types from the assembly of the specified
30+
/// type, <typeparam name="T" />, using the specified <param name="predicate" />.
31+
/// </summary>
32+
/// <typeparam name="T">A type residing in the assembly to get types from.</typeparam>
33+
/// <param name="predicate">A function to test each type for a condition.</param>
34+
public static Types InAssemblyOf<T>(Func<Type, bool> predicate)
35+
{
36+
return InAssemblyOf(typeof(T), predicate);
37+
}
38+
39+
/// <summary>
40+
/// Gets a filtered list of types from the assembly of the specified
41+
/// type, <param name="type" />, using the specified <param name="predicate" />.
42+
/// </summary>
43+
/// <param name="type">A type residing in the assembly to get types from.</param>
44+
/// <param name="predicate">A function to test each type for a condition.</param>
45+
public static Types InAssemblyOf(Type type, Func<Type, bool> predicate)
46+
{
47+
return InAssembly(type.Assembly, predicate);
48+
}
49+
50+
/// <summary>
51+
/// Gets a filtered list of types from the specified <param name="assembly" /> using the specified <param name="predicate" />.
52+
/// </summary>
53+
/// <param name="assembly">The assembly to get types from.</param>
54+
/// <param name="predicate">A function to test each type for a condition.</param>
55+
public static Types InAssembly(Assembly assembly, Func<Type, bool> predicate)
56+
{
57+
return InAssembly(assembly, GetAssemblyName(assembly), predicate);
58+
}
59+
60+
/// <summary>
61+
/// Gets a filtered list of types from the assembly of the specified
62+
/// type, <typeparam name="T" />, using the specified <param name="predicate" />.
63+
/// </summary>
64+
/// <typeparam name="T">A type residing in the assembly to get types from.</typeparam>
65+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
66+
/// <param name="predicate">A function to test each type for a condition.</param>
67+
public static Types InAssemblyOf<T>(string descriptionOfTypes, Func<Type, bool> predicate)
68+
{
69+
return InAssemblyOf(typeof(T), descriptionOfTypes, predicate);
70+
}
71+
72+
/// <summary>
73+
/// Gets a filtered list of types from the assembly of the specified
74+
/// type, <param name="type" />, using the specified <param name="predicate" />.
75+
/// </summary>
76+
/// <param name="type">A type residing in the assembly to get types from.</param>
77+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
78+
/// <param name="predicate">A function to test each type for a condition.</param>
79+
public static Types InAssemblyOf(Type type, string descriptionOfTypes, Func<Type, bool> predicate)
80+
{
81+
return InAssembly(type.Assembly, descriptionOfTypes, predicate);
82+
}
83+
84+
/// <summary>
85+
/// Gets a filtered list of types from the specified <param name="assembly" /> using the specified <param name="predicate" />.
86+
/// </summary>
87+
/// <param name="assembly">The assembly to get types from.</param>
88+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
89+
/// <param name="predicate">A function to test each type for a condition.</param>
90+
public static Types InAssembly(Assembly assembly, string descriptionOfTypes, Func<Type, bool> predicate)
91+
{
92+
return InAssemblies(new[] { assembly }, descriptionOfTypes, predicate);
93+
}
94+
95+
/// <summary>
96+
/// Gets an optionally filtered list of types from the specified <param name="assemblies" /> using the specified <param name="predicate" />.
97+
/// </summary>
98+
/// <param name="assemblies">A list of assemblies to get types from.</param>
99+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
100+
/// <param name="predicate">A function to test each type for a condition.</param>
101+
public static Types InAssemblies(IEnumerable<Assembly> assemblies, string descriptionOfTypes, Func<Type, bool> predicate)
102+
{
103+
return InCollection(assemblies.SelectMany(x => x.GetTypes()).Where(predicate), descriptionOfTypes);
104+
}
23105

106+
/// <summary>
107+
/// Gets an optionally filtered list of types from the assembly of the specified type, <typeparam name="T" />.
108+
/// </summary>
109+
/// <typeparam name="T">A type residing in the assembly to get types from.</typeparam>
110+
/// <param name="excludeCompilerGeneratedTypes">Compiler generated types will be excluded if set to <c>true</c>.</param>
24111
public static Types InAssemblyOf<T>(bool excludeCompilerGeneratedTypes = true)
25112
{
26-
var assembly = typeof(T).Assembly;
27-
var typesToVerify = assembly.GetTypes();
28-
if (excludeCompilerGeneratedTypes)
29-
{
30-
typesToVerify = typesToVerify
31-
.Where(t => !t.GetCustomAttributes(typeof (CompilerGeneratedAttribute), true).Any())
32-
.ToArray();
33-
}
34-
return new Types(assembly.GetName().Name)
35-
{
36-
TypesToVerify = typesToVerify
37-
};
113+
return InAssemblyOf(typeof(T), excludeCompilerGeneratedTypes);
38114
}
39115

116+
/// <summary>
117+
/// Gets an optionally filtered list of types from the assembly of the specified type, <param name="type" />.
118+
/// </summary>
119+
/// <param name="type">A type residing in the assembly to get types from.</param>
120+
/// <param name="excludeCompilerGeneratedTypes">Compiler generated types will be excluded if set to <c>true</c>.</param>
121+
public static Types InAssemblyOf(Type type, bool excludeCompilerGeneratedTypes = true)
122+
{
123+
return InAssembly(type.Assembly, excludeCompilerGeneratedTypes);
124+
}
125+
126+
/// <summary>
127+
/// Gets an optionally filtered list of types from the specified <param name="assembly" />.
128+
/// </summary>
129+
/// <param name="assembly">The assembly to get types from.</param>
130+
/// <param name="excludeCompilerGeneratedTypes">Compiler generated types will be excluded if set to <c>true</c>.</param>
131+
public static Types InAssembly(Assembly assembly, bool excludeCompilerGeneratedTypes = true)
132+
{
133+
return InAssembly(assembly, GetAssemblyName(assembly), excludeCompilerGeneratedTypes);
134+
}
135+
136+
/// <summary>
137+
/// Gets an optionally filtered list of types from the assembly of the specified
138+
/// type, <typeparam name="T" />, using the specified <param name="types" /> filter.
139+
/// </summary>
140+
/// <typeparam name="T">A type residing in the assembly to get types from.</typeparam>
141+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
142+
/// <param name="types">A function to filter or add matched types.</param>
143+
[EditorBrowsable(EditorBrowsableState.Never)]
144+
[Obsolete("This method is obsolete and should not be used. Use the overload with a predicate instead.")]
40145
public static Types InAssemblyOf<T>(string descriptionOfTypes, Func<IEnumerable<Type>, IEnumerable<Type>> types)
41146
{
42-
var assembly = typeof (T).Assembly;
43-
return new Types(descriptionOfTypes)
44-
{
45-
TypesToVerify = types(assembly.GetTypes()).ToArray()
46-
};
147+
return InCollection(types(typeof(T).Assembly.GetTypes()), descriptionOfTypes);
148+
}
149+
150+
/// <summary>
151+
/// Gets an optionally filtered list of types from the assembly of the specified type, <typeparam name="T" />.
152+
/// </summary>
153+
/// <typeparam name="T">A type residing in the assembly to get types from.</typeparam>
154+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
155+
/// <param name="excludeCompilerGeneratedTypes">Compiler generated types will be excluded if set to <c>true</c>.</param>
156+
public static Types InAssemblyOf<T>(string descriptionOfTypes, bool excludeCompilerGeneratedTypes = true)
157+
{
158+
return InAssemblyOf(typeof(T), descriptionOfTypes, excludeCompilerGeneratedTypes);
159+
}
160+
161+
/// <summary>
162+
/// Gets an optionally filtered list of types from the assembly of the specified type, <param name="type" />.
163+
/// </summary>
164+
/// <param name="type">A type residing in the assembly to get types from.</param>
165+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
166+
/// <param name="excludeCompilerGeneratedTypes">Compiler generated types will be excluded if set to <c>true</c>.</param>
167+
public static Types InAssemblyOf(Type type, string descriptionOfTypes, bool excludeCompilerGeneratedTypes = true)
168+
{
169+
return InAssembly(type.Assembly, descriptionOfTypes, excludeCompilerGeneratedTypes);
170+
}
171+
172+
/// <summary>
173+
/// Gets an optionally filtered list of types from the specified <param name="assembly" />.
174+
/// </summary>
175+
/// <param name="assembly">The assembly to get types from.</param>
176+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
177+
/// <param name="excludeCompilerGeneratedTypes">Compiler generated types will be excluded if set to <c>true</c>.</param>
178+
public static Types InAssembly(Assembly assembly, string descriptionOfTypes, bool excludeCompilerGeneratedTypes = true)
179+
{
180+
return InAssemblies(new[] { assembly }, descriptionOfTypes, excludeCompilerGeneratedTypes);
181+
}
182+
183+
/// <summary>
184+
/// Gets an optionally filtered list of types from the specified <param name="assemblies" />.
185+
/// </summary>
186+
/// <param name="assemblies">A list of assemblies to get types from.</param>
187+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
188+
/// <param name="excludeCompilerGeneratedTypes">Compiler generated types will be excluded if set to <c>true</c>.</param>
189+
public static Types InAssemblies(IEnumerable<Assembly> assemblies, string descriptionOfTypes, bool excludeCompilerGeneratedTypes = true)
190+
{
191+
return InAssemblies(assemblies, descriptionOfTypes, type => !(excludeCompilerGeneratedTypes && type.IsCompilerGenerated()));
192+
}
193+
194+
/// <summary>
195+
/// Gets a list of types from the specified <param name="types" /> collection.
196+
/// </summary>
197+
/// <param name="types">The types.</param>
198+
/// <param name="descriptionOfTypes">A description of the matched types.</param>
199+
public static Types InCollection(IEnumerable<Type> types, string descriptionOfTypes)
200+
{
201+
return new Types(descriptionOfTypes) { TypesToVerify = types.ToArray() };
202+
}
203+
204+
private static string GetAssemblyName(Assembly assembly)
205+
{
206+
return assembly.GetName().Name;
47207
}
48208
}
49209
}

0 commit comments

Comments
 (0)