package io.vertx.codegen.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Declares a <i>Codegen</i> module, all the processed elements contained in the annotated package * or one of its child package will be part of the same module. The identity of the module plays an * important role as it can be used by a runtime to load a module.<p/> * * The {@link #name()} declares the name of the module: a non hierarchical name. Such name is used by * the JavaScript or Ruby language to generate modules for their runtime. The Java or Groovy runtime do * not use this info.<p/> * * The {@link #groupPackage()} declares the group name of the module: the package of the group used * for generating the generated package names (for <i>Groovy</i> or <i>RxJava</i> generation).<p/> * * <code> * {@literal @ModuleGen}(name = "acme", groupPackage="com.acme") * package com.acme.myservice; * </code> * * The group package must be a prefix of the annotated module package, it defines the naming of the generate * packages for the modules that belongs to the same group, in this case:<p/> * * <ul> * <li>{@code com.acme.groovy...} for Groovy API</li> * <li>{@code com.acme.rxjava...} for RxJava API</li> * </ul> * <p/> * * For this particular `com.acme.myservice` module we have:<p/> * * <ul> * <li>{@code com.acme.groovy.myservice} for Groovy API</li> * <li>{@code com.acme.rxjava.myservice} for RxJava API</li> * </ul> * * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PACKAGE) public @interface ModuleGen { /** * @return the module name */ String name(); /** * @return the module group package */ String groupPackage(); }