summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Imports.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Imports.java')
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Imports.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Imports.java b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Imports.java
new file mode 100644
index 0000000..9ed6097
--- /dev/null
+++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Imports.java
@@ -0,0 +1,54 @@
+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<TypeRef> 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) {
+ 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);
+ imports.add(ref);
+
+ return ref;
+ }
+
+ public List<String> generate() {
+ List<String> body = new ArrayList<>();
+ for (TypeRef i : imports) {
+ if (i.isPrimitive() || i.inUnnamedPackage()) {
+ continue;
+ }
+ body.add("import " + i.fqName + ";");
+ }
+ if (!imports.isEmpty()) {
+ body.add("");
+ }
+ return body;
+ }
+}