JMethod constructor = proxyClass.constructor(JMod.NONE);
AbstractJClass usedValueClassType = valueClass.narrow(proxyClass.typeParams());
proxyClass.field(JMod.PRIVATE | JMod.FINAL, usedValueClassType, "implementation");
constructor.param(usedValueClassType, "implementation");
constructor.body().assign(JExpr._this().ref("implementation"), JExpr.ref("implementation"));
JMethod acceptMethod = proxyClass.method(JMod.PUBLIC, types._void, "accept");
acceptMethod.annotate(Override.class);
JTypeVar visitorResultType = visitorInterface.getResultTypeParameter();
JTypeVar resultType = Types.generifyWithBoundsFrom(acceptMethod, visitorResultType.name(), visitorResultType);