![JAR search and dependency download from the Maven repository](/logo.png)
mockit.internal.expectations.mocking.TestedClassRedefinitions Maven / Gradle / Ivy
/*
* Copyright (c) 2006-2011 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.internal.expectations.mocking;
import java.lang.instrument.*;
import java.lang.reflect.*;
import java.util.*;
import mockit.*;
import mockit.external.asm.*;
import mockit.internal.*;
final class TestedClassRedefinitions
{
final List testedFields;
final List injectableFields;
private final List mockedTypes;
TestedClassRedefinitions()
{
testedFields = new LinkedList();
injectableFields = new ArrayList();
mockedTypes = new ArrayList();
}
boolean redefineTestedClasses(Object objectWithTestedFields)
{
for (Field field: objectWithTestedFields.getClass().getDeclaredFields()) {
if (field.isAnnotationPresent(Tested.class)) {
testedFields.add(field);
}
else {
MockedType mockedType = new MockedType(field, true);
if (mockedType.injectable) {
injectableFields.add(mockedType);
}
if (mockedType.isMockField()) {
mockedTypes.add(mockedType);
}
}
}
for (Field testedField : testedFields) {
redefineTestedClass(testedField.getType());
}
return !testedFields.isEmpty();
}
private void redefineTestedClass(Class> testedClass)
{
ClassReader cr = ClassFile.createClassFileReader(testedClass.getName());
TestedClassModifier modifier = new TestedClassModifier(cr, mockedTypes);
cr.accept(modifier, false);
byte[] modifiedClass = modifier.toByteArray();
ClassDefinition classDefinition = new ClassDefinition(testedClass, modifiedClass);
RedefinitionEngine.redefineClasses(classDefinition);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy