API para obter assinatura de métodos e dados de classes
13 respostas
dyego.mota
Olá Pessoal,
preciso encontrar uma API que me dê a assinatura do método (consequentemente o tipo e parâmetros do mesmo), bem como as classes do projeto e seus atributos.
Alguém sabe me indicar alguma?
Utilizo o eclipse e os projetos são em java.
Estou fuçando no google a dias e não encontro a maldita!
Existe algo chamado reflection.
Por que não estuda isto?
P
pbnf
No próprio java desde a versão 1.5 existe o recurso “Reflection” e isso vai resolver tudo isso que vc precisa.
dyego.mota
Então, pelo que sei Reflection é uma maneira de se descobrir dados de uma classe/objeto/interface em tempo de execução, certo?
No meu caso é uma análise estática, ou seja, não executar o projeto, apenas analisa-lo.
ex:
Vou carregar um projeto que nunca vi na vida e preciso obter informações sobre as classes e métodos do mesmo.
Em um programa simples é trivial, mas em um programa robusto gera um trabalho considerável, além disso vou utilizar esta informação para trabalhar em um plugin para o eclipse.
PS: Se vc tivesse colocado “resolvido” no tópico eu não teria entrado aqui atoa.
Já que estou aqui, Mirror da Caelum
Abraços,
sucesso
E
entanglement
Se você precisa criar uma rotina que determina a árvore de chamadas de uma classe Java (“call tree”), é necessário usar uma biblioteca como o ASM ( http://asm.ow2.org/ ).
no link, a descrição do método fragments() é: “public List fragments()
Returns the live list of variable declaration fragments in this field declaration. Adding and removing nodes from this list affects this node dynamically. All nodes in this list must be VariableDeclarationFragments; attempts to add any other type of node will trigger an exception.
Returns:
the live list of variable declaration fragments in this statement (element type: VariableDeclarationFragment)”
não compreendi o que é este “in this field declaration”(não a tradução, mas o significado).
pelo que compreendi este método retorna uma lista de variáveis, é isso? para capturar e manipular esta informação eu preciso criar um objeto do tipo List?
Já o método propertyDescriptors possui a seguinte descrição:
" public static List propertyDescriptors(int apiLevel)
Returns a list of structural property descriptors for this node type. Clients must not modify the result.
Parameters:
apiLevel - the API level; one of the AST.JLS* constants
Returns:
a list of property descriptors (element type: StructuralPropertyDescriptor)"
O que o “node type” significa? e este API level(aparentemente está relacionado com AST.JLS, que não sei exatamente o que é)?
qualquer informação adicional é bem vinda.
sergiotaborda
dyego.mota:
Olá pessoal, fim de férias cá estou pelejando com a obtenção destes dados…
Acho que o pessoal não entendeu que Reflection não resolve o seu problema. Dê uma olhada aqui , mas não sei se resolve.
Vc não tem acesso aos fontes , só aos .class ? E qual é o seu objetivo com isto ?
A API de Reflection é parte integrante do java desde o inicio (e não apenas do java 1.5), mas ela requer uma JVM correndo. Muitas ferramentas precisa dar parse do código para AST sem rodar a classe em si. O FindBugs é um que faz isto, talvez dando uma lida no codigo deles dê para entender como eles fazem.
sergiotaborda, obrigado por responder, tenho o código completo do projeto, entretanto, meu objetivo é criar um plugin para analiza-lo e exibir informações por meio de visualização de software, comparando versões do mesmo, etc.