diff --git a/src/main/java/org/simplify4u/slf4jmock/mockito/LoggerAnnotationEngine.java b/src/main/java/org/simplify4u/slf4jmock/mockito/LoggerAnnotationEngine.java index 1c4e720..65c4b93 100644 --- a/src/main/java/org/simplify4u/slf4jmock/mockito/LoggerAnnotationEngine.java +++ b/src/main/java/org/simplify4u/slf4jmock/mockito/LoggerAnnotationEngine.java @@ -21,7 +21,6 @@ import org.mockito.Mockito; import org.mockito.Spy; import org.mockito.internal.configuration.InjectingAnnotationEngine; -import org.mockito.internal.util.reflection.Fields; import org.mockito.internal.util.reflection.InstanceField; import org.simplify4u.slf4jmock.LoggerMock; import org.simplify4u.slf4jmock.MDCMock; @@ -30,6 +29,8 @@ import org.slf4j.Logger; import org.slf4j.spi.MDCAdapter; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -66,9 +67,19 @@ public AutoCloseable process(Class clazz, Object testInstance) { }; } + private static List allDeclaredFieldsOf(Object testInstance) { + List result = new ArrayList<>(); + for (Class clazz = testInstance.getClass(); clazz != Object.class; clazz = clazz.getSuperclass()) { + for (Field field : clazz.getDeclaredFields()) { + result.add(new InstanceField(field, testInstance)); + } + } + return result; + } + private static InstanceField prepareSpyLogger(Object testInstance) { - List spyMocks = Fields.allDeclaredFieldsOf(testInstance).instanceFields() + List spyMocks = allDeclaredFieldsOf(testInstance) .stream() .filter(field -> field.jdkField().getType() == Logger.class) .filter(field -> field.isAnnotatedBy(Spy.class)) @@ -87,7 +98,7 @@ private static InstanceField prepareSpyLogger(Object testInstance) { } private static Optional findMDCMock(Object testInstance) { - List mdcFields = Fields.allDeclaredFieldsOf(testInstance).instanceFields() + List mdcFields = allDeclaredFieldsOf(testInstance) .stream() .filter(instanceField -> instanceField.jdkField().getType() == MDCAdapter.class) .filter(instanceField -> instanceField.isAnnotatedBy(Mock.class)) @@ -107,7 +118,7 @@ private static Optional findMDCMock(Object testInstance) { } private static List findClassUnderTest(Object testInstance) { - return Fields.allDeclaredFieldsOf(testInstance).instanceFields() + return allDeclaredFieldsOf(testInstance) .stream() .filter(instanceField -> instanceField.isAnnotatedBy(InjectMocks.class)) .collect(Collectors.toList()); @@ -115,7 +126,7 @@ private static List findClassUnderTest(Object testInstance) { private static Map findLoggersMocks(Object testInstance, InstanceField spyToSet) { - Map loggerMocks = Fields.allDeclaredFieldsOf(testInstance).instanceFields() + Map loggerMocks = allDeclaredFieldsOf(testInstance) .stream() .filter(field -> field.jdkField().getType() == Logger.class) .filter(field -> field.isAnnotatedBy(Mock.class) || field.isAnnotatedBy(Spy.class)) @@ -137,8 +148,7 @@ private static Map findLoggersMocks(Object testInstance, Instanc List loggersUnderTest = classesUnderTest.stream() .map(InstanceField::read) - .map(Fields::allDeclaredFieldsOf) - .map(Fields.InstanceFields::instanceFields) + .map(LoggerAnnotationEngine::allDeclaredFieldsOf) .flatMap(List::stream) .filter(field -> field.jdkField().getType() == Logger.class) .collect(Collectors.toList());