2012-06-16 12 views
5

Sto cercando un parser in grado di estrarre metodi da una classe java (codice sorgente statico -> file .java) e firma del metodo, commenti/documentazione, variabili di ciascuno dei metodi. Preferibilmente nel linguaggio di programmazione Java.Analizzatore di codice statico per codice sorgente Java per estrarre metodi/commenti

Qualcuno può consigliare per favore?

Grazie.

+0

Estratto in quale formato? Potresti semplicemente eseguire lo strumento Javadoc e gestire l'HTML generato. –

+0

Per me le API, se disponibili, sarebbero più utili, getMethodNames, getComments, getDocumentation, ecc. Inoltre, Javadoc non mi fornisce le variabili private dichiarate all'interno dei metodi, i nomi dei metodi chiamati dal metodo ecc. –

+0

Cosa sei cercare è un analizzatore [analizzatore statico] completo (http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java). –

risposta

8

È possibile utilizzare ASTParser di eclipse. È super semplice da usare.

Trova un esempio standalone rapido here.

+0

Sì, stavo verificando quello. C'è un modo per ottenere "commenti" nei metodi usando ASTParser? –

+0

ASTParser dichiara un nodo chiamato "Commento". Si può solo leggere il suo javadoc –

+1

CompilationUnit dà commentList, ma non sono in grado di ottenere commenti reali. per esempio: se il commento è // ciao mondo, viene pubblicato solo // –

1

Se tutto quello che volete è il testo esatto di ogni metodo, e il testo esatto delle variabili all'interno di metodi, si potrebbe ottenere da con un parser che produce un CST, passeggiate con il CST di trovare i nodi giusti, e quindi esegui la stampa dei sottotitoli trovati. ANTLR has a Java parser che avrebbe funzionato per questo. Non so se catturerà i commenti. Penso che la distribuzione principale di ANTLR sia codificata in Java.

Probabilmente è possibile farlo più in fretta, in Java, con un lexer per Java, implementando ciò che equivale a un parser isola errato che cerca le frasi chiave. ("Dopo la 'classe', trovare '{' e stampare tutto ciò che si trova nella corrispondenza '}'" ti darebbe tutti i metodi e campi).

Se si desidera un dettaglio più preciso (ad esempio, si desidera conoscere il tipo effettivo di un argomento anziché solo il nome o il tipo in cui è effettivamente definito) è necessario un parser con un front end completo e un nome risoluzione. (ANTLR non lo farà). Il Eclipse JDT crea certamente alberi; probabilmente risolve i nomi. Il nostro DMS Software Reengineering Toolkit con il suo Java Front End può fornire tutto il necessario per questa attività, inclusa l'acquisizione e l'estrazione dei commenti. DMS non è codificato in Java.

Hai obiettato a Javadoc come inadeguato, perché non ti dà il contenuto dei metodi. Forse il nostro Java Source Browser, che ti dà quel codice, servirebbe meglio. Integra i dati di risoluzione dei nomi dal nostro DMS/Java Front End alle informazioni di tipo hyperlink JavaDoc nel testo sorgente navigabile; tutti i campi e le variabili locali sono indicizzati in modo esplicito. Il browser di origine non è codificato in Java, ma presumibilmente si desidera semplicemente eseguirlo e analizzare il risultato. Tale raschiatura potrebbe essere più difficile di quanto appaia fissando lo schermo; c'è molto HTML dietro questo display.

4

Ecco quello che faccio per estrarre le firme dei metodi da un file java/s:

Io uso Sublime Text 2, al file voglio ottenere le firme da e il fare una ricerca Ctrl + F con espressione regolare impostata per la seguente espressione regolare che ho fatto (l'ho testato sul mio codice e funziona, spero che funzionerà anche per te)

((synchronized +)?(public|private|protected) +(static [a-Z\[\]]+|[a-Z\[\]]+) [a-Z]+\([a-Z ,\[\]]*\)\n?[a-Z ,\t\n]*\{) 

Dopo Sublime Text 2 evidenziare i miei risultati clicco su "Find All" quindi copia Ctrl +C, aprire una nuova scheda Ctrl +N ed incolla Ctrl +V.
Vedrai quindi tutti i tuoi metodi firme.

Spero che abbia aiutato.