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 }