summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java')
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java69
1 files changed, 52 insertions, 17 deletions
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 c6f958a..9c92e73 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
@@ -2,33 +2,48 @@ package io.trygvis.container.compiler.model;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
+import java.util.Collections;
+import java.util.List;
+
+import static java.util.Arrays.asList;
+import static org.apache.commons.lang.StringUtils.join;
public class TypeRef implements Comparable<TypeRef> {
- public static final TypeRef VOID = new TypeRef("void", "void");
- public static final TypeRef BOOLEAN = new TypeRef("boolean", null);
- public static final TypeRef BYTE = new TypeRef("byte", null);
- public static final TypeRef SHORT = new TypeRef("short", null);
- public static final TypeRef CHAR = new TypeRef("char", null);
- public static final TypeRef INT = new TypeRef("int", null);
- public static final TypeRef LONG = new TypeRef("long", null);
- public static final TypeRef FLOAT = new TypeRef("float", null);
- public static final TypeRef DOUBLE = new TypeRef("double", null);
+ public static final TypeRef VOID = new TypeRef("void");
+ public static final TypeRef BOOLEAN = new PrimitiveTypeRef("boolean");
+ public static final TypeRef BYTE = new PrimitiveTypeRef("byte");
+ public static final TypeRef SHORT = new PrimitiveTypeRef("short");
+ public static final TypeRef CHAR = new PrimitiveTypeRef("char");
+ public static final TypeRef INT = new PrimitiveTypeRef("int");
+ public static final TypeRef LONG = new PrimitiveTypeRef("long");
+ public static final TypeRef FLOAT = new PrimitiveTypeRef("float");
+ public static final TypeRef DOUBLE = new PrimitiveTypeRef("double");
+
+ private static class PrimitiveTypeRef extends TypeRef {
+ private PrimitiveTypeRef(String name) {
+ super(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;
+ public final String plainName;
public final String className;
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;
+ public final List<TypeRef> args;
+
+ private TypeRef(String fqName, String name, boolean primitive, List<TypeRef> args) {
+ this.fqName = fqName;
+ this.plainName = name;
+ this.primitive = primitive;
+ this.args = args;
int i = this.fqName.lastIndexOf('.');
if (i == -1) {
@@ -43,11 +58,15 @@ public class TypeRef implements Comparable<TypeRef> {
}
public TypeRef(Class<?> klass) {
- this(klass.getCanonicalName(), klass.getCanonicalName());
+ this(klass.getCanonicalName());
}
public TypeRef(String fqName) {
- this(fqName, fqName);
+ this(fqName, fqName, false, Collections.<TypeRef>emptyList());
+ }
+
+ public TypeRef(String fqName, String name) {
+ this(fqName, name, false, Collections.<TypeRef>emptyList());
}
public boolean isPrimitive() {
@@ -62,12 +81,20 @@ public class TypeRef implements Comparable<TypeRef> {
int i = fqName.lastIndexOf('.');
if (i == -1) {
- throw new RuntimeException("This type is in the unnamed package: " + name);
+ throw new RuntimeException("This type is in the unnamed package: " + toString());
}
return fqName.substring(0, i);
}
+ public TypeRef args(List<TypeRef> args) {
+ return new TypeRef(fqName, plainName, false, args);
+ }
+
+ public TypeRef args(TypeRef... args) {
+ return args(asList(args));
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -88,6 +115,14 @@ public class TypeRef implements Comparable<TypeRef> {
return fqName.compareTo(o.fqName);
}
+ public String toString() {
+ String s = plainName;
+ if(args.isEmpty()) {
+ return s;
+ }
+ return s + "<" + join(args, ", ") + ">";
+ }
+
public static TypeRef find(TypeKind kind) {
switch (kind) {
case BOOLEAN: