1
2
3
4
5
6 package mockit.internal.expectations;
7
8 import edu.umd.cs.findbugs.annotations.NonNull;
9
10 import mockit.asm.types.JavaType;
11
12 public final class MockingFilters {
13 private MockingFilters() {
14 }
15
16 public static void validateAsMockable(@NonNull Class<?> type) {
17 String typeDesc = JavaType.getInternalName(type);
18 validateAsMockable(typeDesc);
19 }
20
21 public static void validateAsMockable(@NonNull String typeDesc) {
22 boolean unmockable = ("java/lang/String java/lang/StringBuffer java/lang/StringBuilder java/lang/AbstractStringBuilder "
23 + "java/lang/Throwable java/lang/Object java/lang/Enum java/lang/System java/lang/ThreadLocal "
24 + "java/lang/ClassLoader java/lang/Math java/lang/StrictMath java/time/Duration").contains(typeDesc)
25 || "java/nio/file/Paths".equals(typeDesc) || typeDesc.startsWith("java/util/jar/");
26
27 if (unmockable) {
28 throw new IllegalArgumentException(typeDesc.replace('/', '.') + " is not mockable");
29 }
30 }
31
32 public static boolean isSubclassOfUnmockable(@NonNull Class<?> aClass) {
33 return Throwable.class.isAssignableFrom(aClass) || ClassLoader.class.isAssignableFrom(aClass)
34 || ThreadLocal.class.isAssignableFrom(aClass) || Number.class.isAssignableFrom(aClass);
35 }
36 }