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.mocking;
7   
8   import edu.umd.cs.findbugs.annotations.NonNull;
9   import edu.umd.cs.findbugs.annotations.Nullable;
10  
11  import java.lang.reflect.Type;
12  
13  import mockit.internal.expectations.MockingFilters;
14  
15  class TypeRedefinition extends BaseTypeRedefinition {
16      TypeRedefinition(@NonNull MockedType typeMetadata) {
17          super(typeMetadata);
18      }
19  
20      @Nullable
21      final InstanceFactory redefineType() {
22          // noinspection ConstantConditions
23          Class<?> classToMock = typeMetadata.getClassType();
24  
25          if (MockingFilters.isSubclassOfUnmockable(classToMock)) {
26              String mockSource = typeMetadata.field == null ? "mock parameter" : "mock field";
27              throw new IllegalArgumentException(
28                      classToMock + " is not mockable (" + mockSource + " \"" + typeMetadata.getName() + "\")");
29          }
30  
31          Type declaredType = typeMetadata.getDeclaredType();
32          return redefineType(declaredType);
33      }
34  }