View Javadoc
1   /*
2    * Copyright (c) 2006 JMockit developers
3    * This file is subject to the terms of the MIT license (see LICENSE.txt).
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  }