
org.inferred.freebuilder.processor.excerpt.CheckedSet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of freebuilder Show documentation
Show all versions of freebuilder Show documentation
Automatic generation of the Builder pattern for Java 1.6+
The newest version!
package org.inferred.freebuilder.processor.excerpt;
import org.inferred.freebuilder.processor.source.Excerpt;
import org.inferred.freebuilder.processor.source.LazyName;
import org.inferred.freebuilder.processor.source.SourceBuilder;
import org.inferred.freebuilder.processor.source.ValueType;
import java.util.AbstractSet;
import java.util.Iterator;
import java.util.Set;
import java.util.function.Consumer;
/**
* Excerpts defining a set implementation that delegates to a provided add method to perform
* element validation and insertion into a backing set.
*/
public class CheckedSet extends ValueType implements Excerpt {
public static final LazyName TYPE = LazyName.of("CheckedSet", new CheckedSet());
private CheckedSet() {}
@Override
public void addTo(SourceBuilder code) {
code.addLine("")
.addLine("/**")
.addLine(" * A set implementation that delegates to a provided add method")
.addLine(" * to perform element validation and insertion into a backing set.")
.addLine(" */")
.addLine("private static class %s extends %s {", TYPE, AbstractSet.class)
.addLine("")
.addLine(" private final %s set;", Set.class)
.addLine(" private final %s add;", Consumer.class)
.addLine("")
.addLine(" %s(%s set, %s add) {", TYPE, Set.class, Consumer.class)
.addLine(" this.set = set;")
.addLine(" this.add = add;")
.addLine(" }")
.addLine("")
.addLine("")
.addLine(" @Override public %s iterator() {", Iterator.class)
.addLine(" return set.iterator();")
.addLine(" }")
.addLine("")
.addLine(" @Override public int size() {")
.addLine(" return set.size();")
.addLine(" }")
.addLine("")
.addLine(" @Override public boolean contains(Object e) {")
.addLine(" return set.contains(e);")
.addLine(" }")
.addLine("")
.addLine(" @Override public boolean add(E e) {")
.addLine(" if (!set.contains(e)) {")
.addLine(" add.accept(e);")
.addLine(" return true;")
.addLine(" } else {")
.addLine(" return false;")
.addLine(" }")
.addLine(" }")
.addLine("")
.addLine(" @Override public boolean remove(Object e) {")
.addLine(" return set.remove(e);")
.addLine(" }")
.addLine("}");
}
@Override
protected void addFields(FieldReceiver fields) {}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy