protected Object getField(Object o, Class<?> clazz, String name) { try { Field f = clazz.getDeclaredField(name); boolean prev = f.isAccessible(); f.setAccessible(true); try { return f.get(o); } finally { f.setAccessible(prev); } } catch (ReflectiveOperationException e) { return e; } catch (SecurityException e) { return e; } }
protected Object callMethod(Object o, Class<?> clazz, String name) { try { Method m = clazz.getDeclaredMethod(name); boolean prev = m.isAccessible(); m.setAccessible(true); try { return m.invoke(o); } finally { m.setAccessible(prev); } } catch (ReflectiveOperationException e) { return e; } catch (SecurityException e) { return e; } }
protected String info(Class<?> clazz, Object internal, Object external) { return String.format("%s,%s,%s", clazz.getSimpleName(), internal, external); }