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    }