diff options
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model')
4 files changed, 96 insertions, 37 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 6c0e246..13e1b03 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 @@ -1,7 +1,6 @@ package io.trygvis.container.compiler.model; import javax.lang.model.type.TypeMirror; -import java.io.CharArrayWriter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; @@ -12,11 +11,12 @@ import static org.springframework.util.StringUtils.collectionToDelimitedString; public class ClassG { private final String packageName; - private final String className; + public final String className; private final String extendsClass; private final Set<TypeRef> imports = new TreeSet<>(); private final Set<FieldRef> fields = new TreeSet<>(); private final List<MethodRef> methods = new ArrayList<>(); + private final List<Constructor> constructors = new ArrayList<>(); // public ClassG(String packageName, String className) { // this(packageName, className, null); @@ -79,7 +79,13 @@ public class ClassG { return ref; } - public MethodRef addMethod(String body, TypeRef returnType, String name, ParameterRef... parameters) { + public Constructor addConstructor(Parameters parameters, List<String> body) { + Constructor constructor = new Constructor(this, parameters, body); + constructors.add(constructor); + return constructor; + } + + public MethodRef addMethod(List<String> body, TypeRef returnType, String name, ParameterRef... parameters) { MethodRef ref = new MethodRef(returnType, name, parameters, body); methods.add(ref); return ref; @@ -97,10 +103,19 @@ public class ClassG { writer.println(); writer.println("public class " + className + " extends " + extendsClass + " {"); for (FieldRef field : fields) { + writer.println(); writer.println(" private final " + field.klass.name + " " + field.name + ";"); } + for (Constructor constructor : constructors) { + writer.println(); + for (String s : constructor.write()) { + writer.println(s); + } + } + for (MethodRef method : methods) { + writer.println(); write(writer, method); } @@ -117,40 +132,13 @@ public class ClassG { List<String> parameters = new ArrayList<>(); for (ParameterRef p : method.parameters) { - parameters.add(p.klass.name + " " + p.name); + parameters.add("final " + p.klass.name + " " + p.name); } writer.println(" public " + returnString + " " + method.name + "(" + collectionToDelimitedString(parameters, ", ") + ") {"); - writer.println(method.body); - writer.println(" }"); - } - - public void simpleConstructor(List<ParameterRef> parameters, List<String> goesToSuper) { - List<String> ps = new ArrayList<>(); - for (ParameterRef p : parameters) { - ps.add(p.klass.name + " " + p.name); - } - List<String> ss = new ArrayList<>(); - List<String> local = new ArrayList<>(); - for (String s : goesToSuper) { - for (ParameterRef parameter : parameters) { - if (parameter.name.equals(s)) { - ss.add(parameter.name); - continue; - } - } - local.add(s); - } - String params = ps.size() == 0 ? "" : ", " + collectionToDelimitedString(ps, ", "); - - CharArrayWriter buffer = new CharArrayWriter(); - PrintWriter writer = new PrintWriter(buffer); - - writer.println(" public " + className + "(" + params + ") {"); - writer.println(" super(" + collectionToDelimitedString(ss, ", ") + ");"); -// writer.println(" this.transactionManager = _transactionManager_;"); - for (String s : local) { - writer.println(" this." + s + " = " + s); + for (String s : method.body) { + writer.print(" "); + writer.println(s); } writer.println(" }"); } 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 new file mode 100644 index 0000000..43800ce --- /dev/null +++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Constructor.java @@ -0,0 +1,38 @@ +package io.trygvis.container.compiler.model; + +import java.util.ArrayList; +import java.util.List; + +import static org.springframework.util.StringUtils.collectionToDelimitedString; + +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; + this.parameters = parameters; + this.body = body; + } + + public List<String> write() { + List<String> body = new ArrayList<>(); + + List<String> ps = new ArrayList<>(); + for (ParameterRef p : parameters) { + ps.add(p.klass.name + " " + p.name); + } + + String params = collectionToDelimitedString(ps, ", "); + + body.add(" public " + g.className + "(" + params + ") {"); + for (String s : this.body) { + body.add(" " + s); + } + body.add(" }"); + + return body; + } +} 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 0b2cf89..36f61e8 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,13 +1,15 @@ package io.trygvis.container.compiler.model; +import java.util.List; + public class MethodRef { public final TypeRef returnType; public final String name; public final ParameterRef[] parameters; - public final String body; + public final List<String> body; public - MethodRef(TypeRef returnType, String name, ParameterRef[] parameters, String body) { + MethodRef(TypeRef returnType, String name, ParameterRef[] parameters, List<String> body) { this.returnType = returnType; this.name = name; this.parameters = parameters; diff --git a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Parameters.java b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Parameters.java index bfb32b6..7c1ab5b 100644 --- a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Parameters.java +++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Parameters.java @@ -1,4 +1,35 @@ package io.trygvis.container.compiler.model; -public class Parameters { +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + +public class Parameters implements Iterable<ParameterRef> { + private final List<ParameterRef> parameters = new ArrayList<>(); + + public ParameterRef addParameter(TypeRef klass, String name) { + + while (taken(name)) { + name = name + "_"; + } + + ParameterRef ref = new ParameterRef(klass, name); + parameters.add(ref); + return ref; + } + + private boolean taken(String name) { + for (ParameterRef parameter : parameters) { + if (parameter.name.equals(name)) { + return true; + } + } + + return false; + } + + @Override + public ListIterator<ParameterRef> iterator() { + return parameters.listIterator(); + } } |