constructorMethod.annotate(Nonnull.class);
for (JTypeVar visitorTypeParameter: visitorInterface.getValueTypeParameters()) {
Types.generifyWithBoundsFrom(constructorMethod, visitorTypeParameter.name(), visitorTypeParameter);
}
AbstractJClass usedValueClassType = valueClass.narrow(constructorMethod.typeParams());
constructorMethod.type(usedValueClassType);
for (JVar param: interfaceMethod.params()) {
AbstractJType paramType = visitorInterface.substituteSpecialType(param.type(), usedValueClassType, usedValueClassType, types._RuntimeException);
JVar constructorMethodParam = constructorMethod.param(param.mods().getValue(), paramType, param.name());
if (param.type().isReference())
constructorMethodParam.annotate(isNullable(param) ? Nullable.class : Nonnull.class);