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