Generando equals / hashcode / toString usando anotación

Creo que leí en algún lugar que la gente genera métodos equals / hashcode / toString durante el tiempo de compilación (usando APT) al identificar qué campos deberían ser parte de la prueba hash / igualdad. No pude encontrar algo así en la web (¿podría haberlo soñado?) ...

Eso podría hacerse así:

public class Person {
  @Id @GeneratedValue private Integer id;

  @Identity private String firstName, lastName;
  @Identity private Date dateOfBirth;

  //...
}

Para una entidad (por lo que queremos excluir algunos campos, como el id).

O como una clase de caso scala, es decir, un objeto de valor:

@ValueObject
public class Color {
  private int red, green, blue;
}

No solo el archivo se vuelve más legible y más fácil de escribir, sino que también ayuda a garantizar que todos los atributos formen parte del código igual / hash (en caso de que agregue otro atributo más adelante, sin actualizar los métodos en consecuencia).

Escuché que APT no es muy compatible con IDE, pero no lo vería como un problema importante. Después de todo, las pruebas son ejecutadas principalmente por servidores de integración continua.

¿Alguna idea de si esto ya se ha hecho y si no, por qué? Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta