<dependency>
<groupId>org.ow2.util</groupId>
<artifactId>ow2-utilities-annotations</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface GenerateAccessors {
}
public class AccessorsProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : roundEnv.getElementsAnnotatedWith(GenerateAccessors.class)) {
String getter = "public " + element.asType().toString() + " get" + capitalize(element.getSimpleName().toString()) + "() { return " + element.getSimpleName().toString() + "; }";
String setter = "public void set" + capitalize(element.getSimpleName().toString()) + "(" + element.asType().toString() + " " + element.getSimpleName().toString() + ") { this." + element.getSimpleName().toString() + " = " + element.getSimpleName().toString() + "; }";
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, getter);
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, setter);
}
return true;
}
private String capitalize(String str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
@Override
public Set<String> getSupportedAnnotationTypes() {
return Set.of(GenerateAccessors.class.getName());
}
}
<build>
<plugins>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
</execution>
</executions>
<configuration>
<processors>
<processor>com.example.AccessorsProcessor</processor>
</processors>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.util</groupId>
<artifactId>ow2-utilities-annotations</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
public class MyClass {
@GenerateAccessors
private String name;
// ...
}