summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model
diff options
context:
space:
mode:
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model')
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/ClassG.java51
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/FieldRef.java11
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/MethodRef.java9
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/Parameters.java2
4 files changed, 57 insertions, 16 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 8ff91a0..6bfd0be 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
@@ -8,6 +8,7 @@ import java.util.List;
import java.util.Set;
import java.util.TreeSet;
+import static java.lang.reflect.Modifier.*;
import static org.springframework.util.StringUtils.collectionToDelimitedString;
public class ClassG {
@@ -19,6 +20,10 @@ public class ClassG {
private final List<MethodRef> methods = new ArrayList<>();
private final List<Constructor> constructors = new ArrayList<>();
+ public ClassG(String packageName, String className) {
+ this(packageName, className, null);
+ }
+
public ClassG(String packageName, String className, String extendsClass) {
this.packageName = packageName;
this.className = className;
@@ -64,20 +69,32 @@ public class ClassG {
return ref;
}
- public FieldRef addField(Class<?> klass, String name) {
+ public FieldRef addField(TypeMirror klass, String name) {
TypeRef type = addImport(klass);
- FieldRef ref = new FieldRef(Modifier.PRIVATE | Modifier.FINAL, type, name);
+ FieldRef ref = new FieldRef(PRIVATE | FINAL, type, name);
fields.add(ref);
return ref;
}
- public FieldRef addPublicFinalField(Class<?> klass, String name) {
+ public FieldRef addField(int modifiers, Class<?> klass, String name) {
TypeRef type = addImport(klass);
- FieldRef ref = new FieldRef(Modifier.PUBLIC | Modifier.FINAL, type, name);
+ FieldRef ref = new FieldRef(modifiers, type, name);
fields.add(ref);
return ref;
}
+ public FieldRef addField(Class<?> klass, String name) {
+ return addField(PRIVATE | FINAL, klass, name);
+ }
+
+ public FieldRef addPublicFinalField(Class<?> klass, String name) {
+ return addField(PUBLIC | FINAL, klass, name);
+ }
+
+ public FieldRef addPublicStaticFinalField(Class<?> klass, String name) {
+ return addField(PUBLIC | STATIC | FINAL, klass, name);
+ }
+
public Constructor addConstructor(Parameters parameters, List<String> body) {
Constructor constructor = new Constructor(this, parameters, body);
constructors.add(constructor);
@@ -85,13 +102,19 @@ public class ClassG {
}
public MethodRef addMethod(List<String> body, TypeRef returnType, String name, ParameterRef... parameters) {
- MethodRef ref = new MethodRef(returnType, name, parameters, body);
+ MethodRef ref = new MethodRef(PUBLIC, returnType, name, parameters, body);
+ methods.add(ref);
+ return ref;
+ }
+
+ public MethodRef addStaticMethod(List<String> body, TypeRef returnType, String name, ParameterRef... parameters) {
+ MethodRef ref = new MethodRef(PUBLIC | STATIC, returnType, name, parameters, body);
methods.add(ref);
return ref;
}
public void write(PrintWriter writer) {
- if(packageName.length() > 0) {
+ if (packageName.length() > 0) {
writer.println("package " + packageName + ";");
writer.println();
}
@@ -99,12 +122,14 @@ public class ClassG {
if (i.isPrimitive()) {
continue;
}
- if(i.canonicalName().indexOf('.') == -1) {
+ if (i.canonicalName().indexOf('.') == -1) {
continue;
}
writer.println("import " + i.canonicalName() + ";");
}
- writer.println();
+ if (!imports.isEmpty()) {
+ writer.println();
+ }
String extendsString = extendsClass == null ? "" : " extends " + extendsClass;
@@ -143,19 +168,17 @@ public class ClassG {
}
writer.print(" public " + returnString + " " + method.name + "(" + collectionToDelimitedString(parameters, ", ") + ")");
- if(method.exceptions.isEmpty()) {
+ if (method.exceptions.isEmpty()) {
writer.println(" {");
- }
- else {
+ } else {
writer.println(" throws");
ArrayList<TypeRef> typeRefs = new ArrayList<>(method.exceptions);
for (int i = 0; i < typeRefs.size(); i++) {
TypeRef e = typeRefs.get(i);
writer.print(" " + e.name);
- if(i < typeRefs.size() - 1) {
+ if (i < typeRefs.size() - 1) {
writer.println(",");
- }
- else {
+ } else {
writer.println(" {");
}
}
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/FieldRef.java b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/FieldRef.java
index c6b81a0..64bf032 100644
--- a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/FieldRef.java
+++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model/FieldRef.java
@@ -6,6 +6,7 @@ public class FieldRef implements Comparable<FieldRef> {
public final int modifiers;
public final TypeRef klass;
public final String name;
+ public String value;
public FieldRef(int modifiers, TypeRef klass, String name) {
this.modifiers = modifiers;
@@ -14,7 +15,11 @@ public class FieldRef implements Comparable<FieldRef> {
}
public String toJava() {
- return Modifier.toString(modifiers) + " " + klass.name + " " + name;
+ String s = Modifier.toString(modifiers) + " " + klass.name + " " + name;
+ if (value != null) {
+ s += " = " + value;
+ }
+ return s;
}
@Override
@@ -36,4 +41,8 @@ public class FieldRef implements Comparable<FieldRef> {
public int compareTo(FieldRef o) {
return name.compareTo(o.name);
}
+
+ public void value(String value) {
+ this.value = value;
+ }
}
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 a59e9a6..ee83fa9 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,5 +1,6 @@
package io.trygvis.container.compiler.model;
+import java.lang.reflect.Modifier;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@@ -9,15 +10,21 @@ import static java.util.Collections.addAll;
public class MethodRef {
public final TypeRef returnType;
public final String name;
+ public final int modifiers;
public final ParameterRef[] parameters;
public final Set<TypeRef> exceptions = new TreeSet<>();
public final List<String> body;
- public MethodRef(TypeRef returnType, String name, ParameterRef[] parameters, List<String> body) {
+ public MethodRef(int modifiers, TypeRef returnType, String name, ParameterRef[] parameters, List<String> body) {
+ this.modifiers = modifiers;
this.returnType = returnType;
this.name = name;
this.parameters = parameters;
this.body = body;
+
+ if ((Modifier.methodModifiers() & modifiers) != modifiers) {
+ throw new RuntimeException("Invalid modifiers for method: " + Modifier.toString(modifiers));
+ }
}
public MethodRef exception(TypeRef... exceptions) {
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 7c1ab5b..cfd29f9 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
@@ -5,6 +5,8 @@ import java.util.List;
import java.util.ListIterator;
public class Parameters implements Iterable<ParameterRef> {
+ public static final Parameters noParameters = new Parameters();
+
private final List<ParameterRef> parameters = new ArrayList<>();
public ParameterRef addParameter(TypeRef klass, String name) {