
net.autobuilder.core.Cleanse Maven / Gradle / Ivy
package net.autobuilder.core;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
import static net.autobuilder.core.Parameter.asFunction;
import static net.autobuilder.core.Util.isDistinct;
final class Cleanse {
/**
* Simplify the generated builder, if necessary because of potential name collisions.
*/
static List preventNamingCollisions(List parameters) {
Boolean areFieldNamesDistinct = parameters.stream().map(FIELD_NAMES).collect(isDistinct());
if (areFieldNamesDistinct) {
return parameters;
}
List result = parameters.stream().map(ORIGINAL_NAMES).collect(toList());
if (!result.stream().map(FIELD_NAMES).collect(isDistinct())) {
throw new AssertionError("This should have worked!");
}
return result;
}
private static final Function> FIELD_NAMES =
asFunction(new FieldNamesCases());
private static final Function ORIGINAL_NAMES =
asFunction(new OriginalNamesCases());
private static class FieldNamesCases implements ParamCases, Void> {
@Override
public Stream parameter(RegularParameter parameter, Void _null) {
return Stream.of(parameter.setterName);
}
@Override
public Stream collectionish(CollectionParameter parameter, Void _null) {
return Stream.of(parameter.parameter.setterName,
parameter.builderFieldName());
}
@Override
public Stream optionalish(OptionalParameter parameter, Void _null) {
return Stream.of(parameter.parameter.setterName);
}
}
private static class OriginalNamesCases implements ParamCases {
@Override
public Parameter parameter(RegularParameter parameter, Void _null) {
return parameter.originalNames();
}
@Override
public Parameter collectionish(CollectionParameter parameter, Void _null) {
return parameter.withParameter(parameter.parameter.originalNames());
}
@Override
public Parameter optionalish(OptionalParameter parameter, Void _null) {
return parameter.withParameter(parameter.parameter.originalNames());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy