采用 3.2 机制和 API 时所需进行的更改

本节描述在尝试将 3.1 插件更改为采用 3.2 机制和 API 时所需进行的更改。

  1. 启动配置
  2. 启动方式
  3. International Components for Unicode for Java(ICU4J)
  4. 运行时分割

启动配置

启动配置资源映射

Eclipse 3.2 提供了新的基础结构来使启动配置与资源相关联。此映射使平台能够对启动配置执行基于资源的过滤操作,并允许平台在相关项目被删除时有选择地删除启动配置。已将启动对话框增强为支持一组过滤器,以便有选择地隐藏与已关闭的和已删除的项目相关联的配置。并且,启动对话框支持根据活动工作台窗口中的所选工作集进行过滤,您还可以在启动对话框中选择工作集。

客户机负责管理启动配置的资源映射。已经对 ILaunchConfigurationWorkingCopy 添加了用于设置配置的相关资源的 API,并且对 ILaunchConfiguration 添加了用于获取配置的相关资源的 API。例如,在进行迁移时,应该对配置选项卡、启动快捷方式和重构参与者加以考虑。创建或修改了启动配置的代码还应该更新资源映射。

启动配置迁移支持

Eclipse 3.2 提供了新的基础结构来将启动配置迁移为与新工具兼容。例如,在 Eclipse 3.2 中,支持对启动配置执行基于资源的过滤操作。需要对启动配置进行升级以使其提供资源映射,从而利用此项新功能。通过使用 运行/调试 > 启动 > 启动配置首选项页并按迁移按钮,用户可以手工迁移工作空间中的启动配置。

launchConfigurationTypes 扩展点添加了新的可选迁移代表属性,此属性指定实现了新接口 ILaunchConfigurationMigrationDelegate 的类。迁移代表负责标识迁移候选者并迁移它们。

启动方式

launchModes 扩展点添加了一个新的可选属性,以正确地支持将层叠启动菜单操作标签外部化。添加了启动方式的客户机应该指定启动级联菜单所使用的正确标签,例如“运行方式”。这个新属性的名称是 launchAsLabel。平台为运行、调试和概要分析启动方式提供了正确的标签。为了向后兼容,当未对启动方式指定这个新属性时,将通过带有“{0} 方式”的 MessageFormat 按以前的方式生成级联菜单标签。请参阅相关错误 105235

International Components for Unicode for Java(ICU4J)

ICU4J 是一组 Java 库,它提供了更全面的 Unicode、软件全球化和国际化支持。为了向 Eclipse 社区提供此功能,在为 Eclipse 3.2 构建的平台中添加了 ICU4J。在构建中,它是名为 com.ibm.icu 的插件。在 Eclipse 3.2 中,Eclipse 平台将利用 ICU API。

迁移

可以递增方式完成应用程序代码的迁移,这意味着完全采用 ICU4J 功能并不会削弱使用 ICU4J 的优势。请参阅 Eclipse wiki 上的 ICU4J 页面以了解更多有关如何将代码迁移为使用 ICU4J 的详细信息。

ICU4J 替换插件

由于添加了 ICU4J 插件,因为占用的空间增加了 3MB。如果应用程序的大小比 ICU4J 功能重要,则它们可能不想采用 ICU4J。在这种情况下,可使用 Eclipse 平台构建页面上提供的替换插件(com.ibm.icu.base)。请下载该插件,然后从 /plugins 目录中除去 com.ibm.icu 插件及其相应的源代码,并将替换插件保存在该目录中。必须这样做的原因是,Eclipse 平台的 3.2 版采用了 ICU API,因此仅仅除去 ICU 插件将导致平台代码发生编译错误。替换插件的大小约为 100KB,它仅仅调用 ICU4J 中最常用的类和 API 的缺省 JDK 实现。同样,您可以参阅 Eclipse wiki 上的 ICU4J 页面以了解更多有关使用 ICU 替换插件的详细信息。

对 JFace 的影响 - ViewerSorter 和 StructuredViewer

为了在 JFace 中支持 ICU4J,需要使用一些创造性的 API 添加项以防止在 API 中引用 ICU 类。因此,添加了:

  1. 名为 org.eclipse.jface.viewers.ViewerComparator 的新类,org.eclipse.jface.viewers.ViewerSorter 现在是该类的子类。
  2. org.eclipse.jface.viewers.StructuredViewer 添加了两个新方法,以支持添加 org.eclipse.jface.viewers.ViewerComparator

理由

ViewerSorter 类包含一个公用方法 getCollator(),该方法返回 java.text.Collator。由于此方法是 API,所以无法将其更改为使用 ICU Collator。并且,由于插件直接依赖于 ICU 会导致通过 SWT 以独立方式使用 JFace,所以,ICU 类不能是 API(特征符)的组成部分。为了突破这些约束,添加了使用 java.util.Comparator(而不是使用 ICU Collator)的 ViewerComparator 类。这样做的原因是,ICU 的 Collator 类实现了 java.util.Comparator,因此任何 StructuredViewer 现在都可以使用 ICU 的 Collator 来代替 java.text.Collator,但 JFace 不必依赖于 ICU4J 插件。 对 StructuredViewer 添加了两个新方法,以支持使用 ICU 的 Collator 来通过 ViewerComparator(而不是通过 ViewerSorter)对查看器的内容进行排序。现在,建议所有 StructuredViewer 都使用这些方法来获取/设置查看器的排序器(比较器),而不要使用 getSorter()setSorter(ViewerSorter) 方法。

运行时分割

新的运行时 API

org.eclipse.equinox.common 捆绑软件提供了几个新的具有公共名称的 API 类(例如 AssertListenerList)。如果代码中的类与它们同名并使用了 import * 语句来同时导入局部类和运行时中的类,就会发出以下错误消息:

   类型 ABC 有歧义
  

通过对 import 进行组织并选择适当的导入源,应该可以解决此问题。

定制构建脚本中的显式类路径

由于已将代码移到新的运行时插件中,所以,显式地引用了 org.eclispe.core.runtime 的定制脚本可能需要添加下列插件中的一个或多个插件: