| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> |
| <html> |
| <head> |
| <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." > |
| <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
| <meta http-equiv="Content-Style-Type" content="text/css"> |
| <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"> |
| <title>Java model</title> |
| <link rel="stylesheet" type="text/css" href="../book.css"> |
| </head> |
| <body> |
| <h2>Java model</h2> |
| <p> The Java model is the set of classes that model the objects associated with |
| creating, editing, and building a Java program. The Java model classes are defined |
| in <b><a href="../reference/api/org/eclipse/jdt/core/package-summary.html"> |
| org.eclipse.jdt.core</a></b>. These classes implement Java specific |
| behavior for resources and further decompose Java resources into model elements.</p> |
| <h3> Java elements</h3> |
| <p> The package <a href="../reference/api/org/eclipse/jdt/core/package-summary.html"><b> |
| org.eclipse.jdt.core</b></a> defines the classes that model the elements that |
| compose a Java program. The JDT uses an in-memory object model to represent |
| the structure of a Java program. This structure is derived from the project's class path. |
| The model is hierarchical. Elements of a program can be decomposed into child elements.</p> |
| <p> Manipulating Java elements is similar to manipulating resource objects. When you work with a Java |
| element, you are actually working with a <b>handle</b> to some underlying model |
| object. You must use the <b>exists()</b> protocol to determine whether |
| the element is actually present in the workspace. </p> |
| <p> The following table summarizes the different kinds of Java elements.</p> |
| <table border="1"> |
| <tbody> |
| <tr> |
| <th rowspan="1" colspan="1"> Element </th> |
| <th rowspan="1" colspan="1"> Description </th> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b> IJavaModel</b></a> |
| </td> |
| <td> Represents the root Java element, corresponding to the workspace. The |
| parent of all projects with the Java nature. It also gives you access to the projects without the java nature.</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b> |
| IJavaProject</b></a> </td> |
| <td> Represents a Java project in the workspace. (Child of <a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b> |
| IJavaModel</b></a>) </td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html"><b> |
| IPackageFragmentRoot</b></a> </td> |
| <td> Represents a set of package fragments, and maps the fragments to an underlying |
| resource which is either a folder, JAR, or ZIP file. (Child of <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b> |
| IJavaProject</b></a>) </td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b> |
| IPackageFragment</b></a> </td> |
| <td> Represents the portion of the workspace that corresponds to an entire |
| package, or a portion of the package. (Child of <a href="../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html"><b> |
| IPackageFragmentRoot</b></a> )</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b> |
| ICompilationUnit</b></a> </td> |
| <td> Represents a Java source (<b>.java</b>) file. (Child of <a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b> |
| IPackageFragment</b></a> )</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IPackageDeclaration.html"><b> |
| IPackageDeclaration</b></a> </td> |
| <td> Represents a package declaration in a compilation unit. (Child of <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b> |
| ICompilationUnit</b></a> )</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IImportContainer.html"><b> |
| IImportContainer</b></a> </td> |
| <td> Represents the collection of package import declarations in a compilation |
| unit. (Child of <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b> |
| ICompilationUnit</b></a> )</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IImportDeclaration.html"><b> |
| IImportDeclaration</b></a> </td> |
| <td> Represents a single package import declaration. (Child of <a href="../reference/api/org/eclipse/jdt/core/IImportContainer.html"><b> |
| IImportContainer</b></a> )</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b> IType</b></a> |
| </td> |
| <td> Represents either a source type inside a compilation unit, or a binary |
| type inside a class file. </td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IField.html"><b> IField</b></a> |
| </td> |
| <td> Represents a field inside a type. (Child of <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b> |
| IType</b></a> )</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IMethod.html"><b> IMethod</b></a> |
| </td> |
| <td> Represents a method or constructor inside a type. (Child of <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b> |
| IType</b></a> )</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IInitializer.html"><b> |
| IInitializer</b></a> </td> |
| <td> Represents a static or instance initializer inside a type. (Child of |
| <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b> IType</b></a> |
| )</td> |
| </tr> |
| <tr> |
| <td> <a href="../reference/api/org/eclipse/jdt/core/IClassFile.html"><b> IClassFile</b></a> |
| </td> |
| <td> Represents a compiled (binary) type. (Child of <a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b> |
| IPackageFragment</b></a> )</td> |
| </tr> |
| </tbody> |
| </table> |
| <p> All Java elements support the <a href="../reference/api/org/eclipse/jdt/core/IJavaElement.html"><b> |
| IJavaElement</b></a> interface. </p> |
| <p> Some of the elements are shown in the Packages view. These elements |
| implement the <b><a href="../reference/api/org/eclipse/jdt/core/IOpenable.html"> |
| IOpenable</a> </b> interface, since they must be opened before they can be navigated. |
| The figure below shows how these elements are represented in the Packages view.</p> |
| <p><img src="images/openables.png" border="0" alt="Packages View showing elements implementing the IOpenable interface"> |
| </p> |
| <p>The Java elements that implement <b><a href="../reference/api/org/eclipse/jdt/core/IOpenable.html"> |
| IOpenable</a> </b> are created primarily from information found in the underlying |
| resource files. The same elements are represented generically in the resource |
| navigator view.</p> |
| <p><img src="images/javanavigator.png" border="0" alt="Resource Navigator showing elements implementing the IOpenable interface"> |
| </p> |
| <p> Other elements correspond to the items that make up a Java compilation unit. |
| The figure below shows a Java compilation unit and a content outliner that displays |
| the source elements in the compilation unit.</p> |
| <img src="images/sourceelements.png" border="0" alt="An editor and a content outliner illustrating the relation between corresponding source elements"> |
| <p> These elements implement the <a href="../reference/api/org/eclipse/jdt/core/ISourceReference.html"><b> |
| ISourceReference</b></a> interface, since they can provide corresponding source |
| code. (As these elements are selected in the content outliner, their corresponding |
| source code is shown in the Java editor).</p> |
| <h3> Java elements and their resources</h3> |
| <p> Many of the Java elements correspond to generic resources in the workspace. |
| When you want to create Java elements from a generic resource the class <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b> |
| JavaCore</b></a> is the best starting point. The following code snippet shows |
| how to get Java elements from their corresponding resources.</p> |
| <font color="#4444cc"> <pre> |
| private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { |
| IJavaProject myJavaProject= JavaCore.create(myProject); |
| if (myJavaProject == null) |
| // the project is not configured for Java (has no Java nature) |
| return; |
| |
| // get a package fragment or package fragment root |
| IJavaElement myPackageFragment= JavaCore.create(myFolder); |
| |
| // get a .java (compilation unit), .class (class file), or |
| // .jar (package fragment root) |
| IJavaElement myJavaFile = JavaCore.create(myFile); |
| }</pre></font> |
| <p>Once you have a Java element, you can use the JDT API to traverse and query |
| the model. You may also query the non-Java resources contained in a Java |
| element. </p> |
| <font color="#4444cc"><pre> private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { |
| ... |
| // get the non Java resources contained in my project. |
| Object[] nonJavaChildren = myJavaProject.getNonJavaResources(); |
| ... |
| </font></pre> |
| <h3> Java projects</h3> |
| <p>When you create a Java project from a simple project, <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b> |
| JavaCore</b></a> will check to see if the project is configured with the Java |
| nature. The JDT plug-in uses a project nature to designate a project as |
| having Java behavior. This nature (<b>org.eclipse.jdt.core.JavaCore#NATURE_ID</b> |
| ) is assigned to a project when the "New Java project" wizard creates a project. |
| If the Java nature is not configured on a project, <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b> |
| JavaCore</b></a> will return null when asked to create the project.</p> |
| <p><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> |
| is also used to maintain the Java class path, including locations for finding |
| source code and libraries, and locations for generating output binary (<b>.class</b>) |
| files.</p> |
| <p> What are the unique characteristics of Java projects? They record their classpath |
| in a "<b>.classpath</b>" file and add the Java incremental project builder to |
| the project's build spec. Otherwise, they are just regular projects and |
| can be configured with other natures (and other incremental builders) by plug-ins. |
| Plug-ins that want to configure projects with Java behavior in addition to their |
| own behavior typically use the <b><a href="../reference/api/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPage.html"> |
| NewJavaProjectWizardPage</a> </b> to assign the Java nature to the project in |
| addition to their own custom natures or behavior.</p> |
| <p><a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b> IJavaModel</b></a> |
| can be considered the parent of all projects in the workspace that have the |
| Java project nature (and therefore can be treated as an <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b> |
| IJavaProject</b></a>).</p> |
| |
| </body> |
| </html> |