Este ejemplo pertenece a Eclipse JDT Tutorial Series.
He hablado sobre cómo analizar un método Java, cómo analizar una secuencia de declaraciones. Ahora veamos cómo analizar un proyecto Java.
Este ejemplo utiliza Eclipse JDT ASTParser y Java Model. Dado que el modelo Java debe usarse dentro de un complemento, el siguiente código debe ejecutarse dentro de un proyecto de complemento. Puede leer el tutorial sobre cómo crear un complemento.
El siguiente es el código para manejar una acción y analiza un proyecto.
import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.MethodDeclaration; public class GetInfo extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); // Get all projects in the workspace IProject[] projects = root.getProjects(); // Loop over all projects for (IProject project : projects) { try { if (project.isNatureEnabled("org.eclipse.jdt.core.javanature")) { IPackageFragment[] packages = JavaCore.create(project) .getPackageFragments(); // parse(JavaCore.create(project)); for (IPackageFragment mypackage : packages) { if (mypackage.getKind() == IPackageFragmentRoot.K_SOURCE) { for (ICompilationUnit unit : mypackage .getCompilationUnits()) { // Now create the AST for the ICompilationUnits CompilationUnit parse = parse(unit); //MethodVisitor visitor = new MethodVisitor(); // parse.accept(visitor); /*for (MethodDeclaration method : visitor.getMethods()) { System.out.print("Method name: " + method.getName() + " Return type: " + method.getReturnType2()); } */ } } } } } catch (CoreException e) { e.printStackTrace(); } } return null; } /** * Reads a ICompilationUnit and creates the AST DOM for manipulating the * Java source file * * @param unit * @return */ private static CompilationUnit parse(ICompilationUnit unit) { ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setSource(unit); parser.setResolveBindings(true); return (CompilationUnit) parser.createAST(null); // parse } } |
* Puede buscar usando el código de Google y obtener un montón de ejemplos de código como el anterior. En realidad, el código anterior es un ejemplo de estilo de programación basado en búsquedas. Debe probarse completamente antes de pasar a producción.