package io.trygvis.container.compiler.model; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class Parameters implements Iterable { public static final Parameters noParameters = new Parameters(); private final List parameters = new ArrayList<>(); public Parameters() { } public Parameters(TypeRef type, String name) { addParameter(type, name); } public Parameters(TypeRef typeA, String nameA, TypeRef typeB, String nameB) { addParameter(typeA, nameA); addParameter(typeB, nameB); } public Parameters(TypeRef typeA, String nameA, TypeRef typeB, String nameB, TypeRef typeC, String nameC) { addParameter(typeA, nameA); addParameter(typeB, nameB); addParameter(typeC, nameC); } public ParameterRef addParameter(TypeRef klass, String name) { while (taken(name)) { name = name + "_"; } ParameterRef ref = new ParameterRef(klass, name); parameters.add(ref); return ref; } private boolean taken(String name) { for (ParameterRef parameter : parameters) { if (parameter.name.equals(name)) { return true; } } return false; } @Override public ListIterator iterator() { return parameters.listIterator(); } public static class ParameterRef { public final TypeRef klass; public final String name; ParameterRef(TypeRef klass, String name) { this.klass = klass; this.name = name; } } }