summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/GeneratorUtils.java
diff options
context:
space:
mode:
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.java46
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());
+ }
+}