Este ejemplo pertenece a Eclipse JDT Tutorial Series.
Normalmente, Eclipse JDT se utiliza en un entorno de plug-in. Esta es la situación normal en la que nos ocupamos de cada proyecto en el espacio de trabajo. Sin embargo, si queremos analizar una gran cantidad de archivos java, este enfoque puede no ser bueno, ya que no es fácil importar muchos proyectos al espacio de trabajo manualmente. (Podemos importar proyectos automáticamente, pero esa es otra historia).
¿Podemos usar ASTParser de Eclipse para analizar el código fuente de Java en una aplicación independiente, en lugar de un complemento? Hice la misma pregunta antes de encontrar la solución. Aquí hay un ejemplo de código completo en el que ASTParser funciona en una aplicación independiente.
import java.util.HashSet; import java.util.Set; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.SimpleName; import org.eclipse.jdt.core.dom.VariableDeclarationFragment; public class Test { public static void main(String args[]){ ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setSource("public class A { int i = 9; n int j; n ArrayList<Integer> al = new ArrayList<Integer>();j=1000; }".toCharArray()); //parser.setSource("/*abc*/".toCharArray()); parser.setKind(ASTParser.K_COMPILATION_UNIT); //ASTNode node = parser.createAST(null); final CompilationUnit cu = (CompilationUnit) parser.createAST(null); cu.accept(new ASTVisitor() { Set names = new HashSet(); public boolean visit(VariableDeclarationFragment node) { SimpleName name = node.getName(); this.names.add(name.getIdentifier()); System.out.println("Declaration of '"+name+"' at line"+cu.getLineNumber(name.getStartPosition())); return false; // do not continue to avoid usage info } public boolean visit(SimpleName node) { if (this.names.contains(node.getIdentifier())) { System.out.println("Usage of '" + node + "' at line " + cu.getLineNumber(node.getStartPosition())); } return true; } }); } } |
Imprimirá el siguiente mensaje:
Declaration of 'i' at line1 Declaration of 'j' at line2 Declaration of 'al' at line3
Todos los problemas, como «El tipo org.eclipse.core.runtime.IProgressMonitor no se puede resolver. Se hace referencia indirectamente a él desde los archivos .class obligatorios», etc., son causados por bibliotecas faltantes.
Aquí están los archivos jar requeridos:
org.eclipse.core.contenttype.jar
org.eclipse.core.jobs.jar
org.eclipse.core.resources.jar
org.eclipse.core.runtime.jar
org.eclipse.equinox.common.jar
org.eclipse.equinox.preferences.jar
org.eclipse.jdt.core.jar
org.eclipse.osgi.jar
Lo siguiente es lo que utilicé para este programa de muestra.
Estos archivos jar estarán en el directorio de complementos, una vez que haya instalado el complemento astview. Aquí es una publicación sobre cómo agregar el complemento astview. Para mayor comodidad, también hice un archivo rar que incluye todos los archivos jar necesarios. Puedes descargarlo directamente aquí.
Esto es otro artículo que puede resultarle útil para comprender AST.