    001    /*
    002     * The FML Forge Mod Loader suite. Copyright (C) 2012 cpw
    003     *
    004     * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
    005     * Software Foundation; either version 2.1 of the License, or any later version.
    006     *
    007     * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
    008     * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    009     *
    010     * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
    011     * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    012     */
    013    package cpw.mods.fml.common;
    014
    015    import java.util.Arrays;
    016    import java.util.logging.Level;
    017
    018    import cpw.mods.fml.relauncher.ReflectionHelper;
    019    import cpw.mods.fml.relauncher.ReflectionHelper.UnableToAccessFieldException;
    020    import cpw.mods.fml.relauncher.ReflectionHelper.UnableToFindFieldException;
    021
    022    /**
    023     * Some reflection helper code.
    024     *
    025     * @author cpw
    026     *
    027     */
    028    public class ObfuscationReflectionHelper
    029    {
    030        public static boolean obfuscation;
    031
    032        @SuppressWarnings("unchecked")
    033        public static <T, E> T getPrivateValue(Class<? super E> classToAccess, E instance, int fieldIndex)
    034        {
    035            try
    036            {
    037                return ReflectionHelper.getPrivateValue(classToAccess, instance, fieldIndex);
    038            }
    039            catch (UnableToAccessFieldException e)
    040            {
    041                FMLLog.log(Level.SEVERE, e, "There was a problem getting field index %d from %s", fieldIndex, classToAccess.getName());
    042                throw e;
    043            }
    044        }
    045
    046        @SuppressWarnings("unchecked")
    047        public static <T, E> T getPrivateValue(Class<? super E> classToAccess, E instance, String... fieldNames)
    048        {
    049            try
    050            {
    051                return ReflectionHelper.getPrivateValue(classToAccess, instance, fieldNames);
    052            }
    053            catch (UnableToFindFieldException e)
    054            {
    055                FMLLog.log(Level.SEVERE,e,"Unable to locate any field %s on type %s", Arrays.toString(fieldNames), classToAccess.getName());
    056                throw e;
    057            }
    058            catch (UnableToAccessFieldException e)
    059            {
    060                FMLLog.log(Level.SEVERE, e, "Unable to access any field %s on type %s", Arrays.toString(fieldNames), classToAccess.getName());
    061                throw e;
    062            }
    063        }
    064
    065        @Deprecated
    066        public static <T, E> void setPrivateValue(Class<? super T> classToAccess, T instance, int fieldIndex, E value)
    067        {
    068            setPrivateValue(classToAccess, instance, value, fieldIndex);
    069        }
    070
    071        public static <T, E> void setPrivateValue(Class<? super T> classToAccess, T instance, E value, int fieldIndex)
    072        {
    073            try
    074            {
    075                ReflectionHelper.setPrivateValue(classToAccess, instance, value, fieldIndex);
    076            }
    077            catch (UnableToAccessFieldException e)
    078            {
    079                FMLLog.log(Level.SEVERE, e, "There was a problem setting field index %d on type %s", fieldIndex, classToAccess.getName());
    080                throw e;
    081            }
    082        }
    083
    084        @Deprecated
    085        public static <T, E> void setPrivateValue(Class<? super T> classToAccess, T instance, String fieldName, E value)
    086        {
    087            setPrivateValue(classToAccess, instance, value, fieldName);
    088        }
    089
    090        public static <T, E> void setPrivateValue(Class<? super T> classToAccess, T instance, E value, String... fieldNames)
    091        {
    092            try
    093            {
    094                ReflectionHelper.setPrivateValue(classToAccess, instance, value, fieldNames);
    095            }
    096            catch (UnableToFindFieldException e)
    097            {
    098                FMLLog.log(Level.SEVERE, e, "Unable to locate any field %s on type %s", Arrays.toString(fieldNames), classToAccess.getName());
    099                throw e;
    100            }
    101            catch (UnableToAccessFieldException e)
    102            {
    103                FMLLog.log(Level.SEVERE, e, "Unable to set any field %s on type %s", Arrays.toString(fieldNames), classToAccess.getName());
    104                throw e;
    105            }
    106        }
    107
    108        /**
    109         *
    110         */
    111        public static void detectObfuscation(Class<?> clazz)
    112        {
    113            obfuscation = !clazz.getSimpleName().equals("World");
    114        }
    115
    116    }