package com.brightgenerous.commons; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles.Lookup; import java.lang.invoke.MethodType; import com.brightgenerous.lang.Args; public class MethodUtils { private MethodUtils() { } public static MethodHandle getSuperHashCode(Lookup lookup, Class<?> clazz) throws NoSuchMethodException, IllegalAccessException { Args.notNull(lookup, "lookup"); Args.notNull(clazz, "clazz"); return lookup.findSpecial(Object.class, "hashCode", MethodType.methodType(Integer.TYPE), clazz); } public static MethodHandle getSuperEquals(Lookup lookup, Class<?> clazz) throws NoSuchMethodException, IllegalAccessException { Args.notNull(lookup, "lookup"); Args.notNull(clazz, "clazz"); return lookup.findSpecial(Object.class, "equals", MethodType.methodType(Boolean.TYPE, Object.class), clazz); } public static MethodHandle getSuperToString(Lookup lookup, Class<?> clazz) throws NoSuchMethodException, IllegalAccessException { Args.notNull(lookup, "lookup"); Args.notNull(clazz, "clazz"); return lookup.findSpecial(Object.class, "toString", MethodType.methodType(String.class), clazz); } public static MethodHandle getSuperGetClass(Lookup lookup, Class<?> clazz) throws NoSuchMethodException, IllegalAccessException { Args.notNull(lookup, "lookup"); Args.notNull(clazz, "clazz"); return lookup.findSpecial(Object.class, "getClass", MethodType.methodType(Class.class), clazz); } }