aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java
blob: 60ebd3d13d197b9ebf84fa805517d7c0fe8ddcae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.github.javaparser.generator;

import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations;
import com.github.javaparser.utils.SourceRoot;

import javax.annotation.Generated;

import static com.github.javaparser.ast.NodeList.toNodeList;
import static com.github.javaparser.utils.CodeGenerationUtils.f;

/**
 * A general pattern that the generators in this module will follow.
 */
public abstract class Generator {
    protected final SourceRoot sourceRoot;

    protected Generator(SourceRoot sourceRoot) {
        this.sourceRoot = sourceRoot;
    }

    public abstract void generate() throws Exception;

    protected <T extends Node & NodeWithAnnotations<T>> void markGenerated(T node) {
        node.setAnnotations(
                node.getAnnotations().stream()
                        .filter(a -> !a.getNameAsString().equals("Generated"))
                        .collect(toNodeList()));
        node.addSingleMemberAnnotation(Generated.class, f("\"%s\"", getClass().getName()));
        node.tryAddImportToParentCompilationUnit(Generated.class);
    }
}