El modelo de Java es el conjunto de clases que modelan los objetos asociados con la creación, edición y construcción de un programa de Java. Las clases del modelo de Java se definen en los paquetes org.eclipse.jdt.core.*. Estas clases implementan comportamientos concretos de Java para los recursos y posteriormente descomponen los recursos de Java en elementos del modelo.
El paquete org.eclipse.jdt.core define las clases que modelan los elementos que componen un programa de Java. JDT utiliza un modelo de objetos en memoria para representar la estructura de un programa de Java. Este modelo es jerárquico. Los elementos de un programa pueden descomponerse en elementos hijos.
Los elementos de Java son muy parecidos a los objetos de recursos. Cuando se trabaja con un elemento de Java, en realidad se está trabajando con un handle de algún objeto de modelo subyacente. Para determinar si el elemento realmente está presente en el área de trabajo deberá utilizar el protocolo exists().
En la tabla siguiente se resumen los distintos tipos de elementos de Java.
Elemento |
Descripción |
---|---|
Representa el elemento raíz de Java, que corresponde al área de trabajo. Es el padre de todos los proyectos de Java. |
|
Representa un proyecto de Java del área de trabajo. (Hijo de IJavaModel) |
|
Representa un conjunto de fragmentos de paquetes y correlaciona los fragmentos con un recurso subyacente que es una carpeta, un archivo JAR o un archivo ZIP. (Hijo de IJavaProject) |
|
Representa la parte del área de trabajo que corresponde a un paquete completo o a una parte del paquete. (Hijo de IPackageFragmentRoot) |
|
Representa un archivo fuente de Java (.java). |
|
Representa una declaración de paquete en una unidad de compilación. (Hijo de ICompilationUnit) |
|
Representa la colección de declaraciones de importación de paquetes en una unidad de compilación. (Hijo de ICompilationUnit) |
|
Representa una única declaración de importación de paquetes. (Hijo de IImportContainer) |
|
Representa o bien un tipo fuente en una unidad de compilación o bien un tipo binario en un archivo de clases. |
|
Representa un campo dentro de un tipo. (Hijo de IType) |
|
Representa un método o constructor dentro de un tipo. (Hijo de IType) |
|
Representa un inicializador estático o de instancias dentro de un tipo. (Hijo de IType) |
|
Representa un tipo compilado (binario). (Hijo de IPackageFragment) |
Todos los elementos de Java admiten la interfaz IJavaElement.
Algunos de los elementos pueden verse en la vista Paquetes. Estos elementos implementan la interfaz IOpenable, ya que deben abrirse antes de poder recorrerse. La figura siguiente muestra cómo se representan estos elementos en la vista Paquetes.
Los elementos de Java que implementan la interfaz IOpenable se crean básicamente a partir de la información que se encuentra en los archivos de recursos subyacentes. Los mismos elementos se representan de manera genérica en la vista del navegador de recursos.
Otros elementos corresponden a los ítems que componen una unidad de compilación de Java (archivo .java ). En la figura siguiente se muestra una unidad de compilación de Java y un diseñador de contenido que muestra los elementos fuente de la unidad de compilación.
Estos elementos implementan la interfaz ISourceReference, ya que tienen su código fuente correspondiente. (A medida que vayan seleccionándose los elementos en el diseñador de contenido, se irá mostrando su código fuente correspondiente en el editor de Java).
Muchos de los elementos de Java corresponden a recursos genéricos del área de trabajo. Si se quieren crear elementos de Java a partir de un recurso genérico, se ha de empezar por la clase JavaCore. El fragmento de código siguiente muestra cómo obtener elementos de Java a partir de sus recursos correspondientes.
private void createJavaElementsFrom(IProject myProject,
IFolder myFolder, IFile myFile) {
IJavaProject myJavaProject = JavaCore.create(myProject);
if (myJavaProject == null)
// el proyecto no está configurado para Java (no tiene naturaleza de Java)
return;
// obtener un fragmento de paquete o la raíz de un fragmento de paquete
IJavaElement myPackageFragment = JavaCore.create(myFolder);
// obtener una unidad de compilación (.java), un archivo de clase (.class) o
// una raíz de un fragmento de paquete (.jar)
IJavaElement myJavaFile = JavaCore.create(myFile);
}
JavaCore también se utiliza para mantener la vía de acceso a las clases de Java, incluyendo las ubicaciones para encontrar el código fuente y las bibliotecas y las ubicaciones para generar archivos binarios de salida (.class).
Cuando se crea un proyecto de Java a partir de un proyecto sin elaborar, JavaCore comprobará si el proyecto se ha configurado con la naturaleza de Java. El conector de JDT utiliza la naturaleza de un proyecto para indicar que un proyecto tendrá un comportamiento de Java. A un proyecto se le asigna esta naturaleza (org.eclipse.jdt.core.javanature) cuando el asistente "Proyecto de Java nuevo" crea un proyecto. Si en un proyecto no se configura la naturaleza de Java, JavaCore devolverá un valor nulo cuando se le pida que cree el proyecto.
¿Qué tiene de diferente un proyecto de Java? Los proyectos de Java registran sus vías de acceso a las clases en un archivo ".classpath" y añaden el constructor incremental de proyectos de Java a las especificaciones de construcción del proyecto. De lo contrario, serían proyectos normales y podrían configurarse con otras naturalezas (y con otros constructores incrementales) mediante conectores. Los conectores que quieran configurar los proyectos con un comportamiento de Java además del suyo propio, normalmente utilizarán la página del asistente "Proyecto de Java nuevo" para asignar al proyecto la naturaleza de Java, además de sus naturalezas o comportamientos personalizados propios.
IJavaModel puede considerarse el padre de todos los proyectos del área de trabajo que tienen naturaleza de proyecto de Java (y, por lo tanto, que pueden tratarse como un elemento IJavaProject.)