code: package mirror;
  
  import java.lang.reflect.Constructor;
  import java.lang.reflect.Field;
  import java.lang.reflect.Modifier;
  import java.util.HashMap;
  
  public final class RefClass {
  
      private static HashMap<Class<?>,Constructor<?>> REF_TYPES = new HashMap<Class<?>, Constructor<?>>();
      static {
          try {
              REF_TYPES.put(RefObject.class, RefObject.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefMethod.class, RefMethod.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefInt.class, RefInt.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefLong.class, RefLong.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefFloat.class, RefFloat.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefDouble.class, RefDouble.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefBoolean.class, RefBoolean.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefStaticObject.class, RefStaticObject.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefStaticInt.class, RefStaticInt.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefStaticMethod.class, RefStaticMethod.class.getConstructor(Class.class, Field.class));
              REF_TYPES.put(RefConstructor.class, RefConstructor.class.getConstructor(Class.class, Field.class));
          }
          catch (Exception e) {
              e.printStackTrace();
          }
      }
  
      public static Class<?> load(Class<?> mappingClass, String className) {
          try {
              return load(mappingClass, Class.forName(className));
          } catch (Exception e) {
              return null;
          }
      }
  
  
      public static Class load(Class mappingClass, Class<?> realClass) {
          Field[] fields = mappingClass.getDeclaredFields();
          for (Field field : fields) {
              try {
                  if (Modifier.isStatic(field.getModifiers())) {
                      Constructor<?> constructor = REF_TYPES.get(field.getType());
                      if (constructor != null) {
                          field.set(null, constructor.newInstance(realClass, field));
                      }
                  }
              }
              catch (Exception e) {
                  // Ignore
              }
          }
          return realClass;
      }
  
  }