public static <T> T proxy(final T instance) { try { Class<?>[] _interfaces; Class<?> currentClass = instance.getClass(); do { _interfaces = currentClass.getInterfaces(); currentClass = currentClass.getSuperclass(); } while (_interfaces.length == 0 && currentClass != null); T result = (T) new ByteBuddy() .subclass(Object.class) .implement(_interfaces) .method(ElementMatchers.any()) .intercept(InvocationHandlerAdapter.of(new InterpolationHandler(instance))) .make() .load(instance.getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION) .getLoaded() .newInstance(); if (instance instanceof CloneableConfig) { return (T) ((CloneableConfig) result).asNewClone(result); } return result; } catch (final Exception ignored) { ignored.printStackTrace(); return instance; } }
public static <T> T proxy(final T instance) { try { Class<?>[] _interfaces; Class<?> currentClass = instance.getClass(); do { _interfaces = currentClass.getInterfaces(); currentClass = currentClass.getSuperclass(); } while (_interfaces.length == 0 && currentClass != null); T result = (T) new ByteBuddy() .subclass(Object.class) .implement(_interfaces) .method(ElementMatchers.any()) .intercept(InvocationHandlerAdapter.of(new InterpolationHandler(instance))) .make() .load(instance.getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION) .getLoaded() .newInstance(); if (instance instanceof CloneableConfig) { return (T) ((CloneableConfig) result).asNewClone(result); } return result; } catch (final Exception ignored) { ignored.printStackTrace(); return instance; } }