Refactor event dispatch injector to use TestUtils field setter
Change-Id: I793183de883c7b20784957eaa213d79a42951639
diff --git a/utils/junit/src/main/java/org/onlab/junit/TestUtils.java b/utils/junit/src/main/java/org/onlab/junit/TestUtils.java
index 496b357..1afc494 100644
--- a/utils/junit/src/main/java/org/onlab/junit/TestUtils.java
+++ b/utils/junit/src/main/java/org/onlab/junit/TestUtils.java
@@ -40,13 +40,23 @@
public static <T, U> void setField(T subject, String fieldName, U value)
throws TestUtilsException {
@SuppressWarnings("unchecked")
- Class<T> clazz = (Class<T>) subject.getClass();
+ Class clazz = subject.getClass();
try {
- Field field = clazz.getDeclaredField(fieldName);
- field.setAccessible(true);
- field.set(subject, value);
- } catch (NoSuchFieldException | SecurityException |
- IllegalArgumentException | IllegalAccessException e) {
+ while (clazz != null) {
+ try {
+ Field field = clazz.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ field.set(subject, value);
+ break;
+ } catch (NoSuchFieldException ex) {
+ if (clazz == clazz.getSuperclass()) {
+ break;
+ }
+ clazz = clazz.getSuperclass();
+ }
+ }
+ } catch (SecurityException | IllegalArgumentException |
+ IllegalAccessException e) {
throw new TestUtilsException("setField failed", e);
}
}