All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.autobuilder.core.Cleanse Maven / Gradle / Ivy

There is a newer version: 2.9.3
Show newest version
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