【问题标题】:Eclipse project creation detectionEclipse项目创建检测
【发布时间】:2013-05-30 19:39:14
【问题描述】:

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

【问题讨论】:

    标签: eclipse eclipse-pde


    【解决方案1】:

    这个答案的几个部分:

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

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

    【讨论】:

    • 谢谢克里斯,碰巧,你知道我该如何强制这样的事件吗?确定项目刚刚创建而不是批处理?
    • 事件无论如何都会发生。只是如果该工具批处理了一堆资源模块,那么您将被调用一次,并带有一棵增量树。访问者递归遍历该树(见上文),该树中的增量将代表该项目。换句话说,您总是会在用户重新获得对 UI 的控制权之前被调用。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 2011-07-20
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多