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.java56
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) {