Comecei em java estudando sozinho há quase 2 anos, em agosto de 2023. Já desenvolvi um sistema de gestão administrativa usando somente java, sem techs externas.
Com o passar do tempo, fiquei entediado de como o java funcionava e decidi partir pro bytecode. O que me impulsionou foi quando eu comecei a desenvolver pra android e percebi que, quando compilamos nosso código, é criada uma classe estática R, da qual podemos acessar todos os recursos que definimos no diretório de recursos "res".
Vi isso como um grande empecilho e facilidade! Mas IDEs como o eclipse (a que eu utilizo), não fornece meios, nem mesmo por plugins, de mapear esses recursos (no caso properties, vocês vão entender o porquê mais pra frente) para uso no desenvolvimento.
Aliei essa minha nova idéia com meu cansaço de ficar só na surface do Java e decidi explorar o submundo da JVM e criar um framework. Estudei e continuo estudando o JVMS diariamente. É bem extenso, mas interessante.
Também busquei utilizar a nova API classfile do java nessa minha empreitada.
Qual a minha solução? Permitir que o dev use arquivos de propriedades pra armazenar dados de strings ou outras coisas utilizáveis na aplicação dele, e utilizar o framework que estou desenvolvendo pra mapear e gerar uma classe estática chamada P, com cada classe interna estática sendo mapeada para um arquivo de propriedade e seus campos públicos estáticos e finais sendo os pares chave-valor do arquivo de propriedades mapeado. O framework funciona gerenciando um sistema de cache em json + análise contínua de diretórios contendo arquivos de propriedades especificados pelo dev utilizando uma implementação da WatchService API + compilação incremental em tempo de execução.
O bytecode, o código fonte e o cache sao sincronizados com os arquivos de propriedades mapeados pelo dev no framework. Tenho uma versão inicial e funcional dele, mas nao implementa todos os recursos finais.
Escolhi o arquivo Properties por ser um arquivo bem simples de se manter e de se organizar, diferentemente de um XML, JSON, CSV...
Tá sendo uma baita experiência 😃, e eu tô pensando em, no futuro, contribuir mais com mais soluções desse tipo que eu vejo que é bastante necessária.
Não uso a biblioteca da ASM pois a minha proposta é fazer algo mais próximo do nativo o possível, mantendo a máxima compatibilidade com versões futuras da JVM sem quebras e sem possíveis problemas com bibliotecas desatualizadas.
Eu gosto muito do baixo nível e achei que o java tinha um pouco disso quando comecei estudar ele há 2 anos atrás. Vi que não era bem assim, que ele era lotado de abstracionismo e simplicidades, entao resolvi ir, por fim, por esse caminho não convencional: o de criar ferramentas produtivas para devs desenvolverem melhor e com mais organização seus sistemas ❤️