blob: d08f6b1ac935a6ac1adfa17d83e17d08e1cd0df3 [file] [log] [blame]
/*
* Copyright (c) 2017 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.invocation;
import org.mockito.internal.creation.DelegatingMethod;
import org.mockito.internal.invocation.mockref.MockWeakReference;
import org.mockito.internal.debugging.LocationImpl;
import org.mockito.internal.progress.SequenceNumber;
import org.mockito.invocation.Invocation;
import org.mockito.invocation.InvocationFactory;
import org.mockito.invocation.Location;
import org.mockito.mock.MockCreationSettings;
import java.lang.reflect.Method;
import java.util.concurrent.Callable;
public class DefaultInvocationFactory implements InvocationFactory {
public Invocation createInvocation(Object target, MockCreationSettings settings, Method method, final Callable realMethod, Object... args) {
RealMethod superMethod = new RealMethod.FromCallable(realMethod);
return createInvocation(target, settings, method, superMethod, args);
}
public Invocation createInvocation(Object target, MockCreationSettings settings, Method method, RealMethodBehavior realMethod, Object... args) {
RealMethod superMethod = new RealMethod.FromBehavior(realMethod);
return createInvocation(target, settings, method, superMethod, args);
}
private Invocation createInvocation(Object target, MockCreationSettings settings, Method method, RealMethod superMethod, Object[] args) {
return createInvocation(target, method, args, superMethod, settings);
}
public static InterceptedInvocation createInvocation(Object mock, Method invokedMethod, Object[] arguments, RealMethod realMethod, MockCreationSettings settings, Location location) {
return new InterceptedInvocation(
new MockWeakReference<Object>(mock),
createMockitoMethod(invokedMethod, settings),
arguments,
realMethod,
location,
SequenceNumber.next()
);
}
private static InterceptedInvocation createInvocation(Object mock, Method invokedMethod, Object[]
arguments, RealMethod realMethod, MockCreationSettings settings) {
return createInvocation(mock, invokedMethod, arguments, realMethod, settings, new LocationImpl());
}
private static MockitoMethod createMockitoMethod(Method method, MockCreationSettings settings) {
if (settings.isSerializable()) {
return new SerializableMethod(method);
} else {
return new DelegatingMethod(method);
}
}
}