VariableNameSource nameSource = new VariableNameSource();
AbstractJClass usedValueClassType = valueClass.narrow(valueClass.typeParams());
JVar that = compareToMethod.param(JMod.FINAL, usedValueClassType, nameSource.get("that"));
AbstractJClass visitorType = visitorInterface.narrowed(usedValueClassType, types._Integer, types._RuntimeException);
JDefinedClass anonymousClass1 = valueClass.owner().anonymousClass(visitorType);
JMethod[] methods = visitorInterface.methods().toArray(new JMethod[visitorInterface.methods().size()]);
for (int interfaceMethodIndex1 = 0; interfaceMethodIndex1 < methods.length; interfaceMethodIndex1++) {
JMethod interfaceMethod1 = methods[interfaceMethodIndex1];
JMethod visitorMethod1 = anonymousClass1.method(interfaceMethod1.mods().getValue() & ~JMod.ABSTRACT, types._Integer, interfaceMethod1.name());
visitorMethod1.annotate(Override.class);
visitorMethod1.annotate(Nonnull.class);
VariableNameSource nameSource1 = nameSource.forBlock();
List<JVar> arguments1 = new ArrayList<JVar>();
JVar varArgument1 = null;
for (JVar param1: interfaceMethod1.params()) {
AbstractJType argumentType = visitorInterface.substituteSpecialType(param1.type(), usedValueClassType, types._Integer, types._RuntimeException);
JVar argument1 = visitorMethod1.param(param1.mods().getValue() | JMod.FINAL, argumentType, nameSource1.get(param1.name()));
arguments1.add(argument1);
}
JVar param1 = interfaceMethod1.listVarParam();
if (param1 != null) {
AbstractJType argumentType = visitorInterface.substituteSpecialType(param1.type().elementType(), usedValueClassType, types._Integer, types._RuntimeException);
JVar argument1 = visitorMethod1.varParam(param1.mods().getValue() | JMod.FINAL, argumentType, nameSource1.get(param1.name()));
varArgument1 = argument1;
}
JDefinedClass anonymousClass2 = valueClass.owner().anonymousClass(visitorType);
for (int interfaceMethodIndex2 = 0; interfaceMethodIndex2 < methods.length; interfaceMethodIndex2++) {
JMethod interfaceMethod2 = methods[interfaceMethodIndex2];
JMethod visitorMethod2 = anonymousClass2.method(interfaceMethod2.mods().getValue() & ~JMod.ABSTRACT, types._Integer, interfaceMethod2.name());
visitorMethod2.annotate(Override.class);
visitorMethod2.annotate(Nonnull.class);
VariableNameSource nameSource2 = nameSource1.forBlock();
List<JVar> arguments2 = new ArrayList<JVar>();