/*
* Copyright (c) 2006-2012 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.internal.expectations.invocation;
import java.lang.reflect.*;
import java.util.concurrent.*;
import mockit.Invocation;
import mockit.internal.state.*;
final class DelegateInvocation extends Invocation implements Callable<Method>
{
private final InvocationArguments invocationArguments;
boolean proceedIntoConstructor;
DelegateInvocation(
Object invokedInstance, Object[] invokedArguments,
ExpectedInvocation expectedInvocation, InvocationConstraints constraints)
{
super(
invokedInstance, invokedArguments,
constraints.invocationCount, constraints.minInvocations, constraints.maxInvocations);
invocationArguments = expectedInvocation.arguments;
}
/**
* Returns the {@code Method} object corresponding to the mocked method, or {@code null} if it's a mocked
* constructor.
*/
public Method call()
{
if (invocationArguments.isForConstructor()) {
proceedIntoConstructor = true;
return null;
}
TestRun.getExecutingTest().markAsProceedingIntoRealImplementation();
return invocationArguments.getRealMethod().method;
}
}