package de.plushnikov.intellij.plugin.util;
import com.intellij.openapi.diagnostic.Logger;
import java.lang.reflect.Field;
/**
* @author Plushnikov Michail
*/
public class ReflectionUtil {
private static final Logger LOG = Logger.getInstance(ReflectionUtil.class.getName());
public static <T, R> void setFinalFieldPerReflection(Class<T> clazz, T instance, Class<R> fieldClass, R newValue) {
try {
for (Field field : clazz.getDeclaredFields()) {
if (field.getType().equals(fieldClass)) {
field.setAccessible(true);
field.set(instance, newValue);
break;
}
}
} catch (IllegalArgumentException x) {
LOG.error(x);
} catch (IllegalAccessException x) {
LOG.error(x);
}
}
public static <T, R> R getFieldPerReflection(Class<T> clazz, T instance, Class<R> fieldClass, String fieldName) {
R result = null;
try {
final Field declaredField = clazz.getDeclaredField(fieldName);
declaredField.setAccessible(true);
result = (R) declaredField.get(instance);
} catch (IllegalArgumentException x) {
LOG.error(x);
} catch (IllegalAccessException x) {
LOG.error(x);
} catch (NoSuchFieldException e) {
LOG.error(e);
}
return result;
}
}