aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java')
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java
new file mode 100644
index 000000000..18ab60d99
--- /dev/null
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java
@@ -0,0 +1,46 @@
+package com.github.javaparser.generator;
+
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.body.CallableDeclaration;
+import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
+import com.github.javaparser.metamodel.BaseNodeMetaModel;
+import com.github.javaparser.metamodel.JavaParserMetaModel;
+import com.github.javaparser.utils.Log;
+import com.github.javaparser.utils.Pair;
+import com.github.javaparser.utils.SourceRoot;
+
+import java.io.IOException;
+import java.util.List;
+
+import static com.github.javaparser.utils.CodeGenerationUtils.f;
+
+/**
+ * Makes it easier to generate code in the core AST nodes. The generateNode method will get every node type passed to
+ * it, ready for modification.
+ */
+public abstract class NodeGenerator extends Generator {
+ protected NodeGenerator(SourceRoot sourceRoot) {
+ super(sourceRoot);
+ }
+
+ public final void generate() throws Exception {
+ Log.info("Running %s", getClass().getSimpleName());
+ for (BaseNodeMetaModel nodeMetaModel : JavaParserMetaModel.getNodeMetaModels()) {
+ Pair<CompilationUnit, ClassOrInterfaceDeclaration> result = parseNode(nodeMetaModel);
+ generateNode(nodeMetaModel, result.a, result.b);
+ }
+ after();
+ }
+
+ protected Pair<CompilationUnit, ClassOrInterfaceDeclaration> parseNode(BaseNodeMetaModel nodeMetaModel) {
+ CompilationUnit nodeCu = sourceRoot.parse(nodeMetaModel.getPackageName(), nodeMetaModel.getTypeName() + ".java");
+ ClassOrInterfaceDeclaration nodeCoid = nodeCu.getClassByName(nodeMetaModel.getTypeName()).orElseThrow(() -> new AssertionError("Can't find class"));
+ return new Pair<>(nodeCu, nodeCoid);
+ }
+
+ protected void after() throws Exception {
+
+ }
+
+ protected abstract void generateNode(BaseNodeMetaModel nodeMetaModel, CompilationUnit nodeCu, ClassOrInterfaceDeclaration nodeCoid) throws Exception;
+}