You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2019/05/05 13:18:33 UTC
[plc4x] 01/02: Fixed Enum Factory.
This is an automated email from the ASF dual-hosted git repository.
jfeinauer pushed a commit to branch feature/code-gen
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit a11f01a5086c4e9ebbaadbb216c830d32ab1ecab
Author: Julian Feinauer <j....@pragmaticminds.de>
AuthorDate: Sun May 5 13:58:50 2019 +0200
Fixed Enum Factory.
---
.../plc4x/codegen/ast/ConstructorDeclaration.java | 5 +
.../org/apache/plc4x/codegen/ast/EnumFactory.java | 130 +++++++++++++++++++++
.../apache/plc4x/codegen/ast/FieldDeclaration.java | 22 +++-
.../org/apache/plc4x/codegen/ast/Generator.java | 12 +-
.../apache/plc4x/codegen/ast/JavaGenerator.java | 36 +++++-
.../apache/plc4x/codegen/ast/MethodDefinition.java | 5 -
.../org/apache/plc4x/codegen/ast/Modifier.java | 7 ++
.../apache/plc4x/codegen/ast/NewExpression.java | 8 +-
.../org/apache/plc4x/codegen/ast/PhpGenerator.java | 105 -----------------
.../org/apache/plc4x/codegen/ast/PojoFactory.java | 12 +-
.../apache/plc4x/codegen/ast/PythonGenerator.java | 26 ++++-
.../apache/plc4x/codegen/ast/EnumFactoryTest.java | 70 +++++++++++
.../apache/plc4x/codegen/ast/PhpGeneratorTest.java | 23 ----
13 files changed, 303 insertions(+), 158 deletions(-)
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstructorDeclaration.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstructorDeclaration.java
index df5b02b..8dab2c8 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstructorDeclaration.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstructorDeclaration.java
@@ -1,9 +1,14 @@
package org.apache.plc4x.codegen.ast;
import java.util.List;
+import java.util.Set;
public class ConstructorDeclaration extends MethodDefinition {
+ public ConstructorDeclaration(Set<Modifier> modifiers, List<ParameterExpression> parameters, Block body) {
+ super(modifiers, null, null, parameters, body);
+ }
+
public ConstructorDeclaration(List<ParameterExpression> parameters, Block body) {
super(null, null, parameters, body);
}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/EnumFactory.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/EnumFactory.java
new file mode 100644
index 0000000..b1b422f
--- /dev/null
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/EnumFactory.java
@@ -0,0 +1,130 @@
+package org.apache.plc4x.codegen.ast;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Creates Enum Like things...
+ */
+public class EnumFactory {
+
+ public ClassDefinition create(PojoDescription desc, List<EnumEntry> enumEntries) {
+ // Create all Fields first
+ final List<Node> constructorStatements = new ArrayList<>();
+ final List<FieldDeclaration> fields = new ArrayList<>();
+ for (Field field1 : desc.fields) {
+ FieldDeclaration fieldDeclaration = new FieldDeclaration(field1.getType(), field1.getName(), Modifier.PRIVATE, Modifier.FINAL);
+ fields.add(fieldDeclaration);
+ constructorStatements.add(new AssignementExpression(
+ new FieldReference(field1.getType(), field1.getName()),
+ new ParameterExpression(field1.getType(), field1.getName())
+ ));
+ }
+
+ // Create the Getters
+ final List<MethodDefinition> getters = desc.fields.stream()
+ .map(field -> getMethodDefinition(field.getName(), field.getType()))
+ .collect(Collectors.toList());
+
+ // Now add all these getters
+ final List<MethodDefinition> methods = new ArrayList<>(getters);
+
+ final ArrayList<FieldDeclaration> finalFields = new ArrayList<>();
+
+ // Now add all these static methods on top
+ for (EnumEntry enumEntry : enumEntries) {
+ final TypeNode clazzType = new TypeNode(desc.getName());
+ final String fieldName = enumEntry.getName().toUpperCase();
+ finalFields.add(new FieldDeclaration(
+ new HashSet<>(Arrays.asList(Modifier.STATIC, Modifier.FINAL)),
+ clazzType,
+ fieldName,
+ new NewExpression(clazzType, enumEntry.getArguments())
+ ));
+ }
+
+ finalFields.addAll(fields);
+
+ // Add constructor
+ final ConstructorDeclaration constructor = new ConstructorDeclaration(Collections.singleton(Modifier.PRIVATE),
+ desc.fields.stream()
+ .map(field -> new ParameterExpression(field.getType(), field.getName())).collect(Collectors.toList()),
+ new Block(constructorStatements));
+
+
+ return new ClassDefinition("", desc.getName(), finalFields, Arrays.asList(constructor), methods, null);
+ }
+
+ static MethodDefinition getMethodDefinition(String name, TypeNode type) {
+ String getter = "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
+ Block body = new Block(new ReturnStatement(new FieldReference(type, name)));
+ return new MethodDefinition(getter, type, Collections.emptyList(), body);
+ }
+
+ public static class EnumEntry {
+
+ private final String name;
+ private final List<Node> arguments;
+
+ public EnumEntry(String name, List<Node> arguments) {
+ this.name = name;
+ this.arguments = arguments;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public List<Node> getArguments() {
+ return arguments;
+ }
+ }
+
+ public static class PojoDescription {
+
+ private final String name;
+ private final List<Field> fields;
+
+ public PojoDescription(String name, Field... fields) {
+ this.name = name;
+ this.fields = Arrays.asList(fields);
+ }
+
+ public PojoDescription(String name, List<Field> fields) {
+ this.name = name;
+ this.fields = fields;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public List<Field> getFields() {
+ return fields;
+ }
+ }
+
+ public static class Field {
+
+ private final TypeNode type;
+ private final String name;
+
+ public Field(TypeNode type, String name) {
+ this.type = type;
+ this.name = name;
+ }
+
+ public TypeNode getType() {
+ return type;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldDeclaration.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldDeclaration.java
index df13db2..a0fd2ae 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldDeclaration.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldDeclaration.java
@@ -1,13 +1,31 @@
package org.apache.plc4x.codegen.ast;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
public class FieldDeclaration implements Node {
+ private final Set<Modifier> modifiers;
private final TypeNode type;
private final String name;
- public FieldDeclaration(TypeNode type, String name) {
+ private final Expression initializer;
+
+ public FieldDeclaration(Set<Modifier> modifiers, TypeNode type, String name, Expression initializer) {
+ this.modifiers = modifiers;
this.type = type;
this.name = name;
+ this.initializer = initializer;
+ }
+
+ public FieldDeclaration(TypeNode type, String name) {
+ this(Collections.emptySet(), type, name, null);
+ }
+
+ public FieldDeclaration(TypeNode type, String name, Modifier... modifiers) {
+ this(new HashSet<>(Arrays.asList(modifiers)), type, name, null);
}
@Override public <T> T accept(NodeVisitor<T> visitor) {
@@ -15,6 +33,6 @@ public class FieldDeclaration implements Node {
}
@Override public void write(Generator writer) {
- writer.generateFieldDeclaration(type, name);
+ writer.generateFieldDeclaration(modifiers, type, name, initializer);
}
}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Generator.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Generator.java
index 25a34e2..699b8c3 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Generator.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Generator.java
@@ -1,9 +1,17 @@
package org.apache.plc4x.codegen.ast;
import java.util.List;
+import java.util.Set;
public interface Generator {
+ /**
+ * Do preliminary stuff.
+ * @param root
+ * @return
+ */
+ Node prepare(Node root);
+
void generate(ConstantNode constantNode);
void generateDeclarationWithInitializer(DeclarationStatement declarationStatement);
@@ -34,11 +42,11 @@ public interface Generator {
void generateClass(String namespace, String className, List<FieldDeclaration> fields, List<ConstructorDeclaration> constructors, List<MethodDefinition> methods, List<ClassDefinition> innerClasses, boolean mainClass);
- void generateFieldDeclaration(TypeNode type, String name);
+ void generateFieldDeclaration(Set<Modifier> modifiers, TypeNode type, String name, Expression initializer);
void generateFieldReference(TypeNode type, String name);
- void generateConstructor(String className, List<ParameterExpression> parameters, Block body);
+ void generateConstructor(Set<Modifier> modifiers, String className, List<ParameterExpression> parameters, Block body);
void generateFile(ClassDefinition mainClass, List<ClassDefinition> innerClasses);
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/JavaGenerator.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/JavaGenerator.java
index 2672e81..47b8171 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/JavaGenerator.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/JavaGenerator.java
@@ -1,6 +1,7 @@
package org.apache.plc4x.codegen.ast;
import java.util.List;
+import java.util.Set;
public class JavaGenerator implements Generator {
@@ -10,6 +11,10 @@ public class JavaGenerator implements Generator {
this.writer = writer;
}
+ @Override public Node prepare(Node root) {
+ return root;
+ }
+
@Override public void generate(ConstantNode constantNode) {
writer.write(constantNode.getValue().toString());
}
@@ -122,7 +127,7 @@ public class JavaGenerator implements Generator {
@Override public void generate(MethodDefinition methodDefinition) {
writer.startLine("public ");
- if (methodDefinition.getModifiers().contains(MethodDefinition.Modifier.STATIC)) {
+ if (methodDefinition.getModifiers().contains(Modifier.STATIC)) {
writer.write("static ");
}
// Special handling of VOID is necessary
@@ -177,7 +182,7 @@ public class JavaGenerator implements Generator {
// Constructors
if (constructors != null) {
for (ConstructorDeclaration constructor : constructors) {
- this.generateConstructor(className, constructor.getParameters(), constructor.getBody());
+ this.generateConstructor(constructor.getModifiers(), className, constructor.getParameters(), constructor.getBody());
writer.writeLine("");
}
}
@@ -199,11 +204,26 @@ public class JavaGenerator implements Generator {
writer.writeLine("}");
}
- @Override public void generateFieldDeclaration(TypeNode type, String name) {
- writer.startLine("public ");
+ @Override public void generateFieldDeclaration(Set<Modifier> modifiers, TypeNode type, String name, Expression initializer) {
+ if (modifiers.contains(Modifier.PRIVATE)) {
+ writer.startLine("private ");
+ } else {
+ writer.startLine("public ");
+ }
+ if (modifiers.contains(Modifier.STATIC)) {
+ writer.write("static ");
+ }
+ if (modifiers.contains(Modifier.FINAL)) {
+ writer.write("final ");
+ }
type.write(this);
writer.write(" ");
writer.write(name);
+ // If it has an initializer, then do it here...
+ if (initializer != null) {
+ writer.write( " = ");
+ initializer.write(this);
+ }
writer.write(";");
writer.endLine();
}
@@ -213,8 +233,12 @@ public class JavaGenerator implements Generator {
writer.write(name);
}
- @Override public void generateConstructor(String className, List<ParameterExpression> parameters, Block body) {
- writer.startLine("public ");
+ @Override public void generateConstructor(Set<Modifier> modifiers, String className, List<ParameterExpression> parameters, Block body) {
+ if (modifiers.contains(Modifier.PRIVATE)) {
+ writer.startLine("private ");
+ } else {
+ writer.startLine("public ");
+ }
writer.write(className);
writer.write("(");
for (int i = 0; i < parameters.size(); i++) {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/MethodDefinition.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/MethodDefinition.java
index 76f0346..d43fd1f 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/MethodDefinition.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/MethodDefinition.java
@@ -52,9 +52,4 @@ public class MethodDefinition implements Node {
writer.generate(this);
}
- public enum Modifier {
- STATIC,
- PRIVATE
- }
-
}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Modifier.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Modifier.java
new file mode 100644
index 0000000..7d97fd0
--- /dev/null
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Modifier.java
@@ -0,0 +1,7 @@
+package org.apache.plc4x.codegen.ast;
+
+public enum Modifier {
+ STATIC,
+ PRIVATE,
+ FINAL
+}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NewExpression.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NewExpression.java
index 012e321..597ea57 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NewExpression.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NewExpression.java
@@ -7,9 +7,13 @@ public class NewExpression extends Expression {
private List<Node> arguments;
- public NewExpression(TypeNode myClazz, Node... arguments) {
+ public NewExpression(TypeNode myClazz, List<Node> arguments) {
super(myClazz);
- this.arguments = Arrays.asList(arguments);
+ this.arguments = arguments;
+ }
+
+ public NewExpression(TypeNode myClazz, Node... arguments) {
+ this(myClazz, Arrays.asList(arguments));
}
public List<Node> getArguments() {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PhpGenerator.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PhpGenerator.java
deleted file mode 100644
index f0fe64c..0000000
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PhpGenerator.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.apache.plc4x.codegen.ast;
-
-import java.util.List;
-
-public class PhpGenerator implements Generator {
-
- private final CodeWriter writer;
-
- public PhpGenerator(CodeWriter writer) {
- this.writer = writer;
- }
-
- @Override public void generate(ConstantNode constantNode) {
- this.writer.write(constantNode.getValue().toString());
- }
-
- @Override public void generateDeclarationWithInitializer(DeclarationStatement declarationStatement) {
- this.writer.startLine("");
- this.writer.write("$");
- this.writer.write(declarationStatement.getParameterExpression().getName());
- this.writer.write(" = ");
- declarationStatement.getInitializer().write(this);
- this.writer.write("\n");
- }
-
- @Override public void generateDeclaration(DeclarationStatement declarationStatement) {
-
- }
-
- @Override public void generate(ParameterExpression parameterExpression) {
- // not needed
- }
-
- @Override public void generate(Primitive primitive) {
- // Not needed, php is typeless
- }
-
- @Override public void generate(IfStatement ifStatement) {
-
- }
-
- @Override public void writeBlock(Block statements) {
-
- }
-
- @Override public void generate(BinaryExpression binaryExpression) {
-
- }
-
- @Override public void generate(AssignementExpression assignementExpression) {
-
- }
-
- @Override public void generateStaticCall(Method method, List<Node> constantNode) {
-
- }
-
- @Override public void generateCall(Node target, Method method, List<Node> constantNode) {
-
- }
-
- @Override public void generate(NewExpression newExpression) {
-
- }
-
- @Override public void generate(MethodDefinition methodDefinition) {
-
- }
-
- @Override public void generateReturn(Expression value) {
-
- }
-
- @Override public void generateClass(String namespace, String className, List<FieldDeclaration> fields, List<ConstructorDeclaration> constructors, List<MethodDefinition> methods, List<ClassDefinition> innerClasses, boolean mainClass) {
-
- }
-
- @Override public void generateFieldDeclaration(TypeNode type, String name) {
-
- }
-
- @Override public void generateFieldReference(TypeNode type, String name) {
-
- }
-
- @Override public void generateConstructor(String className, List<ParameterExpression> parameters, Block body) {
-
- }
-
- @Override public void generateFile(ClassDefinition mainClass, List<ClassDefinition> innerClasses) {
-
- }
-
- @Override public void generateType(String typeString) {
-
- }
-
- @Override public void generateComment(String comment) {
-
- }
-
- @Override public void generateNoOp() {
-
- }
-}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PojoFactory.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PojoFactory.java
index bfe345f..3f01e99 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PojoFactory.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PojoFactory.java
@@ -7,6 +7,8 @@ import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
+import static org.apache.plc4x.codegen.ast.EnumFactory.getMethodDefinition;
+
public class PojoFactory {
public ClassDefinition create(PojoDescription desc) {
@@ -17,13 +19,7 @@ public class PojoFactory {
// Create the Getters
final List<MethodDefinition> getters = desc.fields.stream()
- .map(new Function<Field, MethodDefinition>() {
- @Override public MethodDefinition apply(Field field) {
- String getter = "get" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1, field.getName().length());
- Block body = new Block(new ReturnStatement(new FieldReference(field.getType(), field.getName())));
- return new MethodDefinition(getter, field.getType(), Collections.emptyList(), body);
- }
- })
+ .map(field -> getMethodDefinition(field.getName(), field.getType()))
.collect(Collectors.toList());
final List<MethodDefinition> methods = new ArrayList<>();
@@ -35,7 +31,7 @@ public class PojoFactory {
), new Block()));
// Decode Method
- methods.add(new MethodDefinition(Collections.singleton(MethodDefinition.Modifier.STATIC), "decode", new TypeNode(desc.getName()), Collections.singletonList(
+ methods.add(new MethodDefinition(Collections.singleton(Modifier.STATIC), "decode", new TypeNode(desc.getName()), Collections.singletonList(
new ParameterExpression(new TypeNode("org.apache.plc4x.api.Buffer"), "buffer")
), new Block()));
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PythonGenerator.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PythonGenerator.java
index 5faedfb..cccaf61 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PythonGenerator.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PythonGenerator.java
@@ -1,6 +1,7 @@
package org.apache.plc4x.codegen.ast;
import java.util.List;
+import java.util.Set;
public class PythonGenerator implements Generator {
@@ -10,6 +11,10 @@ public class PythonGenerator implements Generator {
this.writer = writer;
}
+ @Override public Node prepare(Node root) {
+ return null;
+ }
+
@Override public void generate(ConstantNode constantNode) {
writer.write(constantNode.getValue().toString());
}
@@ -133,12 +138,16 @@ public class PythonGenerator implements Generator {
}
@Override public void generate(MethodDefinition methodDefinition) {
- if (methodDefinition.getModifiers().contains(MethodDefinition.Modifier.STATIC)) {
+ if (methodDefinition.getModifiers().contains(Modifier.STATIC)) {
writer.writeLine("@classmethod");
}
writer.startLine("def ");
writer.write(methodDefinition.getName());
writer.write("(");
+ writer.write("self");
+ if (!methodDefinition.getParameters().isEmpty()) {
+ writer.write(", ");
+ }
for (int i = 0; i < methodDefinition.getParameters().size(); i++) {
methodDefinition.getParameters().get(i).write(this);
writer.write(": ");
@@ -190,7 +199,7 @@ public class PythonGenerator implements Generator {
// Constructors
if (constructors != null) {
for (ConstructorDeclaration constructor : constructors) {
- this.generateConstructor(className, constructor.getParameters(), constructor.getBody());
+ this.generateConstructor(constructor.getModifiers(), className, constructor.getParameters(), constructor.getBody());
writer.writeLine("");
}
}
@@ -211,11 +220,18 @@ public class PythonGenerator implements Generator {
writer.endBlock();
}
- @Override public void generateFieldDeclaration(TypeNode type, String name) {
- writer.startLine("self.");
+ @Override public void generateFieldDeclaration(Set<Modifier> modifiers, TypeNode type, String name, Expression initializer) {
+ writer.startLine("");
writer.write(name);
writer.write(": ");
type.write(this);
+ // If its static, assign here
+ if (initializer != null) {
+ assert modifiers.contains(Modifier.STATIC);
+ // TODO Python cannot self reference
+ writer.write(" = ");
+ initializer.write(this);
+ }
writer.endLine();
}
@@ -224,7 +240,7 @@ public class PythonGenerator implements Generator {
writer.write(name);
}
- @Override public void generateConstructor(String className, List<ParameterExpression> parameters, Block body) {
+ @Override public void generateConstructor(Set<Modifier> modifiers, String className, List<ParameterExpression> parameters, Block body) {
writer.startLine("def __init__(");
for (int i = 0; i < parameters.size(); i++) {
parameters.get(i).getType().write(this);
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/EnumFactoryTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/EnumFactoryTest.java
new file mode 100644
index 0000000..df43cd7
--- /dev/null
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/EnumFactoryTest.java
@@ -0,0 +1,70 @@
+package org.apache.plc4x.codegen.ast;
+
+import org.junit.Test;
+
+import java.util.Arrays;
+
+public class EnumFactoryTest {
+
+ @Test
+ public void createEnums() {
+ System.out.println("Java:");
+ System.out.println("----------");
+ final ClassDefinition MyEnum = newEnum();
+
+ final CodeWriter writer = new CodeWriter(4);
+ final JavaGenerator generator = new JavaGenerator(writer);
+
+ MyEnum.write(generator);
+
+ System.out.println(writer.getCode());
+ }
+
+ @Test
+ public void createEnumsInPython() {
+ System.out.println("Python:");
+ System.out.println("----------");
+ final ClassDefinition MyEnum = newEnum();
+
+ final CodeWriter writer = new CodeWriter(4);
+ final PythonGenerator generator = new PythonGenerator(writer);
+
+ MyEnum.write(generator);
+
+ System.out.println(writer.getCode());
+ }
+
+ private ClassDefinition newEnum() {
+ final EnumFactory factory = new EnumFactory();
+ final EnumFactory.PojoDescription description = new EnumFactory.PojoDescription("MyPojo",
+ new EnumFactory.Field(Primitive.DOUBLE, "field1"),
+ new EnumFactory.Field(Primitive.DOUBLE, "field2"),
+ new EnumFactory.Field(Primitive.DOUBLE, "field3")
+ );
+ return factory.create(description,
+ Arrays.asList(
+ new EnumFactory.EnumEntry("alternative1", Arrays.asList(
+ new ConstantNode(1.0),
+ new ConstantNode(2.0),
+ new ConstantNode(3.0)
+ )),
+ new EnumFactory.EnumEntry("alternative2", Arrays.asList(
+ new ConstantNode(1.0),
+ new ConstantNode(2.0),
+ new ConstantNode(3.0)
+ )),
+ new EnumFactory.EnumEntry("alternative3", Arrays.asList(
+ new ConstantNode(1.0),
+ new ConstantNode(2.0),
+ new ConstantNode(3.0)
+ )),
+ new EnumFactory.EnumEntry("alternative4", Arrays.asList(
+ new ConstantNode(1.0),
+ new ConstantNode(2.0),
+ new ConstantNode(3.0)
+ ))
+ )
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PhpGeneratorTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PhpGeneratorTest.java
deleted file mode 100644
index f5ba88f..0000000
--- a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PhpGeneratorTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.plc4x.codegen.ast;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class PhpGeneratorTest {
-
- @Test
- public void createSomeCode() {
- final CodeWriter writer = new CodeWriter(4);
-
- final DeclarationStatement stmt = new DeclarationStatement(new ParameterExpression(Primitive.DOUBLE, "a"), new ConstantNode(5.0));
-
- final Generator generator = new PhpGenerator(writer);
-
- stmt.write(generator);
-
- final String code = writer.getCode();
-
- assertEquals("$a = 5.0\n", code);
- }
-}
\ No newline at end of file