diff options
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/model')
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) { |