package io.vertx.codegen;
import javax.annotation.processing.ProcessingEnvironment;
import java.lang.annotation.Annotation;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
A generator for a Model
. Author: Julien Viet Type parameters: - <M> – the model
/**
* A generator for a {@link Model}.
*
* @param <M> the model
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public abstract class Generator<M extends Model> {
public ProcessingEnvironment env;
public String name;
public Set<String> kinds;
public boolean incremental;
public Collection<Class<? extends Annotation>> annotations() {
return Collections.emptySet();
}
public void load(ProcessingEnvironment processingEnv) {
env = processingEnv;
}
Generate the file name for the model
.
When the returned value
- is
null
, no file is created
- does not contain
/
and ends with .java
, the file is created as a source file by the annotation processor and the class will be compiled by the current compilation process
- starts with the
resources/
prefix, the file is created as a resource file by the annotation processor using the remaining suffix value and the file will likely end in the classes directory
- otherwise the resource will be created as a file on the filesystem, a value not starting with
/
is created relative to the codegen.output
directory
Params: - model – the model
Returns: the filename or null
if no generation should happen
/**
* Generate the file name for the {@code model}.
* <p/>
* When the returned value
* <ul>
* <li>is {@code null}, no file is created</li>
* <li>does not contain {@code /} and ends with {@code .java}, the file is created as a source file by the annotation processor
* and the class will be compiled by the current compilation process</li>
* <li>starts with the {@code resources/} prefix, the file is created as a resource file by the annotation processor using the
* remaining suffix value and the file will likely end in the classes directory</li>
* <li>otherwise the resource will be created as a file on the filesystem, a value not starting with
* {@code /} is created relative to the {@code codegen.output} directory</li>
* </ul>
*
* @param model the model
* @return the filename or {@code null} if no generation should happen
*/
public String filename(M model) {
return null;
}
Render the model
Params: - model – the model
- index – the index for an incremental generator
- size – the number of models for an incremental generator
- session – the session
Returns: the rendered string or null
/**
* Render the model
*
* @param model the model
* @param index the index for an incremental generator
* @param size the number of models for an incremental generator
* @param session the session
* @return the rendered string or {@code null}
*/
public String render(M model, int index, int size, Map<String, Object> session) {
return null;
}
}