diff options
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.java | 46 |
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; +} |