Skip to content

Commit

Permalink
Switch the default mockmaker to the inline mockmaker on JDK 17+. Fixes
Browse files Browse the repository at this point in the history
…mockito#2589

Signed-off-by: Andriy Redko <drreta@gmail.com>
  • Loading branch information
reta committed Dec 26, 2022
1 parent 40e4f6c commit 0852e08
Show file tree
Hide file tree
Showing 7 changed files with 19 additions and 5 deletions.
Expand Up @@ -28,13 +28,14 @@ public class DefaultMockitoPlugins implements MockitoPlugins {
static final String SUBCLASS_ALIAS = MockMakers.SUBCLASS;
public static final Set<String> MOCK_MAKER_ALIASES = new HashSet<>();
static final String MODULE_ALIAS = "member-accessor-module";
static final String REFLECTION_ALIAS = "member-accessor-reflection";

static {
// Keep the mapping: plugin interface name -> plugin implementation class name
DEFAULT_PLUGINS.put(PluginSwitch.class.getName(), DefaultPluginSwitch.class.getName());
DEFAULT_PLUGINS.put(
MockMaker.class.getName(),
"org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker");
"org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker");
DEFAULT_PLUGINS.put(
StackTraceCleanerProvider.class.getName(),
"org.mockito.internal.exceptions.stacktrace.DefaultStackTraceCleanerProvider");
Expand All @@ -53,9 +54,11 @@ public class DefaultMockitoPlugins implements MockitoPlugins {
MockitoLogger.class.getName(), "org.mockito.internal.util.ConsoleMockitoLogger");
DEFAULT_PLUGINS.put(
MemberAccessor.class.getName(),
"org.mockito.internal.util.reflection.ReflectionMemberAccessor");
"org.mockito.internal.util.reflection.ModuleMemberAccessor");
DEFAULT_PLUGINS.put(
MODULE_ALIAS, "org.mockito.internal.util.reflection.ModuleMemberAccessor");
DEFAULT_PLUGINS.put(
REFLECTION_ALIAS, "org.mockito.internal.util.reflection.ReflectionMemberAccessor");
DEFAULT_PLUGINS.put(
DoNotMockEnforcer.class.getName(),
"org.mockito.internal.configuration.DefaultDoNotMockEnforcer");
Expand Down
Expand Up @@ -205,6 +205,7 @@ public <T> Class<? extends T> mockClass(MockFeatures<T> features) {
boolean subclassingRequired =
!features.interfaces.isEmpty()
|| features.serializableMode != SerializableMode.NONE
|| features.stripAnnotations
|| Modifier.isAbstract(features.mockedType.getModifiers());

checkSupportedCombination(subclassingRequired, features);
Expand Down Expand Up @@ -416,6 +417,7 @@ public synchronized void clearAllCaches() {
}
mocked.clear();
flatMocked.clear();
subclassEngine.clearAllCaches();
try {
instrumentation.retransformClasses(types.toArray(new Class<?>[0]));
} catch (UnmodifiableClassException e) {
Expand Down
Expand Up @@ -10,7 +10,6 @@
import static org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.SUBCLASS_ALIAS;

import org.junit.Test;
import org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker;
import org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker;
import org.mockito.internal.util.ConsoleMockitoLogger;
import org.mockito.plugins.InstantiatorProvider2;
Expand All @@ -35,7 +34,8 @@ public void provides_plugins() throws Exception {
"org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker",
DefaultMockitoPlugins.getDefaultPluginClass(SUBCLASS_ALIAS));
assertEquals(
ByteBuddyMockMaker.class, plugins.getDefaultPlugin(MockMaker.class).getClass());
InlineByteBuddyMockMaker.class,
plugins.getDefaultPlugin(MockMaker.class).getClass());
assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider2.class));
assertEquals(
ConsoleMockitoLogger.class,
Expand Down
Expand Up @@ -74,7 +74,9 @@ private static SimplePerRealmReloadingClassLoader.ReloadClassPredicate reloadMoc
return new SimplePerRealmReloadingClassLoader.ReloadClassPredicate() {
public boolean acceptReloadOf(String qualifiedName) {
return (!qualifiedName.contains("net.bytebuddy")
&& qualifiedName.contains("org.mockito"));
&& qualifiedName.contains("org.mockito")
&& !qualifiedName.contains(
"org.mockito.internal.creation.bytebuddy.inject"));
}
};
}
Expand Down
@@ -0,0 +1 @@
member-accessor-reflection
Expand Up @@ -53,4 +53,9 @@ public Class<?> loadClass(String name) throws ClassNotFoundException {
protected URL findResource(String moduleName, String name) {
return Mockito.class.getResource("/" + name);
}

@Override
public InputStream getResourceAsStream(String name) {
return Mockito.class.getResourceAsStream("/" + name);
}
}
@@ -0,0 +1 @@
member-accessor-reflection

0 comments on commit 0852e08

Please sign in to comment.