Java 元素和资源

Java 模型是用来对与创建、编辑和构建 Java 程序相关联的对象进行建模的一些类。Java 模型类是在 org.eclipse.jdt.core.* 包中定义的。这些类实现资源的特定于 Java 的行为,并进一步将 Java 资源分解成模型元素。

Java 元素

org.eclipse.jdt.core 定义了用来对组成 Java 程序的元素建模的一些类。JDT 使用内存中的对象模型来表示 Java 程序的结构。此模型是分层的。可以将程序的元素分解成子元素。

Java 元素很象资源对象。使用 Java 元素时,实际上是在使用某些基本模型对象的句柄。必须使用 exists() 协议来确定元素是否真正存在于工作区中。

下表总结了不同种类的 Java 元素。

元素

描述

IJavaModel

表示根 Java 元素,对应于工作区。它是所有 Java 项目的父代。

IJavaProject

表示工作区中的 Java 项目。(IJavaModel 的子代)

IPackageFragmentRoot

表示一组包段,并将各段映射至基本资源,它可以是文件夹、JAR 或 ZIP 文件。(IJavaProject 的子代)

IPackageFragment

表示工作区中的一个部分,对应于整个包或者包的一部分。(IPackageFragmentRoot 的子代)

ICompilationUnit

表示 Java 源(.java)文件。

IPackageDeclaration

表示编译单元中的包声明。(ICompilationUnit 的子代)

IImportContainer

表示编译单元中的包导入声明的集合。(ICompilationUnit 的子代)

IImportDeclaration

表示单个包导入声明。(IImportContainer 的子代)

IType

表示编译单元内的源类型,或者是类文件中的二进制类型。

IField

表示类型中的字段。(IType 的子代)

IMethod

表示类型中的方法或构造器。(IType 的子代)

IInitializer

表示类型中的静态或实例初始化程序。(IType 的子代)

IClassFile

表示已编译(二进制)类型。(IPackageFragment 的子代)

所有 Java 元素都支持 IJavaElement 接口。

某些元素显示在“包”视图中。这些元素实现 IOpenable 接口,原因是必须在打开它们之后才能浏览它们。下图说明这些元素在“包”视图中是如何表示的。

实现 IOpenable 的 Java 元素基本上都是根据在基本资源文件中找到的信息创建的。相同的元素是在资源导航器视图中按类别表示的。

其他元素对应于组成 Java 编译单元(.java 文件)的项。下图显示 Java 编译单元和内容概述程序,它显示编译单元中的源元素。

这些元素实现 ISourceReference 接口,因为它们具有相应的源代码。(当在内容概述程序中选择了这些元素时, 就会在 Java 编辑器中显示它们相应的源代码)。

Java 元素及其资源

许多 Java 元素对应于工作区中的类属资源。在想要根据类属资源创建 Java 元素时,就要从类 JavaCore 来启动。以下代码片段说明如何从 Java 元素的相应资源中获取 Java 元素。

private void createJavaElementsFrom(IProject myProject, 
    IFolder myFolder, IFile myFile) {

    IJavaProject myJavaProject = JavaCore.create(myProject);
    if (myJavaProject == null)
        // 未对 Java 配置该项目(没有 Java 性质)
        return;

    // 获取包段或包段根
    IJavaElement myPackageFragment = JavaCore.create(myFolder);

    // 获取 .java(编译单元)、.class(类文件)或
    // .jar(包段根)
    IJavaElement myJavaFile = JavaCore.create(myFile);
}

JavaCore 还用来维护 Java 类路径, 包括用于查找源代码和库的位置以及用于生成输出二进制(.class)文件的位置。

在根据普通项目来创建 Java 项目时, JavaCore 将检查项目是否是用 Java 性质来配置的。JDT 插件使用项目性质来将项目指定为具有 Java 行为。当“新建 Java 项目”向导创建项目时,会对项目指定此性质(org.eclipse.jdt.core.javanature)。如果未对项目配置 Java 性质,则在要求创建项目时,JavaCore 将返回 null。

Java 项目的不同之处是什么?Java 项目将其类路径记录在“.classpath”文件中, 并将 Java 增量式项目构建器添加到项目的构建规范中。或者,它们只是常规项目,并且可以由插件来配置其他性质(以及其他增量式构建器)。那些要为已具有自己的行为的项目配置 Java 行为的插件,通常使用“新建 java 项目”向导页面来将 Java 性质指定给项目(它们已具有自己的定制性质或行为)。

IJavaModel 可以认为是工作区中具有 Java 项目性质的所有项目的父代 (因此,可以视作 IJavaProject。)