在 Eclipse PDE 中,当查找资源更改时(使用IResourceChangeEvent
),我如何准确地找出项目的创建时间?在这种情况下,我是否可以访问项目(作为IProject
)?
2 回答
这个答案的几个部分:
当资源发生变化时,您的侦听器会收到一个事件。从该事件中,您可以获得描述已更改资源的增量。您实现了一个访问者(通过 accept() 方法传递给 delta),该访问者实际上实现了您对更改的响应,并通过回答其 visit() 方法的布尔值来控制您想要遍历的 delta 多远。您可能不会遍历太多,因为任何新项目都将位于三角洲的顶部。一旦你认识到你正在访问一个代表一个新项目的 delta 节点(你使用 flags() 和 getKind() 来查看它是否是一个新项目),你就可以采取任何你想要的行动。
该答案的另一部分是警告您,资源更改通常是批处理的,通常是出于性能原因,因此您可能会在该项目中创建许多文件后收到创建新项目的通知。
为了增加引用资源更改侦听器的其他答案...
可靠地检测项目创建实际上是相当困难的。问题是您定义为项目创建的问题。对于 Eclipse 资源层,项目创建是指创建一个空白项目(没有任何类型的元数据或文件),但在典型场景中,您想知道何时创建了特定类型的项目。
这意味着您不能假设当您的代码收到项目创建事件时,您将能够询问有关该项目的问题。项目创建事件可以与后续文件事件一起在一个批次中交付,或者这些事件可以单独滴入。
另一个考虑因素是 Eclipse 项目创建是许多不同的场景。它可能是用户运行项目创建向导,或从磁盘导入现有项目,或从 Git 导入,或第三方插件可能导致项目添加到工作区的任何其他方式。这些场景中的每一个都将具有稍微不同的事件批处理或滴入方式。
唯一的解决方案是查看文件事件而不是项目事件。弄清楚你的听众需要对项目提出什么问题,然后找出哪些文件包含答案并跟踪这些文件。例如,如果您需要检查性质和类路径条目,请监视 .project 和 .classpath 文件。不要假设项目始终处于一致状态。如果您是通过 Git 导入部分查看它,则可能不是。