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