Categorías
Java Development Tools (JDT)

Utilice ASTParser para analizar un proyecto Java

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
        }
}
  ¿Cómo formatear el código Java usando Eclipse JDT?

* 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.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *