package io.trygvis.container.compiler.model; import javax.lang.model.type.TypeMirror; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; public class Imports { private final Set imports = new TreeSet<>(); public TypeRef add(final TypeMirror type) { return add(new TypeRef(type)); } public TypeRef add(Class c) { return add(new TypeRef(c)); } public TypeRef add(TypeRef klass) { // TODO: implement properly if (true) { imports.add(klass); return klass; } String fqName = klass.fqName; String name = klass.toString(); for (TypeRef i : imports) { if (i.fqName.equals(fqName)) { return i; } // If we've already found an import with the same name, use the fq version if (i.plainName.equals(name)) { name = fqName; break; } } TypeRef ref = new TypeRef(fqName, name, klass.array, klass.args); imports.add(ref); return ref; } public List generate() { List body = new ArrayList<>(); for (TypeRef i : imports) { if (i.isPrimitive() || i.inUnnamedPackage()) { continue; } body.add("import " + i.importName() + ";"); } if (!imports.isEmpty()) { body.add(""); } return body; } }