A mágica do Lombok
Recentemente conheci o projeto Lombok através do Agnaldo. Fiquei impressionado com a mágica apresentada no screencast e confesso que estava meio cético de que aquilo realmente seria possível.
Basicamente, através de anotações o Lombok é capaz de gerar automaticamente código na classe compilada e mantendo o código original limpo.
Por exemplo, dada a classe:
import lombok.Data;
@Data
public class Bean {
private String string;
}
Através da annotação @Data, o Lombok gera os métodos:
1. Get e Set para variável de instância string;
2. O método toString;
3. O método equals;
4. O construtor público sem parâmetros.
O seu código original se mantém limpo, sem o overhead de código que diminui a legibilidade.
Baixei os fontes do projeto para entender como a mágica é feita e vi que existem duas abordagens:
1. Através da API de processamento de anotações do Java 6 e de várias dependências de classes do compilador da Sun, ele manipula o código em tempo de compilação;
2. Através do plugin do eclipse distribuído pelo projeto, é utilizado o componente JDT, que é responsável por realizar a compilação incremental do Eclipse, para manipular o código também em tempo de compilação.
No código fonte que baixei não encontrei a integração com o Netbeans, porém creio que deva seguir a mesma abordagem utilizada para o Eclipse.
Este mecanismo para manipular o código abre um leque de possibilidades, principalmente para reduzir o overhead de código necessário pela tipagem estática do java.
Estou pesquisando a possibilidade de utilizar este mecanismo para gerar métodos estáticos nas classes de entidade como “todos”, “findByXAndY”, etc…
import lombok.NonNull;
@Data
public class Bean {
private String classSpec;
private String methodName;
private String methodDescriptor;
}
O Sr. está querendo fazer o Ruby no Java.
Acha bom ou ruim?