package net.karneim.pojobuilder.model;
import java.util.ArrayList;
import java.util.Arrays;
@SuppressWarnings("serial")
public class TypeListM extends ArrayList<TypeM> {
public TypeListM(TypeM... types) {
this(Arrays.asList(types));
}
public TypeListM(Iterable<TypeM> types) {
for (TypeM type : types) {
add(type);
}
}
/**
* Returns a String representation of this type list including bounds.
*
* @return a String representation including bounds
* @see TypeM#getGenericTypeDefinition()
*/
public String toParameterString() {
StringBuilder result = new StringBuilder();
for (TypeM type : this) {
if (result.length() > 0) {
result.append(", ");
}
result.append(type.getGenericTypeDefinition());
}
return result.toString();
}
/**
* Returns a String representation of this type list without bounds.
*
* @return a String representation without bounds
* @see TypeM#getGenericType()
*/
public String toArgumentString() {
StringBuilder result = new StringBuilder();
for (TypeM type : this) {
if (result.length() > 0) {
result.append(", ");
}
result.append(type.getGenericType());
}
return result.toString();
}
public void add(Class<?> aClass) {
add(new TypeM(aClass));
}
public ImportTypesM addToImportTypes(ImportTypesM result) {
for (TypeM t : this) {
t.addToImportTypes(result);
}
return result;
}
public TypeM[] asArray() {
return this.toArray(new TypeM[size()]);
}
public TypeListM collectDistinctTypeVariablesRecursevly(TypeListM result) {
for (TypeM type : this) {
if (type.isTypeVariable()) {
if (!result.contains(type)) {
result.add(type);
}
} else {
type.getTypeParameters().collectDistinctTypeVariablesRecursevly(result);
}
}
return result;
}
}