Skip to content

Commit

Permalink
ReflectionUtils enhanced to cope with inheritance while looking for f…
Browse files Browse the repository at this point in the history
…ields
  • Loading branch information
dadrus committed Jun 28, 2018
1 parent fb7ccaa commit a06ea35
Showing 1 changed file with 27 additions and 2 deletions.
29 changes: 27 additions & 2 deletions core/src/main/java/eu/drus/jpa/unit/util/ReflectionUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,33 @@
public final class ReflectionUtils {
private ReflectionUtils() {}

private static Field findField(final Object src, final String fieldName) throws NoSuchFieldException {
Class<?> current = src.getClass();
Field field = null;

while(current != null && field == null) {
field = getField(current, fieldName);
current = current.getSuperclass();
}

if(field == null) {
throw new NoSuchFieldException(src + " does not declare " + fieldName);
}

return field;
}

private static Field getField(Class<?> clazz, final String fieldName) {
for (Field field : clazz.getDeclaredFields()) {
if(field.getName().equals(fieldName)) {
return field;
}
}
return null;
}

public static void injectValue(final Object obj, final String fieldName, final Object value) throws NoSuchFieldException, IllegalAccessException {
injectValue(obj, obj.getClass().getDeclaredField(fieldName), value);
injectValue(obj, findField(obj, fieldName), value);
}

public static void injectValue(final Object obj, final Field field, final Object value) throws IllegalAccessException {
Expand All @@ -20,7 +45,7 @@ public static void injectValue(final Object obj, final Field field, final Object
}

public static Object getValue(final Object src, final String fieldName) throws IllegalAccessException, NoSuchFieldException {
return getValue(src, src.getClass().getDeclaredField(fieldName));
return getValue(src, findField(src, fieldName));
}

public static Object getValue(final Object src, final Field field) throws IllegalAccessException {
Expand Down

0 comments on commit a06ea35

Please sign in to comment.