Home | History | Annotate | Download | only in generator
      1 package com.github.javaparser.generator;
      2 
      3 import com.github.javaparser.ast.CompilationUnit;
      4 import com.github.javaparser.ast.body.CallableDeclaration;
      5 import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
      6 import com.github.javaparser.metamodel.BaseNodeMetaModel;
      7 import com.github.javaparser.metamodel.JavaParserMetaModel;
      8 import com.github.javaparser.utils.Log;
      9 import com.github.javaparser.utils.Pair;
     10 import com.github.javaparser.utils.SourceRoot;
     11 
     12 import java.io.IOException;
     13 import java.util.List;
     14 
     15 import static com.github.javaparser.utils.CodeGenerationUtils.f;
     16 
     17 /**
     18  * Makes it easier to generate code in the core AST nodes. The generateNode method will get every node type passed to
     19  * it, ready for modification.
     20  */
     21 public abstract class NodeGenerator extends Generator {
     22     protected NodeGenerator(SourceRoot sourceRoot) {
     23         super(sourceRoot);
     24     }
     25 
     26     public final void generate() throws Exception {
     27         Log.info("Running %s", getClass().getSimpleName());
     28         for (BaseNodeMetaModel nodeMetaModel : JavaParserMetaModel.getNodeMetaModels()) {
     29             Pair<CompilationUnit, ClassOrInterfaceDeclaration> result = parseNode(nodeMetaModel);
     30             generateNode(nodeMetaModel, result.a, result.b);
     31         }
     32         after();
     33     }
     34 
     35     protected Pair<CompilationUnit, ClassOrInterfaceDeclaration> parseNode(BaseNodeMetaModel nodeMetaModel) {
     36         CompilationUnit nodeCu = sourceRoot.parse(nodeMetaModel.getPackageName(), nodeMetaModel.getTypeName() + ".java");
     37         ClassOrInterfaceDeclaration nodeCoid = nodeCu.getClassByName(nodeMetaModel.getTypeName()).orElseThrow(() -> new AssertionError("Can't find class"));
     38         return new Pair<>(nodeCu, nodeCoid);
     39     }
     40 
     41     protected void after() throws Exception {
     42 
     43     }
     44 
     45     protected abstract void generateNode(BaseNodeMetaModel nodeMetaModel, CompilationUnit nodeCu, ClassOrInterfaceDeclaration nodeCoid) throws Exception;
     46 }
     47