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 14:44:14 UTC
[plc4x] branch feature/code-gen updated: Some Documentation...
adding Facade 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
The following commit(s) were added to refs/heads/feature/code-gen by this push:
new 1df8c8d Some Documentation... adding Facade Factory.
1df8c8d is described below
commit 1df8c8dfc7d9c2357ed68aee08b5f0d7f9b818b8
Author: Julian Feinauer <j....@pragmaticminds.de>
AuthorDate: Sun May 5 16:42:53 2019 +0200
Some Documentation... adding Facade Factory.
---
.../org/apache/plc4x/codegen/ast/Expressions.java | 87 ++++++++++++++++++++++
.../org/apache/plc4x/codegen/ast/Generator.java | 2 +-
.../apache/plc4x/codegen/ast/JavaGenerator.java | 45 ++++++++---
.../java/org/apache/plc4x/codegen/ast/Method.java | 2 +
.../org/apache/plc4x/codegen/ast/Primitive.java | 32 ++++++--
.../apache/plc4x/codegen/ast/PythonGenerator.java | 2 +-
.../plc4x/codegen/{ast => util}/EnumFactory.java | 0
.../plc4x/codegen/{ast => util}/PojoFactory.java | 0
.../apache/plc4x/codegen/ast/EnumFactoryTest.java | 1 +
.../apache/plc4x/codegen/ast/PojoFactoryTest.java | 1 +
10 files changed, 153 insertions(+), 19 deletions(-)
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Expressions.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Expressions.java
new file mode 100644
index 0000000..728021a
--- /dev/null
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Expressions.java
@@ -0,0 +1,87 @@
+package org.apache.plc4x.codegen.ast;
+
+/**
+ * General Factory method to use.
+ */
+public class Expressions {
+
+ /**
+ * Assign a value to a target (field or parameter)
+ * @param target Where the value is assigned
+ * @param value What to assign
+ * @return Assignment Expression
+ */
+ public static Expression assignment(Expression target, Node value) {
+ return new AssignementExpression(target, value);
+ }
+
+ /**
+ * Base for all Binary Expression, i.e., Expressions which take
+ * two inputs and return one Output.
+ * Examples are Comparators, Math, ... .
+ * @param type Type of the returned expression
+ * @param left
+ * @param right
+ * @param op
+ * @return
+ */
+ public static Expression binaryExpression(TypeNode type, Node left, Node right, Operation op) {
+ return new BinaryExpression(type, left, right, op);
+ }
+
+ /**
+ * A Block of code.
+ * @param statements
+ * @return
+ */
+ public static Statement block(List<Node> statements) {
+ return new Block(statements);
+ }
+
+ /**
+ * A block of code.
+ * @param statements
+ * @return
+ */
+ public static Statement block(Node... statements) {
+ return new Block(statements);
+ }
+
+ /**
+ * Regular (dynamic) call.
+ * @param instance
+ * @param method
+ * @param arguments
+ */
+ public static Expression call(Node instance, Method method, Arguments... arguments) {
+ return new CallExpression(method, target, arguments);
+ }
+
+ /**
+ * Static call (call to a static method)
+ *
+ * TODO check if Method is static
+ *
+ * @param method
+ * @param arguments
+ */
+ public static Expression staticCall(Method method, Arguments... arguments) {
+ return new CallExpression(method, null, arguments);
+ }
+
+ /**
+ * Conditional Statement of the form
+ * <code>
+ * if (cond1) {
+ * ...
+ * } else if (cond2) {
+ * ...
+ * } else {
+ * ...
+ * }
+ * </code>
+ */
+ public static Statement conditionalStatement(List<Expression> condition, List<Block> blocks) {
+ return new IfStatement(condition, blocks);
+ }
+}
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 3e3d323..6179060 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
@@ -38,7 +38,7 @@ public interface Generator {
void generate(ParameterExpression parameterExpression);
- void generate(Primitive primitive);
+ void generatePrimitive(Primitive.DataType primitive);
void generate(IfStatement ifStatement);
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 bfaebb1..d9a14c9 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
@@ -23,6 +23,8 @@ import java.util.Set;
public class JavaGenerator implements Generator {
+ public static final String PUBLIC_ = "public ";
+ public static final String STATIC_ = "static ";
private final CodeWriter writer;
public JavaGenerator(CodeWriter writer) {
@@ -55,8 +57,29 @@ public class JavaGenerator implements Generator {
writer.write(parameterExpression.getName());
}
- @Override public void generate(Primitive primitive) {
- writer.write(primitive.getTypeString());
+ @Override public void generatePrimitive(Primitive.DataType primitive) {
+ switch (primitive) {
+ case STRING:
+ writer.write("String");
+ break;
+ case DOUBLE:
+ writer.write("Double");
+ break;
+ case LONG:
+ writer.write("Long");
+ break;
+ case INTEGER:
+ writer.write("Integer");
+ break;
+ case BOOLEAN:
+ writer.write("Boolean");
+ break;
+ case VOID:
+ writer.write("Void");
+ break;
+ default:
+ throw new UnsupportedOperationException("The primitive type " + primitive + " is not implemented!");
+ }
}
@Override public void generate(IfStatement ifStatement) {
@@ -144,12 +167,12 @@ public class JavaGenerator implements Generator {
}
@Override public void generate(MethodDefinition methodDefinition) {
- writer.startLine("public ");
+ writer.startLine(PUBLIC_);
if (methodDefinition.getModifiers().contains(Modifier.STATIC)) {
- writer.write("static ");
+ writer.write(STATIC_);
}
- // Special handling of VOID is necessary
- if (methodDefinition.getResultType() == Primitive.VOID) {
+ // Special handling of VOID is necessary, in fact... is it?
+ if ("Void".equals(methodDefinition.getResultType().toString())) {
writer.write("void");
} else {
methodDefinition.getResultType().write(this);
@@ -179,9 +202,9 @@ public class JavaGenerator implements Generator {
@Override public void generateClass(String namespace, String className, List<FieldDeclaration> fields, List<ConstructorDeclaration> constructors, List<MethodDefinition> methods, List<ClassDefinition> innerClasses, boolean mainClass) {
// Add static?!
// Own File?
- writer.startLine("public ");
+ writer.startLine(PUBLIC_);
if (!mainClass) {
- writer.write("static ");
+ writer.write(STATIC_);
}
writer.write("class ");
writer.write(className);
@@ -226,10 +249,10 @@ public class JavaGenerator implements Generator {
if (modifiers.contains(Modifier.PRIVATE)) {
writer.startLine("private ");
} else {
- writer.startLine("public ");
+ writer.startLine(PUBLIC_);
}
if (modifiers.contains(Modifier.STATIC)) {
- writer.write("static ");
+ writer.write(STATIC_);
}
if (modifiers.contains(Modifier.FINAL)) {
writer.write("final ");
@@ -255,7 +278,7 @@ public class JavaGenerator implements Generator {
if (modifiers.contains(Modifier.PRIVATE)) {
writer.startLine("private ");
} else {
- writer.startLine("public ");
+ writer.startLine(PUBLIC_);
}
writer.write(className);
writer.write("(");
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Method.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Method.java
index a3698d6..89b5491 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Method.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Method.java
@@ -22,6 +22,8 @@ import java.util.List;
/**
* Method Declaration
+ *
+ * TODO is this duplicate to something???
*/
public class Method implements Node {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Primitive.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Primitive.java
index fcdd625..61e7ce3 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Primitive.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Primitive.java
@@ -20,12 +20,23 @@ package org.apache.plc4x.codegen.ast;
public class Primitive extends TypeNode {
- public static final TypeNode DOUBLE = new Primitive("double");
- public static final TypeNode VOID = new Primitive("Void");
- public static final TypeNode BYTE = new Primitive("byte");
+ // Shorthands
+ public static final Primitive VOID = new Primitive(DataType.VOID);
+ public static final Primitive BOOLEAN = new Primitive(DataType.BOOLEAN);
+ public static final Primitive INTEGER = new Primitive(DataType.INTEGER);
+ public static final Primitive LONG = new Primitive(DataType.LONG);
+ public static final Primitive DOUBLE = new Primitive(DataType.DOUBLE);
+ public static final Primitive STRING = new Primitive(DataType.STRING);
- public Primitive(String typeString) {
- super(typeString);
+ private final DataType type;
+
+ public Primitive(DataType dataType) {
+ super(dataType.toString());
+ this.type = dataType;
+ }
+
+ public DataType getType() {
+ return type;
}
@Override public <T> T accept(NodeVisitor<T> visitor) {
@@ -33,6 +44,15 @@ public class Primitive extends TypeNode {
}
@Override public void write(Generator generator) {
- generator.generate(this);
+ generator.generatePrimitive(this.getType());
+ }
+
+ public enum DataType {
+ VOID,
+ BOOLEAN,
+ INTEGER,
+ LONG,
+ DOUBLE,
+ STRING
}
}
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 d39a12c..31087b5 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
@@ -56,7 +56,7 @@ public class PythonGenerator implements Generator {
writer.write(parameterExpression.getName());
}
- @Override public void generate(Primitive primitive) {
+ @Override public void generatePrimitive(Primitive.DataType primitive) {
writer.write(primitive.getTypeString());
}
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/util/EnumFactory.java
similarity index 100%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/EnumFactory.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/util/EnumFactory.java
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/util/PojoFactory.java
similarity index 100%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PojoFactory.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/util/PojoFactory.java
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
index 22fdfff..798de27 100644
--- 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
@@ -18,6 +18,7 @@ under the License.
*/
package org.apache.plc4x.codegen.ast;
+import org.apache.plc4x.codegen.util.EnumFactory;
import org.junit.Test;
import java.util.Arrays;
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PojoFactoryTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PojoFactoryTest.java
index 23af1a8..2035b77 100644
--- a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PojoFactoryTest.java
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PojoFactoryTest.java
@@ -18,6 +18,7 @@ under the License.
*/
package org.apache.plc4x.codegen.ast;
+import org.apache.plc4x.codegen.util.PojoFactory;
import org.junit.Test;
public class PojoFactoryTest {