mockit.internal.injection.TestedObjectCreation Maven / Gradle / Ivy
/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.internal.injection;
import java.lang.reflect.*;
import java.lang.reflect.Type;
import javax.annotation.*;
import static java.lang.reflect.Modifier.*;
import mockit.external.asm.*;
import mockit.internal.classGeneration.*;
import mockit.internal.expectations.mocking.*;
import mockit.internal.injection.constructor.*;
import mockit.internal.injection.full.*;
import mockit.internal.state.*;
public final class TestedObjectCreation
{
@Nonnull private final InjectionState injectionState;
@Nullable private final FullInjection fullInjection;
@Nonnull final TestedClass testedClass;
TestedObjectCreation(
@Nonnull InjectionState injectionState, @Nullable FullInjection fullInjection,
@Nonnull Type declaredType, @Nonnull Class declaredClass)
{
this.injectionState = injectionState;
this.fullInjection = fullInjection;
Class actualTestedClass = isAbstract(declaredClass.getModifiers()) ?
generateSubclass(declaredType, declaredClass) : declaredClass;
testedClass = new TestedClass(declaredType, actualTestedClass);
}
@Nonnull
private Class generateSubclass(@Nonnull final Type testedType, @Nonnull final Class abstractClass)
{
Class generatedSubclass = new ImplementationClass