// Path: asteroid-core/src/main/java/asteroid/A.java
// @SuppressWarnings("PMD.ShortClassName")
// public final class A {
// 
//     /**
//      * Entry point to get node builders.
//      *
//      * @since 0.1.0
//      */
//     public static final Nodes NODES = new Nodes();
// 
//     /**
//      * Entry point to access language modifiers
//      *
//      * @since 0.1.0
//      */
//     public static final Modifiers ACC = new Modifiers();
// 
//     /**
//      * Entry point to create statements.
//      *
//      * @since 0.1.0
//      */
//     public static final Statements STMT = new Statements();
// 
//     /**
//      * Entry point to create expressions
//      *
//      * @since 0.1.0
//      */
//     public static final Expressions EXPR = new Expressions();
// 
//     /**
//      * Entry point to get util functions
//      *
//      * @since 0.1.0
//      */
//     public static final Utils UTIL = new Utils();
// 
//     /**
//      * Entry point to get criterias
//      *
//      * @since 0.2.4
//      */
//     public static final Criterias CRITERIA = new Criterias();
// }


import asteroid.A;
import org.codehaus.groovy.ast.AnnotationNode;
import org.codehaus.groovy.ast.expr.Expression;
package asteroid.nodes;


/**
 * Builder to create instances of type {@link AnnotationNode}
 *
 * @since 0.1.0
 */
final public class AnnotationNodeBuilder {

    private final AnnotationNode annotationNode;

    private AnnotationNodeBuilder(final AnnotationNode annotationNode) {
        this.annotationNode = annotationNode;
    }

    /**
     * Creates an instance of {@link AnnotationNodeBuilder}
     * <br><br>
     *
     * <strong>AST</strong>
     * <pre><code>annotation(MyAnnotation.class).build()</code></pre>
     *
     * <strong>Result</strong>
     * <pre><code>@MyAnnotation</code></pre>
     *
     * @param clazz the annotation type
     * @return an instance of {@link AnnotationNodeBuilder}
     */
    public static AnnotationNodeBuilder annotation(final Class clazz) {
// Path: asteroid-core/src/main/java/asteroid/A.java
// @SuppressWarnings("PMD.ShortClassName")
// public final class A {
// 
//     /**
//      * Entry point to get node builders.
//      *
//      * @since 0.1.0
//      */
//     public static final Nodes NODES = new Nodes();
// 
//     /**
//      * Entry point to access language modifiers
//      *
//      * @since 0.1.0
//      */
//     public static final Modifiers ACC = new Modifiers();
// 
//     /**
//      * Entry point to create statements.
//      *
//      * @since 0.1.0
//      */
//     public static final Statements STMT = new Statements();
// 
//     /**
//      * Entry point to create expressions
//      *
//      * @since 0.1.0
//      */
//     public static final Expressions EXPR = new Expressions();
// 
//     /**
//      * Entry point to get util functions
//      *
//      * @since 0.1.0
//      */
//     public static final Utils UTIL = new Utils();
// 
//     /**
//      * Entry point to get criterias
//      *
//      * @since 0.2.4
//      */
//     public static final Criterias CRITERIA = new Criterias();
// }


// Path: asteroid-core/src/main/java/asteroid/nodes/AnnotationNodeBuilder.java
import asteroid.A;
import org.codehaus.groovy.ast.AnnotationNode;
import org.codehaus.groovy.ast.expr.Expression;

package asteroid.nodes;


/**
 * Builder to create instances of type {@link AnnotationNode}
 *
 * @since 0.1.0
 */
final public class AnnotationNodeBuilder {

    private final AnnotationNode annotationNode;

    private AnnotationNodeBuilder(final AnnotationNode annotationNode) {
        this.annotationNode = annotationNode;
    }

    /**
     * Creates an instance of {@link AnnotationNodeBuilder}
     * <br><br>
     *
     * <strong>AST</strong>
     * <pre><code>annotation(MyAnnotation.class).build()</code></pre>
     *
     * <strong>Result</strong>
     * <pre><code>@MyAnnotation</code></pre>
     *
     * @param clazz the annotation type
     * @return an instance of {@link AnnotationNodeBuilder}
     */
    public static AnnotationNodeBuilder annotation(final Class clazz) {
        return new AnnotationNodeBuilder(new AnnotationNode(A.NODES.clazz(clazz).build()));