public static <X> Class<X> gen(Class<X> cl) {
    if (Modifier.isFinal(cl.getModifiers())) return cl;
    if (HandleAware.class.isAssignableFrom(cl)) return cl;

    SerializationAdapter<X> gen = new SerializationAdapter<X>(cl);

    Class<X> proxyClass = gen.generateProxy();

    return proxyClass;
  }