summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model
diff options
context:
space:
mode:
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model')
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/ClassG.java63
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Constructor.java2
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java56
3 files changed, 68 insertions, 53 deletions
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/ClassG.java b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/ClassG.java
index 9befa36..857311d 100644
--- a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/ClassG.java
+++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/ClassG.java
@@ -12,58 +12,46 @@ import static java.lang.reflect.Modifier.*;
import static org.springframework.util.StringUtils.collectionToDelimitedString;
public class ClassG {
- private final String packageName;
- public final String className;
- private final String extendsClass;
+ public final TypeRef type;
+ private final TypeRef extendsClass;
private final Set<TypeRef> imports = new TreeSet<>();
private final Set<FieldRef> fields = new TreeSet<>();
private final List<MethodRef> methods = new ArrayList<>();
private final List<Constructor> constructors = new ArrayList<>();
- public ClassG(String packageName, String className) {
- this(packageName, className, null);
+ public ClassG(TypeRef type) {
+ this(type, null);
}
- public ClassG(String packageName, String className, String extendsClass) {
- this.packageName = packageName;
- this.className = className;
+ public ClassG(TypeRef type, TypeRef extendsClass) {
+ this.type = type;
this.extendsClass = extendsClass;
}
public TypeRef addImport(final TypeMirror type) {
- if (type.getKind().isPrimitive()) {
- return TypeRef.find(type.getKind());
- }
-
- String canonicalName = type.toString();
-
- for (TypeRef i : imports) {
- if (i.canonicalName().equals(canonicalName)) {
- return i;
- }
- }
+ return addImport(new TypeRef(type));
+ }
- TypeRef ref = new TypeRef(canonicalName, canonicalName);
- imports.add(ref);
- return ref;
+ public TypeRef addImport(Class<?> c) {
+ return addImport(new TypeRef(c));
}
- public TypeRef addImport(Class<?> klass) {
- String canonicalName = klass.getCanonicalName();
- String simpleName = klass.getSimpleName();
- String name = simpleName;
+ public TypeRef addImport(TypeRef klass) {
+ String fqName = klass.fqName;
+ String name = klass.name;
for (TypeRef i : imports) {
- if (i.canonicalName().equals(canonicalName)) {
+ if (i.fqName.equals(fqName)) {
return i;
}
- if (i.name.equals(simpleName)) {
- name = canonicalName;
+ // If we've already found an import with the same name, use the fq version
+ if (i.name.equals(name)) {
+ name = fqName;
break;
}
}
- TypeRef ref = new TypeRef(name, canonicalName);
+ TypeRef ref = new TypeRef(name, fqName);
imports.add(ref);
return ref;
@@ -114,26 +102,23 @@ public class ClassG {
}
public void write(PrintWriter writer) {
- if (packageName.length() > 0) {
- writer.println("package " + packageName + ";");
+ if (!type.inUnnamedPackage()) {
+ writer.println("package " + type.packageName() + ";");
writer.println();
}
for (TypeRef i : imports) {
- if (i.isPrimitive()) {
- continue;
- }
- if (i.canonicalName().indexOf('.') == -1) {
+ if (i.isPrimitive() || i.inUnnamedPackage()) {
continue;
}
- writer.println("import " + i.canonicalName() + ";");
+ writer.println("import " + i.fqName + ";");
}
if (!imports.isEmpty()) {
writer.println();
}
- String extendsString = extendsClass == null ? "" : " extends " + extendsClass;
+ String extendsString = extendsClass == null ? "" : " extends " + extendsClass.name;
- writer.println("public class " + className + extendsString + " {");
+ writer.println("public class " + type.className + extendsString + " {");
for (FieldRef field : fields) {
writer.println();
writer.println(" " + field.toJava() + ";");
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Constructor.java b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Constructor.java
index 43800ce..f669273 100644
--- a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Constructor.java
+++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Constructor.java
@@ -27,7 +27,7 @@ public class Constructor {
String params = collectionToDelimitedString(ps, ", ");
- body.add(" public " + g.className + "(" + params + ") {");
+ body.add(" public " + g.type.className + "(" + params + ") {");
for (String s : this.body) {
body.add(" " + s);
}
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java
index aabfb45..c6f958a 100644
--- a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java
+++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java
@@ -1,6 +1,7 @@
package io.trygvis.container.compiler.model;
import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
public class TypeRef implements Comparable<TypeRef> {
@@ -15,27 +16,56 @@ public class TypeRef implements Comparable<TypeRef> {
public static final TypeRef DOUBLE = new TypeRef("double", null);
/**
- * The name of a class used within a class file. Is either the simple name or the canonical name.
+ * The name of a class used within a class file. Is either the just the name or the fully qualified name.
*/
public final String name;
- private final String canonicalName;
+ public final String className;
- public String canonicalName() {
- if (canonicalName == null) {
- throw new RuntimeException("This type doesn't have a canonical name");
+ public final String fqName;
+ private final boolean primitive;
+
+ public TypeRef(String name, String fqName) {
+ this.name = name;
+ this.primitive = fqName == null;
+ this.fqName = fqName == null ? name : fqName;
+
+ int i = this.fqName.lastIndexOf('.');
+ if (i == -1) {
+ this.className = this.fqName;
+ } else {
+ this.className = this.fqName.substring(i + 1, this.fqName.length());
}
+ }
+
+ public TypeRef(TypeMirror type) {
+ this(type.toString());
+ }
+
+ public TypeRef(Class<?> klass) {
+ this(klass.getCanonicalName(), klass.getCanonicalName());
+ }
- return canonicalName;
+ public TypeRef(String fqName) {
+ this(fqName, fqName);
}
public boolean isPrimitive() {
- return canonicalName == null;
+ return primitive;
}
- public TypeRef(String name, String canonicalName) {
- this.name = name;
- this.canonicalName = canonicalName;
+ public boolean inUnnamedPackage() {
+ return fqName.indexOf('.') == -1;
+ }
+
+ public String packageName() {
+ int i = fqName.lastIndexOf('.');
+
+ if (i == -1) {
+ throw new RuntimeException("This type is in the unnamed package: " + name);
+ }
+
+ return fqName.substring(0, i);
}
@Override
@@ -45,17 +75,17 @@ public class TypeRef implements Comparable<TypeRef> {
TypeRef classRef = (TypeRef) o;
- return canonicalName.equals(classRef.canonicalName);
+ return fqName.equals(classRef.fqName);
}
@Override
public int hashCode() {
- return canonicalName.hashCode();
+ return fqName.hashCode();
}
@Override
public int compareTo(TypeRef o) {
- return canonicalName.compareTo(o.canonicalName);
+ return fqName.compareTo(o.fqName);
}
public static TypeRef find(TypeKind kind) {