From 2b1c32590db960be2b5f62897e65bb10d434cae0 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sat, 3 Aug 2013 23:13:32 +0200 Subject: wip --- .../trygvis/container/compiler/model/TypeRef.java | 69 ++++++++++++++++------ 1 file changed, 52 insertions(+), 17 deletions(-) (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java') 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 { - 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 args; + + private TypeRef(String fqName, String name, boolean primitive, List 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 { } public TypeRef(Class klass) { - this(klass.getCanonicalName(), klass.getCanonicalName()); + this(klass.getCanonicalName()); } public TypeRef(String fqName) { - this(fqName, fqName); + this(fqName, fqName, false, Collections.emptyList()); + } + + public TypeRef(String fqName, String name) { + this(fqName, name, false, Collections.emptyList()); } public boolean isPrimitive() { @@ -62,12 +81,20 @@ public class TypeRef implements Comparable { 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 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 { 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: -- cgit v1.2.3