diff options
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.java | 56 |
1 files changed, 43 insertions, 13 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 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) { |