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.java34
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Constructor.java11
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/MethodRef.java17
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/TypeRef.java21
4 files changed, 64 insertions, 19 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 c99feae..402498c 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
@@ -45,7 +45,12 @@ public class ClassG {
}
public ClassG extendsType(TypeRef extendsType) {
- this.extendsType = extendsType;
+ this.extendsType = imports.add(extendsType);
+ return this;
+ }
+
+ public ClassG extendsType(Class<?> extendsType) {
+ this.extendsType = imports.add(extendsType);
return this;
}
@@ -54,6 +59,13 @@ public class ClassG {
return this;
}
+ public ClassG implementsType(Class... implementsTypes) {
+ for (Class type : implementsTypes) {
+ this.implementsTypes.add(imports.add(type));
+ }
+ return this;
+ }
+
public FieldRef addField(TypeMirror klass, String name) {
TypeRef type = imports.add(klass);
FieldRef ref = new FieldRef(PRIVATE | FINAL, type, name);
@@ -80,18 +92,17 @@ public class ClassG {
return addField(PUBLIC | STATIC | FINAL, type, name);
}
- public Constructor addConstructor(Parameters parameters, List<String> body) {
- Constructor constructor = new Constructor(this, parameters, body);
+ public ClassG add(Constructor constructor) {
constructors.add(constructor);
- return constructor;
+ return this;
}
- public ClassG addMethod(MethodRef methodRef) {
+ public ClassG add(MethodRef methodRef) {
this.methods.add(methodRef);
return this;
}
-// public MethodRef addMethod(List<String> body, TypeRef returnType, String name, Parameters parameters) {
+// public MethodRef add(List<String> body, TypeRef returnType, String name, Parameters parameters) {
// MethodRef ref = new MethodRef(PUBLIC, returnType, name, parameters, body);
// methods.add(ref);
// return ref;
@@ -145,7 +156,7 @@ public class ClassG {
for (Constructor constructor : constructors) {
body.add("");
- addAll(1, body, constructor.write());
+ addAll(1, body, constructor.write(this));
}
for (MethodRef method : methods) {
@@ -165,7 +176,11 @@ public class ClassG {
}
private List<String> write(MethodRef method) {
- List<String> body = new ArrayList<>();
+ String typeArgs = "";
+ if (!method.typeArgs.isEmpty()) {
+ typeArgs = "<" + join(method.typeArgs, ", ") + "> ";
+ }
+
String returnString;
if (method.returnType == TypeRef.VOID) {
returnString = "void";
@@ -178,9 +193,10 @@ public class ClassG {
parameters.add("final " + p.klass + " " + p.name);
}
- String m = Modifier.toString(method.modifiers) + " " +
+ String m = Modifier.toString(method.modifiers) + " " + typeArgs +
returnString + " " +
method.name + "(" + collectionToDelimitedString(parameters, ", ") + ")";
+ List<String> body = new ArrayList<>();
if (method.exceptions.isEmpty()) {
body.add(m + " {");
} else {
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 0f3ceeb..f701476 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
@@ -4,21 +4,24 @@ import java.util.ArrayList;
import java.util.List;
import static io.trygvis.container.compiler.model.ClassG.addAll;
+import static java.util.Arrays.asList;
import static org.apache.commons.lang.StringUtils.join;
public class Constructor {
- private final ClassG g;
private final Parameters parameters;
private final List<String> body;
- public Constructor(ClassG g, Parameters parameters, List<String> body) {
- this.g = g;
+ public Constructor(Parameters parameters, String... body) {
+ this(parameters, asList(body));
+ }
+
+ public Constructor(Parameters parameters, List<String> body) {
this.parameters = parameters;
this.body = body;
}
- public List<String> write() {
+ public List<String> write(ClassG g) {
List<String> ps = new ArrayList<>();
for (Parameters.ParameterRef p : parameters) {
ps.add(p.klass + " " + p.name);
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/MethodRef.java b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/MethodRef.java
index 902d25a..952a1e5 100644
--- a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/MethodRef.java
+++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/MethodRef.java
@@ -1,11 +1,14 @@
package io.trygvis.container.compiler.model;
import java.lang.reflect.Modifier;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
+import static java.util.Arrays.asList;
import static java.util.Collections.addAll;
+import static java.util.Collections.singletonList;
public class MethodRef {
public final TypeRef returnType;
@@ -13,8 +16,17 @@ public class MethodRef {
public final int modifiers;
public final Parameters parameters;
public final Set<TypeRef> exceptions = new TreeSet<>();
+ public final List<String> typeArgs = new ArrayList<>();
public final List<String> body;
+ public MethodRef(int modifiers, TypeRef returnType, String name, String body) {
+ this(modifiers, returnType, name, new Parameters(), singletonList(body));
+ }
+
+ public MethodRef(int modifiers, TypeRef returnType, String name, Parameters p, String... body) {
+ this(modifiers, returnType, name, p, asList(body));
+ }
+
public MethodRef(int modifiers, TypeRef returnType, String name, Parameters parameters, List<String> body) {
this.modifiers = modifiers;
this.returnType = returnType;
@@ -31,4 +43,9 @@ public class MethodRef {
addAll(this.exceptions, exceptions);
return this;
}
+
+ public MethodRef typeArgs(String... args) {
+ addAll(typeArgs, args);
+ return this;
+ }
}
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 2e679a5..c329ab3 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,6 +2,7 @@ package io.trygvis.container.compiler.model;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -39,9 +40,9 @@ public class TypeRef implements Comparable<TypeRef> {
public final boolean array;
- public final List<TypeRef> args;
+ public final List<String> args;
- private TypeRef(String fqName, String name, boolean primitive, boolean array, List<TypeRef> args) {
+ private TypeRef(String fqName, String name, boolean primitive, boolean array, List<String> args) {
this.fqName = fqName;
this.plainName = name;
this.primitive = primitive;
@@ -61,7 +62,7 @@ public class TypeRef implements Comparable<TypeRef> {
}
public TypeRef(Class<?> klass) {
- this(fqName(klass), fqName(klass), false, klass.isArray(), Collections.<TypeRef>emptyList());
+ this(fqName(klass), fqName(klass), false, klass.isArray(), Collections.<String>emptyList());
}
private static String fqName(Class<?> klass) {
@@ -74,14 +75,14 @@ public class TypeRef implements Comparable<TypeRef> {
}
public TypeRef(String fqName) {
- this(fqName, fqName, false, false, Collections.<TypeRef>emptyList());
+ this(fqName, fqName, false, false, Collections.<String>emptyList());
}
- public TypeRef(String fqName, String name, boolean array, List<TypeRef> args) {
+ public TypeRef(String fqName, String name, boolean array, List<String> args) {
this(fqName, name, false, array, args);
}
- public TypeRef args(List<TypeRef> args) {
+ public TypeRef args(List<String> args) {
return new TypeRef(fqName, plainName, primitive, array, args);
}
@@ -108,6 +109,14 @@ public class TypeRef implements Comparable<TypeRef> {
}
public TypeRef args(TypeRef... args) {
+ List<String> list = new ArrayList<>();
+ for (TypeRef arg : args) {
+ list.add(arg.plainName);
+ }
+ return args(list);
+ }
+
+ public TypeRef args(String... args) {
return args(asList(args));
}