Come utilizzare il parser di un file come se fosse una classe Java!!

This page was exported from - JPinup
Export date: Fri Jun 2 0:33:48 2017 / +0000 GMT
Come utilizzare il parser di un file come se fosse una classe Java!!
A volte capita di dover analizzare il contenuto di una classe Java, estraendo le annotation, i tipi di ritorno, i nomi dei metodi e tutte
le altre proprietà disponibili.
Nel caso in cui la classe sia all'interno del class loader dell'applicazione, possiamo sfruttare direttamente il metodo getClass() nativo
della JDK e scorrere tutti i dettagli che ci servono.
Ma se quella classe è un file al di fuori della nostra applicazione e vogliamo evitare problemi di compilazione o di trascinarci dentro
al class loader file inutili e non logicamente connessi alle funzionalità sviluppate? ESISTE UNA SOLUZIONE ED E' MOLTO
SEMPLICE:
Innanzitutto nel pom bisogna inserire la dipendenza
<dependency>
<groupId>com.google.code.javaparser</groupId>
<artifactId>javaparser</artifactId>
<version>1.0.11</version>
</dependency>
Questa dipendenza contiene le utility per effettuare il parsing di un file che ha la struttura di una classe Java.
CompilationUnit cu;
cu = JavaParser.parse(srcFile);
Dopodichè possiamo analizzare tutto ciò che ci interessa della classe, un esempio di ciò che si può fare
static void processNode(Node node)
throws Exception {
if (node instanceof TypeDeclaration) {
// do something with this type declaration
} else if (node instanceof MethodDeclaration) {
// do something with this method declaration
} else if (node instanceof FieldDeclaration) {
// do something with this field declaration
List<AnnotationExpr> listaAnnotation = ((FieldDeclaration) node).getAnnotations();
for (AnnotationExpr annotationExpr : listaAnnotation) {
NameExpr name = annotationExpr.getName();
System.out.println(name.toString());
}
Type tipo = ((FieldDeclaration) node).getType();
List<VariableDeclarator> listaVariabili = ((FieldDeclaration) node).getVariables();
for (VariableDeclarator variableDeclarator : listaVariabili) {
System.out.println(variableDeclarator.toString());
}
}
for (Node child : node.getChildrenNodes()) {
processNode(child);
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 1/2 |
This page was exported from - JPinup
Export date: Fri Jun 2 0:33:48 2017 / +0000 GMT
}
}
public static void main(String[] args){
File srcFile = new File(
"file.java");
CompilationUnit cu;
cu = JavaParser.parse(srcFile);
processNode(cu);
}
Questo parser può essere uno strumento molto potente, ad esempio per realizzare generatori di codice o trasformazioni di file.
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 2/2 |