3.2 版(JDT)新增内容

下列是对 Eclipse 发行版 3.2 的 Java 开发工具所作的一些更有意义或更重要的更改的描述。它们分组为:

另请参阅 3.2 版 Eclipse 平台的新增内容文档,以查看有关 Eclipse 平台的更改信息。

Java 重构

引入间接重构

引入间接是一种新的重构,它允许您将方法的所有调用者重定向至新方法。新方法将调用原始方法。如果您愿意,可以用任何其他方法的缺省实现替换新方法的缺省实现。

当需要为方法引入新行为时,这种间接很有用,但是:

  • 不能更改方法,因为它是库中的方法。
  • 不能更改方法,因为它是 API 方法。

使用引入间接对原始方法进行错误修正,或将引入间接用作在一个方法的所有调用前后添加代码的快速方法。

要执行引入间接重构,请选择一个方法,调用重构 > 引入间接...,然后为新方法提供名称和声明类。

“引入间接”对话框

将该方法添加到所选择的声明类。

具有已更新的引用的引入间接预览

更新所有引用以调用新方法。

引入间接后的结果

抽取超类重构

一种称为抽取超类的新重构从一组同代类型中抽取公共超类。在应用该重构后,所选择的同代类型将成为抽取出的超类的直接子类。此外,抽取超类还允许您尽可能在代码中使用抽取出的超类。

JavaEditorTestsPropertiesEditorTests 是以下示例中的同代类型。第一个图显示重构前的类型层次结构。

抽取 EditorTests 之前的层次结构

下一个图显示使用抽取超类重构抽取 EditorTests 之后的类型层次结构。

抽取 EditorTests 之后的层次结构

要调用此重构,请使用重构 > 抽取超类...

“清理”向导

可以对任意数目的 Java 源文件、包或整个 Java 项目调用清理向导。它可以帮助完成下列任务:

  • 同时解决多个问题
  • 让代码使用首选代码样式

以下是一些可以实现的任务示例:

  • 强制对每个“if”、“while”或“for”主体使用大括号(块)
  • 使用“this”来限定所有字段访问
  • 尽可能使用“final”

要使与 Java 1.4 兼容的代码可用于 5.0,使用清理向导执行下列操作:

  • 尽可能将所有 for 循环转换为增强的 for 循环
  • 使用 @Override 注释标记所有覆盖方法

“清理”向导

选择一个项目、包或文件,然后使用源代码 > 清理...来启动此向导。

重构历史记录

JDT 提供的大多数重构现在都记录在重构历史记录中。重构基础结构存储关于工作空间中已执行的重构的详细信息。

可以使用重构 > 历史记录...来浏览并编辑重构历史记录

“重构历史记录”对话框

创建并应用重构脚本

现在,可以将在本地工作空间中执行的重构导出到重构脚本中,并在任意工作空间中重放。

这种重构脚本可以在不同情况下使用,例如,自动修正软件层之间的 API 突破性更改或提供语义丰富的补丁。

使用重构 > 创建脚本...来根据重构历史记录创建重构脚本

创建脚本操作

要在任意工作空间中应用生成的重构脚本,请使用重构 > 应用脚本...

新的扩展点允许插件编写者提供对新的或已经存在的重构的脚本编制支持。请参阅 org.eclipse.ltk.core.refactoring.refactoringContributions 扩展点,以获取详细信息。

具有重构信息的 JAR 文件导出

从工作空间中导出 JAR 文件时,“JAR 导出”向导提供了一个用于将重构信息包括在 JAR 文件中的选项。

使用文件 > 导出...并选择 JAR 文件。在“JAR 导出”向导的第一页上,选择导出所选项目的重构。单击链接以选择要包括的重构。

选择 JAR 导出重构

通过使用重构 > 迁移 JAR 文件...重构,客户机可以将旧版本的 JAR 文件迁移到新版本。或者,如果当前选择了 JAR 文件,还可以使用构建路径 > 迁移 JAR 文件...

迁移 JAR 文件操作

此重构将自动更新所有依赖于旧版本的 JAR 文件的代码,以使用新版本的 JAR 文件。

API 感知重构

通过将原始成员作为已重构成员的代理,已扩展了许多现有重构来支持 API 兼容性:

  • 重命名方法
  • 重命名字段(仅适用于常量)
  • 移动方法
  • 引入参数
  • 更改特征符

“保留原始成员作为已重构成员的代理”复选框

通过在“重构”对话框中选中保留原始方法作为所重命名方法的代理,可以启用代理成员的生成来保持 API 兼容性。

“重命名类型”更新具有类似名称的元素

重命名类型重构现在可以重命名其名称与已重命名的类型名称类似的变量和方法。此功能有助于使方法名和变量名与类型名同步。

更新类似的声明 UI

要调用此重构,选择一种类型并使用重构 > 重命名...

“重命名包”重构重命名子包

重命名包重构现在还可根据请求重命名子包。

带有新复选框的“重命名包”对话框

在此示例中,junit.samples.money 被重命名为 junit.examples.money

要调用此重构,选择一个包并使用重构 > 重命名...

过滤重构预览

“重构预览”页现在支持对更改进行过滤。如果在重命名 Java 元素期间请求更新注释和字符串中的文本匹配项,则此功能特别有用。

已过滤的“重构预览”页

屏幕快照显示在将类 TestCase 重命名为 TestCasee 期间针对文本匹配项进行过滤的“重命名”对话框。

现在,还可以过滤与 Java 元素的可视性相关的更改。

Java 编辑器

可定制的内容辅助

现在,重复调用内容辅助(在大多数平台上按 Alt+/)将循环遍历不同的建议类别。

您可以将不同的快捷键指定给首选建议类别,并使用 打开“高级内容辅助”首选项页 Java > 编辑器 > 内容辅助 > 高级首选项页来配置要显示在缺省内容辅助弹出框中的类别。

带有 Java 建议的内容辅助弹出框;重复调用将显示模板建议

新的 org.eclipse.jdt.ui.javaCompletionProposalComputer 扩展点允许插件编写者为 Java 编辑器的内容辅助过程提供补全建议和类别。

代码补全中的大小写交错支持

代码补全现在支持大小写交错模式。例如,补全 NPE 将建议为 NullPointerException。可以使用 打开“内容辅助”首选项页 Java > 编辑器 > 内容辅助首选项页上的显示大小写交错的匹配项首选项禁用此支持。

补全 NPE 的 Java 编辑器

包围代码的快速菜单

新的包围方式快速菜单允许您用代码包围选择的行。可使用定制模板扩展该菜单。现在,模板知道需要拉出或使其为 final 类型的变量。

使用可运行的代码变换包围

使用源代码 > 包围方式或按 Alt+Shift+Z 以直接查看该菜单。

可以在 Java > 编辑器 > 模板首选项页上添加定制模板。模板所需要的只是 ${line_selection} 变量。

新的快速修正功能

已添加几个新的快速修正功能,例如:

  • 修正原始类型访问

    原始访问更正建议

    快速修正从同一文件中的使用情况收集信息。要进行更复杂的分析,请使用推断通用类型参数重构。

  • 添加缺少的注释属性

    缺少的注释属性的快速修正

  • 添加新的注释成员

    新注释成员的快速修正

类别支持

可以在 Javadoc 注释中使用 @category 标记对类型、方法和字段定义类别。

使用类别的代码

类别显示在“大纲”视图和“成员”视图以及“快速大纲”视图中。“视图”菜单允许您选择可视类别。

显示类别和类别过滤器的大纲

所有成员都可折叠

当启用了折叠时,现在可以像折叠方法一样折叠字段、初始化程序及其注释。

已折叠的字段初始化程序

有一些新的文本折叠命令,可用于折叠所有注释、折叠所有成员和复位折叠结构。这些命令位于 Java 编辑器的垂直标尺中的折叠上下文菜单中。

标尺支持以及工作空间外的 Java 文件的大纲

Java 编辑器现在显示垂直标尺,并且“大纲”页和“快速大纲”能够显示资源库中的外部 Java 文件和 Java 文件的大纲。

标尺支持

Java 编译器

Java SE 6.0 一致性

现在完全支持 Java SE 6.0 一致性。特别是,可使用 1.6 目标在 .class 文件中生成 StackMapTable 属性(请参阅 JSR 202)。

设置 6.0 一致性

空引用分析

Java 编译器现在能够对局部变量执行基本的空引用分析。

可以在 打开错误/警告首选项页 Java > 编译器 > 错误/警告首选项页上使用潜在的编程问题 > 空引用首选项来启用此可选诊断功能。

带有空引用警告的 Java 编辑器

请注意,分析非常保守,且是根据明确的赋值规则进行的。它仅考虑存在疑问的情况(例如,稍后是否执行空检查),而不考虑所有可能的情况。

在 5.0 一致性方式下,可使用 @SuppressWarnings("null") 禁止发出空引用警告。

已改进的语法恢复功能

内部 Java 解析器现在对语法错误更有弹性。在 Eclipse 3.1 中,语法错误可防止显示后续错误。现在,解析器可以从具有错误的语句中恢复并继续执行进一步分析。

在以下示例中,即使上一个语句中缺少分号,也能检测到对方法 bar() 的无效引用。

带有语法恢复功能的 Java 编辑器

例如,这允许那些仅影响单个文件的重构可容许语法错误。例如,现在可以在尚未完全编写完的方法顶部重命名或抽取局部变量。

抽取不完整方法中的局部变量

将可配置的错误视为非致命错误

打开“构建”首选项页 Java > 编译器 > 构建首选项页上的将可配置的错误视为严重错误选项控制可配置错误是否为严重错误。缺省情况下,此选项处于已启用状态。

如果禁用此选项,则即使已编译的代码中存在错误,也可以执行该代码。

检测不必要的 $NON-NLS$ 标记

现在将检测不必要的 $NON-NLS$ 标记。如果某行注释以 //$NON-NLS-x$ 开头但该行中没有相应的字符串,则会报告错误。

可使用检测未外部化的字符串所用的那个首选项来打开和关闭报告。可以在 打开“错误/警告”首选项页 Java > 编译器 > 错误/警告首选项页上使用代码样式 > 未外部化的字符串(缺少/未使用 $NON-NLS 标记)首选项来设置它。

带有不必要的 NLS 标记的 Java 编辑器

要除去不必要的标记,请使用快速修正(Ctrl+1),或者按 Ctrl+1 和 Ctrl+Enter 以除去编译单元中所有不必要的标记。

检测原始类型的使用

现在,已检测到原始类型的使用。原始类型是对不带有任何参数的某种通用类型(例如,List 代替 List<Element>)的引用。

可以在 打开“错误/警告”首选项页 Java > 编译器 > 错误/警告首选项页上使用通用类型 > 使用原始类型首选项上以独立于未检查的类型操作的方式启用此可选诊断。

使用原始类型的 Java 编辑器

通过添加 @SuppressWarnings("unchecked") 可禁止发出此警告。

此外,还实现了快速修正功能来帮助解决原始类型的使用问题。

检测方法参数的赋值

对方法参数赋值不是一种好的做法。

要检测并报告这种赋值,打开 打开“错误/警告”首选项页 Java > 编译器 > 错误/警告首选项页并启用代码样式 > 参数赋值首选项。

带有参数赋值警告的 Java 编辑器

检测未使用的标号

Java 编译器现在检测未使用的语句标号。

可以在 打开“错误/警告”首选项页 Java > 编译器 > 错误/警告首选项页上使用不必要的代码 > 未使用中断/继续标签首选项来启用此可选诊断。

使用原始类型的 Java 编辑器

检测 switch case 跳转

现在,Java 编译器可以检测是否可以跳转前一个 case来进入下一个case。允许空的 case 语句。

可以在 打开“错误/警告”首选项页 Java > 编译器 > 错误/警告首选项页上使用潜在的编程问题 > Switch case 跳转首选项来启用此可选诊断。

带有跳转警告的 Java 编辑器

已实现在上一个 case 中添加 break 语句的快速修正。

已改进大型 .jar 文件的性能

现在,内部 Java 模型高速缓存的大小限制是为运行 Eclipse IDE 的 Java 虚拟机提供的最大堆大小(在大多数 JVM 上为 -Xmx VM 参数)的一部分。

当构建类路径上有大型 .jar 文件时,增大堆大小能显著提高性能。

重新创建已修改的 .class 文件

现在,Java 构建器可以使用原始源代码重新创建输出文件夹中已修改或已除去的 .class 文件。

可以在 打开“构建”首选项页 Java > 编译器 > 构建首选项页上使用输出文件夹 > 重建已被别人修改的类文件首选项控制此操作。

附加 Javadoc 中的 Javadoc 视图和工具提示

Javadoc 视图和 Javadoc 悬浮现在从未连接源代码的库的附加 Javadoc 中抽取信息。

JUnit 工具

JUnit 4 支持

已更新 JUnit 支持,以便运行和编写 JUnit 4 测试。请查看 www.junit.org 以了解关于 JUnit 4 的更多信息。

  • 使用新建 JUnit 测试用例向导来生成 JUnit 4 测试类:
    “新建测试用例”向导中的 JUnit 4 支持
  • 使用提供的JUnit 库添加至构建路径
    使用快速修正添加 JUnit 4 库
  • 像往常一样使用作为 JUnit 运行来启动 JUnit 4 测试
  • 通过使用 @Ignore 标记测试来忽略它们

JUnit 视图历史记录

现在,JUnit 视图可以处理多个同时测试运行。可以使用新历史记录在活动测试运行和最新测试运行之间切换。可以根据历史记录重新运行测试,而不必停止已经在运行的测试。

JUnit 历史记录

这不仅对 JUnit 3 起作用,对 JUnit 4 同样起作用。

Java 调试器
执行环境

执行环境描述运行时(例如,J2SE-1.4)的功能。可以通过引用执行环境来指定用于运行、调试和构建的 JRE。 新的 打开“执行环境”首选项页 Java > 已安装的 JRE > 执行环境首选项页显示工作空间中与每个执行环境兼容的已安装 JRE。完全符合执行环境要求的 JRE 以粗体显示,而超出环境要求的 JRE 以缺省字体显示。当多个 JRE 与执行环境兼容时,可以通过选中缺省 JRE 来将它用于该环境。

“执行环境”首选项页

因为可以独立于 JRE 的名称来解析 JRE 的执行环境,所以引用执行环境的构建路径或启动配置比引用显式 JRE 的构建路径或启动配置更容易移植。使用 JRE 选项卡或“编辑库”向导来指定用于运行和构建的执行环境。

“启动配置”对话框中的 JRE 选项卡

系统属性启动变量

新的启动变量允许动态将系统属性指定为 Eclipse 运行时中的 Java 程序和 VM 参数。该变量接受单个参数,即启动时要解析的系统属性的名称。

例如,使用 ${system_property:java.home} 来引用 java.home 系统属性。

“启动配置”对话框中的“参数”选项卡

数组的求值支持

现在,Java 数组支持求值和内容辅助。使用 this 来指示所选数组。

“变量”视图中的代码辅助

Java 线程组

现在,通过切换“查看”菜单中的显示线程组,可以在“调试”视图中显示线程组。

在“调试”视图中启用线程组

导出条目的运行时类路径

可以配置运行时类路径,以便仅包括已从构建路径中导出的条目。缺省情况下,运行时类路径包括所有条目(已导出的条目和未导出的条目)。

类路径选项卡中,选择缺省条目并使用编辑...按钮来配置该选项。

“启动配置”对话框中的“类路径”选项卡

“编辑运行时类路径”对话框

暂挂线程与暂挂 VM

已在 打开“调试”首选项页 Java > 调试首选项页上添加一个选项,用于控制新创建的断点是暂挂单个线程还是整个 VM。

“调试”首选项页

其他

Java 类型指示符

打开“修饰符”首选项页 常规 > 外观 > 标签装饰首选项页上启用 Java 类型指示符,以找出编译单元或类文件中的第一种类型。将对接口、注释和枚举显示修饰,而普通类型保持未装饰状态。

类型指示符标签修饰符

查找错误的外部化字符串

一个新操作可以搜索错误的外部字符串。这种搜索将报告缺少的键、未使用的键和重复键。

查找错误的外部化字符串操作

要开始搜索,请选择一个属性文件、包或整个项目,然后使用源代码 > 查找错误的外部化字符串

已提高对 Eclipse 字符串外部化机制的支持

Eclipse 字符串外部化机制现在具有的支持与传统字符串外部化的支持相同。在 Java 编辑器中的外部化字符串的键上停留时,相关联的外部化值将以悬浮方式显示。

NLS 悬浮

对该键执行 Ctrl+单击操作将直接跳转至相应属性文件中的条目。在属性文件编辑器中,可以通过 Ctrl+单击来查找代码中使用该键的位置。

根据示例代码段创建类型

可以将包含 Java 类型的代码段直接粘贴到包或源代码文件夹中,以创建新的编译单元。例如,选择并复制以下源代码:
package pack;
   public class HelloWorld {
      public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
然后,在“包资源管理器”中选择源代码文件夹并使用 Ctrl+V(编辑 > 粘贴)。这将使用复制的内容自动创建一个新的包“pack”和文件“HelloWorld.java”。

生成 hashCode() 和 equals()

可以使用一个新操作来生成方法 hashCode()equals()。可以选择实施所基于的字段。

“生成散列和等同物”向导

要调用此操作,请选择一种类型并使用源代码 > 生成 hashCode() 和 equals()...

命令行代码格式化程序

现在,可以使用新的无外设格式化应用程序来格式化源代码,而不必启动 Eclipse UI。命令行格式化程序的工作原理与标准 Eclipse 应用程序相同。

以下命令将使用 config.prefs 文件中指定的选项格式化文件夹 src 中的源文件:

eclipse -application org.eclipse.jdt.core.JavaCodeFormatter -config d:/config.prefs c:/src

请参阅使用格式化应用程序,以获取详细信息。

支持类似于 Java 的扩展名

现在支持文件扩展名不是 .java 但包含纯 Java 代码的文件。可以使用 打开“内容类型”首选项页 常规 > 内容类型首选项页(输入文件 > Java 源文件)来添加类似于 Java 的扩展名。

“Y.abc”作为编译单元的包资源管理器