/* * This file is part of MyPet * * Copyright © 2011-2016 Keyle * MyPet is licensed under the GNU Lesser General Public License. * * MyPet is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MyPet is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.Keyle.MyPet.api.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionUtil { public static Class getClass(String name) { try { return Class.forName(name); } catch (Exception ignored) { return Class.class; } } public static Method getMethod(Class<?> clazz, String method, Class<?>... parameterTypes) { try { Method m = clazz.getDeclaredMethod(method, parameterTypes); m.setAccessible(true); return m; } catch (Exception ignored) { return null; } } public static Field getField(Class<?> clazz, String field) { try { Field f = clazz.getDeclaredField(field); f.setAccessible(true); return f; } catch (Exception ignored) { return null; } } public static Object getFieldValue(Class<?> clazz, Object object, String field) { try { Field f = clazz.getDeclaredField(field); f.setAccessible(true); return f.get(object); } catch (Exception ignored) { return null; } } @SuppressWarnings("unchecked") public static Object getFieldValue(Field field, Object object) { try { return field.get(object); } catch (Exception ignored) { } return null; } public static boolean setFieldValue(Field field, Object object, Object value) { try { field.set(object, value); return true; } catch (IllegalAccessException e) { return false; } } public static boolean setFieldValue(String fieldName, Object object, Object value) { try { Field field = getField(object.getClass(), fieldName); if (field != null) { field.set(object, value); return true; } } catch (IllegalAccessException ignored) { } return false; } public static void setFinalStaticValue(Field field, Object newValue) throws NoSuchFieldException, IllegalAccessException { field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(null, newValue); } }