-----------------
getCalendarInstance(<tzId>, <mTime>)
-----------------
<tab>public static java.util.GregorianCalendar getCalendarInstance(String tzId, long mTime) {
<tab><tab>java.util.Calendar cal = java.util.Calendar.getInstance();
<tab><tab>cal.setTimeZone(java.util.TimeZone.getTimeZone(tzId));
<tab><tab>cal.setTimeInMillis(mTime);
<tab><tab>return (java.util.GregorianCalendar) cal;
<tab>}
-----------------
getClassHierarchy(<clazz>)
-----------------
<tab>public static java.util.List<Class> getClassHierarchy(Class clazz){
<tab><tab>java.util.List<Class> classes = new java.util.ArrayList<Class>();
<tab><tab>for (Class c : hierarchy(clazz)) {
<tab><tab><tab>if(c.equals(Object.class)) continue;
<tab><tab><tab>classes.add(c);
<tab><tab>}
<tab><tab>return classes;
<tab>}
-----------------
hierarchy(<type>)
-----------------
<tab>public static Iterable<Class<?>> hierarchy(final Class<?> type) {
<tab><tab>final Iterable<Class<?>> classes = new Iterable<Class<?>>() {
<tab><tab><tab>@Override
<tab><tab><tab>public java.util.Iterator<Class<?>> iterator() {
<tab><tab><tab><tab>final MutableObject<Class<?>> next = new MutableObject<Class<?>>(type);
<tab><tab><tab><tab>return new java.util.Iterator<Class<?>>() {
<tab><tab><tab><tab><tab>@Override
<tab><tab><tab><tab><tab>public boolean hasNext() {
<tab><tab><tab><tab><tab><tab>return next.getValue() != null;
<tab><tab><tab><tab><tab>}
<tab><tab><tab><tab><tab>@Override
<tab><tab><tab><tab><tab>public Class<?> next() {
<tab><tab><tab><tab><tab><tab>final Class<?> result = next.getValue();
<tab><tab><tab><tab><tab><tab>next.setValue(result.getSuperclass());
<tab><tab><tab><tab><tab><tab>return result;
<tab><tab><tab><tab><tab>}
<tab><tab><tab><tab><tab>@Override
<tab><tab><tab><tab><tab>public void remove() {
<tab><tab><tab><tab><tab><tab>throw new UnsupportedOperationException();
<tab><tab><tab><tab><tab>}
<tab><tab><tab><tab>};
<tab><tab><tab>}
<tab><tab>};
<tab><tab>return classes;
<tab>}
<tab>private static class MutableObject<T> {
<tab><tab>private T value;
<tab><tab>public MutableObject(T value) {
<tab><tab><tab>this.value = value;
<tab><tab>}
<tab><tab>public T getValue() {
<tab><tab><tab>return value;
<tab><tab>}
<tab><tab>public void setValue(T value) {
<tab><tab><tab>this.value = value;
<tab><tab>}
<tab><tab>@Override
<tab><tab>public boolean equals(Object o) {
<tab><tab><tab>if (this == o) return true;
<tab><tab><tab>if (o == null || getClass() != o.getClass()) return false;
<tab><tab><tab>MutableObject<?> that = (MutableObject<?>) o;
<tab><tab><tab>return value != null ? value.equals(that.value) : that.value == null;
<tab><tab>}
<tab><tab>@Override
<tab><tab>public int hashCode() {
<tab><tab><tab>return value != null ? value.hashCode() : 0;
<tab><tab>}
<tab>}
-----------------
getAllFieldsOfObject(<obj>)
-----------------
<tab>public static java.util.List<java.lang.reflect.Field> getAllFieldsOfObject(Object obj) {
<tab><tab>java.util.List<java.lang.reflect.Field> allFields = new java.util.ArrayList<java.lang.reflect.Field>();
<tab><tab>for(Class c : getClassHierarchy(obj.getClass())) {
<tab><tab><tab>allFields.addAll(java.util.Arrays.asList(c.getDeclaredFields()));
<tab><tab>}
<tab><tab>return allFields;
<tab>}
-----------------
notPublicAssignment(<obj>, <fName>, <value>)
-----------------
<tab>public static void notPublicAssignment(Object obj, String fieldName, Object value) throws IllegalAccessException {
<tab><tab>for(java.lang.reflect.Field f : getAllFieldsOfObject(obj)) {
<tab><tab><tab>if(f.getName().equals(fieldName)) {
<tab><tab><tab><tab>boolean currentAccessible = f.isAccessible();
<tab><tab><tab><tab>f.setAccessible(true);
<tab><tab><tab><tab>f.set(obj, value);
<tab><tab><tab><tab>f.setAccessible(currentAccessible);
<tab><tab><tab>}
<tab><tab>}
<tab>}
-----------------
newInstanceHard(<type>)
-----------------
<tab>public static Object newInstanceHard(Class type) {
<tab><tab>try {
<tab><tab><tab>java.lang.reflect.Constructor mungedConstructor = newConstructorForSerialization(type, getJavaLangObjectConstructor());
<tab><tab><tab>mungedConstructor.setAccessible(true);
<tab><tab><tab>return mungedConstructor.newInstance((Object[]) null);
<tab><tab>} catch(Exception e) {
<tab><tab><tab>throw new IllegalStateException(e);
<tab><tab>}
<tab>}
-----------------
getJavaLangObjectConstructor()
-----------------
<tab>public static java.lang.reflect.Constructor<Object> getJavaLangObjectConstructor() {
<tab><tab>try {
<tab><tab><tab>return Object.class.getConstructor((Class[]) null);
<tab><tab>} catch(NoSuchMethodException e) {
<tab><tab><tab>throw new IllegalStateException(e);
<tab><tab>}
<tab>}
-----------------
getJavaLangObjectConstructor(<type>, <constructor>)
-----------------
<tab>public static java.lang.reflect.Constructor newConstructorForSerialization(Class type, java.lang.reflect.Constructor<?> constructor) {
<tab><tab>Class<?> reflectionFactoryClass = getReflectionFactoryClass();
<tab><tab>Object reflectionFactory = createReflectionFactory(reflectionFactoryClass);
<tab><tab>java.lang.reflect.Method newConstructorForSerializationMethod = getNewConstructorForSerializationMethod(reflectionFactoryClass);
<tab><tab>try {
<tab><tab><tab>return (java.lang.reflect.Constructor) newConstructorForSerializationMethod.invoke(reflectionFactory, type, constructor);
<tab><tab>} catch(Exception e) {
<tab><tab><tab>throw new IllegalStateException(e);
<tab><tab>}
<tab>}
-----------------
getReflectionFactoryClass()
-----------------
<tab>public static Class<?> getReflectionFactoryClass() {
<tab><tab>try {
<tab><tab><tab>return Class.forName("sun.reflect.ReflectionFactory");
<tab><tab>} catch(ClassNotFoundException e) {
<tab><tab><tab>throw new IllegalStateException(e);
<tab><tab>}
<tab>}
-----------------
createReflectionFactory(<reflectionFactoryClass>)
-----------------
<tab>public static Object createReflectionFactory(Class<?> reflectionFactoryClass) {
<tab><tab>try {
<tab><tab><tab>java.lang.reflect.Method method = reflectionFactoryClass.getDeclaredMethod("getReflectionFactory");
<tab><tab><tab>return method.invoke(null);
<tab><tab>} catch(Exception e) {
<tab><tab><tab>throw new IllegalStateException(e);
<tab><tab>}
<tab>}
-----------------
getNewConstructorForSerializationMethod(<reflectionFactoryClass>)
-----------------
<tab>public static java.lang.reflect.Method getNewConstructorForSerializationMethod(Class<?> reflectionFactoryClass) {
<tab><tab>try {
<tab><tab><tab>return reflectionFactoryClass.getDeclaredMethod("newConstructorForSerialization", Class.class, java.lang.reflect.Constructor.class);
<tab><tab>} catch(NoSuchMethodException e) {
<tab><tab><tab>throw new IllegalStateException(e);
<tab><tab>}
<tab>}
-----------------
callConstructorReflection(<type>)
-----------------
<tab>public static Object callConstructorReflection(Class type) throws IllegalAccessException, java.lang.reflect.InvocationTargetException, InstantiationException {
<tab><tab>java.lang.reflect.Constructor constructor = null;
<tab><tab>for (java.lang.reflect.Constructor c : type.getDeclaredConstructors()) {
<tab><tab><tab>if (c.getParameterTypes().length == 0) {
<tab><tab><tab><tab>constructor = c;
<tab><tab><tab><tab>break;
<tab><tab><tab>}
<tab><tab>}
<tab><tab>if (constructor != null) {
<tab><tab><tab>constructor.setAccessible(true);
<tab><tab><tab>return constructor.newInstance((Object[]) null);
<tab><tab>} else {
<tab><tab><tab>return null;
<tab><tab>}
<tab>}
-----------------
createInstance(<type>)
-----------------
<tab>public static <T> T createInstance(Class<T> clazz) {
<tab><tab>try {
<tab><tab><tab>return (T) newInstanceHard(Class.forName(clazz.getName()));
<tab><tab>} catch (ClassNotFoundException cnf) {
<tab><tab><tab>throw new IllegalStateException(cnf);
<tab><tab>}
<tab>}
-----------------