From 26b01b500065634eb3133dc354a0ba71b13bff56 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 7 Aug 2013 23:53:53 +0200 Subject: wip o Start of JPA implementation. --- .../trygvis/container/compiler/model/ClassG.java | 34 ++++++++++++++++------ .../container/compiler/model/Constructor.java | 11 ++++--- .../container/compiler/model/MethodRef.java | 17 +++++++++++ .../trygvis/container/compiler/model/TypeRef.java | 21 +++++++++---- 4 files changed, 64 insertions(+), 19 deletions(-) (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model') 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 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 body, TypeRef returnType, String name, Parameters parameters) { +// public MethodRef add(List 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 write(MethodRef method) { - List 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 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 body; - public Constructor(ClassG g, Parameters parameters, List body) { - this.g = g; + public Constructor(Parameters parameters, String... body) { + this(parameters, asList(body)); + } + + public Constructor(Parameters parameters, List body) { this.parameters = parameters; this.body = body; } - public List write() { + public List write(ClassG g) { List 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 exceptions = new TreeSet<>(); + public final List typeArgs = new ArrayList<>(); public final List 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 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 { public final boolean array; - public final List args; + public final List args; - private TypeRef(String fqName, String name, boolean primitive, boolean array, List args) { + private TypeRef(String fqName, String name, boolean primitive, boolean array, List args) { this.fqName = fqName; this.plainName = name; this.primitive = primitive; @@ -61,7 +62,7 @@ public class TypeRef implements Comparable { } public TypeRef(Class klass) { - this(fqName(klass), fqName(klass), false, klass.isArray(), Collections.emptyList()); + this(fqName(klass), fqName(klass), false, klass.isArray(), Collections.emptyList()); } private static String fqName(Class klass) { @@ -74,14 +75,14 @@ public class TypeRef implements Comparable { } public TypeRef(String fqName) { - this(fqName, fqName, false, false, Collections.emptyList()); + this(fqName, fqName, false, false, Collections.emptyList()); } - public TypeRef(String fqName, String name, boolean array, List args) { + public TypeRef(String fqName, String name, boolean array, List args) { this(fqName, name, false, array, args); } - public TypeRef args(List args) { + public TypeRef args(List args) { return new TypeRef(fqName, plainName, primitive, array, args); } @@ -108,6 +109,14 @@ public class TypeRef implements Comparable { } public TypeRef args(TypeRef... args) { + List list = new ArrayList<>(); + for (TypeRef arg : args) { + list.add(arg.plainName); + } + return args(list); + } + + public TypeRef args(String... args) { return args(asList(args)); } -- cgit v1.2.3