Utilizar el motor de búsqueda Java

El conector puede utilizar la API JDT para buscar elementos Java, como por ejemplo referencias de método, declaraciones de campo, implementadores de una interfaz, etc., en los proyectos Java del área de trabajo.

El punto de entrada de la búsqueda Java es la clase SearchEngine. Los métodos de fábrica (factory) de esta clase, como por ejemplo createSearchPattern (crea un patrón de búsqueda) o createJavaSearchScope (crea un ámbito de búsqueda Java) son utilizados por el método search. Este método informa de los resultados a un IJavaSearchResultCollector que el usuario debe implementar.

Preparar la búsqueda

Una operación de búsqueda utilizará tanto un patrón para describir la naturaleza de la búsqueda como un ámbito para restringir el rango de la investigación.

Crear un patrón de búsqueda Java

Un patrón de búsqueda define cómo se encuentran los resultados de la búsqueda. Puede crear un patrón de búsqueda a partir de un elemento Java (consulte createSearchPattern(IJavaElement, int)) o a partir de una serie (consulte createSearchPattern(String, int, int, boolean).) El último método soporta caracteres comodín (i.e. '*') y puede utilizarse para ampliar los resultados de búsqueda.

Por ejemplo, la creación de un patrón de búsqueda para buscar referencias a un método determinado se realiza de la siguiente forma:

    // Obtener el método
    IMethod method = ...;
    
    // Crear el patrón de búsqueda
    ISearchPattern pattern = SearchEngine.createSearchPattern(method, IJavaSearchConstants.REFERENCES);

O la creación de un patrón de búsqueda para buscar declaraciones de todos los tipos que empiezan por "Obj":

    // Crear el patrón de búsqueda
    ISearchPattern pattern = SearchEngine.createSearchPattern("Obj*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, true);

Los siguientes patrones de búsqueda están soportados:

Crear un ámbito de búsqueda Java

Si está interesado en los resultados de búsqueda de un proyecto determinado o incluso de un paquete determinado, o si sabe que los resultados de búsqueda sólo pueden encontrarse en una jerarquía de un tipo determinado, puede crear el ámbito de búsqueda adecuado mediante createJavaSearchScope(IJavaElement[]) o createHierarchyScope(IType).

Por ejemplo, la creación de un ámbito de búsqueda de un paquete determinado se realiza de la siguiente forma:

    // Obtener el paquete
    IPackageFragment pkg = ...;

    // Crear el ámbito de búsqueda
    IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {pkg});

O bien, la creación de un ámbito de búsqueda en la jerarquía de un tipo determinado es:

    // Obtener el tipo
    IType type = ...;

    // Crear el ámbito de búsqueda
    IJavaSearchScope scope = SearchEngine.createHierarchyScope(type);

Finalmente, puede crear un ámbito de búsqueda en toda el área de trabajo:

    // Crear el ámbito de búsqueda
    IJavaSearchScope scope = SearchEngine.createWorkspaceScope();

Buscar

Una vez que ha creado un patrón y un ámbito de búsqueda y ha implementado IJavaSearchResultCollector, puede iniciar una consulta de búsqueda de la forma siguiente:

    // Obtener el patrón de búsqueda
    ISearchPattern pattern = ...;

    // Obtener el ámbito de búsqueda
    IJavaSearchScope scope = ...;

    // Obtener el recolector de resultados de búsqueda
    IJavaSearchResultCollector collector = ...;

    // Buscar
    SearchEngine searchEngine = new SearchEngine();
    searchEngine.search(ResourcesPlugin.getWorkspace(), pattern, scope, collector);

Se envía una notificación de que se inicia la búsqueda al recolector de resultados de búsqueda mediante el método aboutToStart.  A continuación, se informa de cada uno de los resultados de la búsqueda mediante el método accept. Finalmente, done indica que la búsqueda ha finalizado.

Reunir los resultados de búsqueda

Los resultados de búsqueda se notifican mediante el método accept. Los párrafos que siguen detallan cada uno de los argumentos de este método.

Recursos y elementos Java

Un resultado de búsqueda puede corresponder a un elemento Java (por ejemplo, a una declaración de tipo) o puede estar contenido en un elemento Java (por ejemplo, una referencia a un tipo dentro de un método). El motor de búsqueda siempre trata de encontrar el elemento Java más interno que corresponde a, o que contiene, el resultado de búsqueda. Por ejemplo, una búsqueda de declaraciones de tipo por nombre puede encontrar una declaración de tipo local. Puesto que el modelo Java no representa tipos locales, el método que contiene esta declaración de tipo local se entrega al recolector de resultados.

El motor de búsqueda también intenta entregar el recurso que contiene el elemento Java al recolector de resultados. Por tanto, si el elemento Java es un método de una unidad de compilación, el recurso es el IFile correspondiente. Si el elemento se encuentra en un archivo .jar, el recurso es el archivo .jar, si éste se encuentra en el área de trabajo. Si se trata de un archivo .jar externo, el recurso es null.

Posiciones del código fuente

Las posiciones del código fuente son relativas a la unidad de compilación que contiene el resultado de búsqueda. Si el elemento se encuentra en un archivo .jar, las posiciones del código fuente son relativas al código fuente conectado. Son (-1, -1) si no existe ningún código fuente conectado al archivo .jar.

Resultados de búsqueda exactos e inexactos

En la mayoría de los casos, los resultados de búsqueda son exactos, lo cual significa que el motor de búsqueda ha podido determinar que la coincidencia dada es la que se le solicitó. Sin embargo, en algunos casos el motor de búsqueda no puede hacerlo, y la coincidencia es inexacta. Algunas de las posibles razones por las que una coincidencia puede ser inexacta son:

 Copyright IBM Corporation y otros 2000, 2002. Reservados todos los derechos.