diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2013-08-10 15:44:58 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2013-08-10 15:44:58 +0200 |
commit | 5a1256a8ed931f7a5ba05c4328353411bae31f2b (patch) | |
tree | 2d25ea2076d2dd229bfe7bac61b27977f11889eb /container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java | |
parent | 86c174ddf24b3e5ac8c8d45fa4d7dc6c5d5d3a3a (diff) | |
download | container-playground-5a1256a8ed931f7a5ba05c4328353411bae31f2b.tar.gz container-playground-5a1256a8ed931f7a5ba05c4328353411bae31f2b.tar.bz2 container-playground-5a1256a8ed931f7a5ba05c4328353411bae31f2b.tar.xz container-playground-5a1256a8ed931f7a5ba05c4328353411bae31f2b.zip |
o Moving code out to separate generators.
o Creating SqlSession and SqlSessionFactory.
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java')
-rw-r--r-- | container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java new file mode 100644 index 0000000..7dc083e --- /dev/null +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java @@ -0,0 +1,46 @@ +package io.trygvis.persistence.generators; + +import io.trygvis.container.compiler.model.FieldRef; +import io.trygvis.container.compiler.model.MethodRef; +import io.trygvis.container.compiler.model.Parameters; +import io.trygvis.container.compiler.model.TypeRef; + +import java.io.CharArrayWriter; +import java.io.PrintWriter; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.List; + +import static java.lang.reflect.Modifier.*; +import static org.apache.commons.lang.StringUtils.join; + +public class GeneratorUtils { + public static FieldRef staticVersion(TypeRef interfaceType, String interfaceMethod, MethodRef methodRef, TypeRef klass) { + if (!Modifier.isStatic(methodRef.modifiers)) { + throw new RuntimeException("This only works on static methods."); + } + + List<String> params = new ArrayList<>(); + List<String> args = new ArrayList<>(); + for (Parameters.ParameterRef parameter : methodRef.parameters) { + params.add(parameter.klass.plainName + " " + parameter.name); + args.add(parameter.name); + } + + List<String> exceptions = new ArrayList<>(); + for (TypeRef exception : methodRef.exceptions) { + exceptions.add(exception.plainName); + } + + String e = exceptions.isEmpty() ? "" : "throws " + join(exceptions, ", ") + " "; + + CharArrayWriter buffer = new CharArrayWriter(); + PrintWriter w = new PrintWriter(buffer); + w.println("new " + interfaceType.plainName + "() {"); + w.println(" public " + methodRef.returnType.plainName + " " + interfaceMethod + "(" + join(params, ", ") + ") " + e + "{"); + w.println(" return " + klass.plainName + "." + methodRef.name + "(" + join(args, ", ") + ");"); + w.println(" }"); + w.println("}"); + return new FieldRef(PUBLIC | STATIC | FINAL, interfaceType, methodRef.name).value(buffer.toString()); + } +} |