From 5a1256a8ed931f7a5ba05c4328353411bae31f2b Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sat, 10 Aug 2013 15:44:58 +0200 Subject: o Moving code out to separate generators. o Creating SqlSession and SqlSessionFactory. --- .../persistence/generators/GeneratorUtils.java | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java') 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 params = new ArrayList<>(); + List args = new ArrayList<>(); + for (Parameters.ParameterRef parameter : methodRef.parameters) { + params.add(parameter.klass.plainName + " " + parameter.name); + args.add(parameter.name); + } + + List 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()); + } +} -- cgit v1.2.3