static AccessibleObject fetchMethod(Class<?> clazz, String methodName, Class<?> ... parameterTypes) throws NoSuchMethodException {
		if (clazz == null) {
			throw new NullPointerException();
		}
		NoSuchMethodException exception = null;
		
		if (clazz.getSimpleName().equals(methodName) || pDigits.matcher(methodName).matches()) {
			return clazz.getDeclaredConstructor(parameterTypes);
		}
		
		try {
			return clazz.getMethod(methodName, parameterTypes);
		} catch (NoSuchMethodException e) {
			exception = e;
		}
		
		for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
			try {
				return c.getDeclaredMethod(methodName, parameterTypes);
			} catch (NoSuchMethodException e) {
				continue;
			}
		}
		throw exception;
	}