View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
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  }