1

在 Eclipse PDE 中,当查找资源更改时(使用IResourceChangeEvent),我如何准确地找出项目的创建时间?在这种情况下,我是否可以访问项目(作为IProject)?

4

2 回答 2

2

这个答案的几个部分:

当资源发生变化时,您的侦听器会收到一个事件。从该事件中,您可以获得描述已更改资源的增量。您实现了一个访问者(通过 accept() 方法传递给 delta),该访问者实际上实现了您对更改的响应,并通过回答其 visit() 方法的布尔值来控制您想要遍历的 delta 多远。您可能不会遍历太多,因为任何新项目都将位于三角洲的顶部。一旦你认识到你正在访问一个代表一个新项目的 delta 节点(你使用 flags() 和 getKind() 来查看它是否是一个新项目),你就可以采取任何你想要的行动。

该答案的另一部分是警告您,资源更改通常是批处理的,通常是出于性能原因,因此您可能会在该项目中创建许多文件后收到创建新项目的通知。

于 2013-05-30T20:11:31.433 回答
1

为了增加引用资源更改侦听器的其他答案...

可靠地检测项目创建实际上是相当困难的。问题是您定义为项目创建的问题。对于 Eclipse 资源层,项目创建是指创建一个空白项目(没有任何类型的元数据或文件),但在典型场景中,您想知道何时创建了特定类型的项目。

这意味着您不能假设当您的代码收到项目创建事件时,您将能够询问有关该项目的问题。项目创建事件可以与后续文件事件一起在一个批次中交付,或者这些事件可以单独滴入。

另一个考虑因素是 Eclipse 项目创建是许多不同的场景。它可能是用户运行项目创建向导,或从磁盘导入现有项目,或从 Git 导入,或第三方插件可能导致项目添加到工作区的任何其他方式。这些场景中的每一个都将具有稍微不同的事件批处理或滴入方式。

唯一的解决方案是查看文件事件而不是项目事件。弄清楚你的听众需要对项目提出什么问题,然后找出哪些文件包含答案并跟踪这些文件。例如,如果您需要检查性质和类路径条目,请监视 .project 和 .classpath 文件。不要假设项目始终处于一致状态。如果您是通过 Git 导入部分查看它,则可能不是。

于 2013-05-30T22:17:27.330 回答