API para interpretar/analisar código Java em String

4 respostas
A

Olá pessoal,

venho aqui hoje em busca de uma API que gere informação sobre um código Java que esteja dentro de uma variável String.

Ex: Tenho essa variável:String codigo = "double numero = 0.0; int teste = 0; System.out.println(teste);" ;Ou seja, tenho um código Java dentro de uma String de texto, mas quero obter informações sobre esse código como, por exemplo, o nome de todas as variáveis do código (neste caso: numero e teste), o nome dos métodos, os tipos dos mesmos e o que mais for possível.

Sei que criar uma classe que faça isso não é tão difícil, mas sabe como é, ficar reinventando rodas é a última coisa que eu quero! :smiley:

Andei pesquisando e encontrei várias APIs, mas todas usam reflection, e para isso é preciso compilar o código, e isso não é legal (no meu caso).

Se alguém puder me ajudar com alguma dica, vai ajudar bastante.

vlw galera
muito obrigado!

4 Respostas

ViniGodoy

Isso não tem nada de fácil. Acho que o jeito mais fácil de tratar, se você realmente quiser analisar vários elementos desse código java, é através do AntLR. Deve ser possível baixar a gramática do Java já pronta de algum lugar.

benflodin

Da uma olhada no projeto beanshell, se voce for criativo da pra fazer um hackzinho bem interessante.

davidbuzatto

O Vinícius sugeriu o ANTLR, mas a gramática e o parser são os menores dos seus problemas :smiley: A gramática do Java 6 pode ser obtida no próprio site do ANTLR.
Se o código a ser analisado não for ser muito complexo, não é muito difícil gerar o parser e inserir ações que devem ser tomadas ao reconhecer um determinado token, entretanto, se o seu código for totalmente arbitrário, ai fica bem complicado.

Qualquer código que seja sintaticamente correto ao compilador Java, ou seja, um código Java qualquer pode ser gerado ou você tem um “limite” para a variedade de código?

[]´s

benflodin

na moral usa beanshell nao tenta ser super heroi, hack da norte pra vida.

Criado 18 de dezembro de 2010
Ultima resposta 19 de dez. de 2010
Respostas 4
Participantes 4