1

我目前正在为静态代码分析器开发 Eclipse 插件。分析器是用 Java 编写的。到目前为止,Eclipse 插件使用自己的启动配置类型以及 的子类JavaLaunchDelegate在单独的进程中执行代码分析器。Eclipse 插件和代码分析器通过新进程的标准输入和标准输出进行通信。这很丑陋:-P

现在,我们的目标是清理它。首先,我们将代码分析器不仅转换为 jar 文件,还转换为 Eclipse 插件。其次,我们用适当的 Java 接口替换了基于 stdio 的通信:代码分析器为 Eclipse 插件提供了一个 API。这一切都很好。

但是,Eclipse 插件仍然使用其自己的启动配置类型及其子类JavaLaunchDelegate来运行分析。这意味着,由于代码分析器本身现在是一个 Eclipse 插件,因此分析是在同一个过程中完成的。但是,Eclipse 插件仍然使用代码分析器启动额外的进程,而不使用它。

问题

我们还需要从旧设置中获得什么?

我很确定,我们可以JavaLaunchDelegateLaunchConfigurationDelegate. 这应该可以防止 Eclipse 插件启动无用的进程。

接下来,在 中plugin.xml,我们声明自己的启动配置类型,如下所示:

 <extension
       point="org.eclipse.debug.core.launchConfigurationTypes">
    <launchConfigurationType
          delegate="com.example.LaunchDelegate"
          id="com.example.launch.config"
          modes="run,debug"
          name="Launch"
          sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"
          sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer">
    </launchConfigurationType>
 </extension>

在这里,我不确定我们是否可以删除sourceLocatorIdandsourcePathComputerId属性:启动配置仍然启动 Java 代码,但不再在单独的进程中启动。这些属性在与不是 的启动委托一起使用时是否有意义JavaLaunchDelegate

最后,我不知道仍然使用启动配置是否是一个好主意。这是因为我们并没有真正启动一个额外的进程,而是一个在 Eclipse 进程中执行的操作。对这个用例使用启动配置是否合适?另外,我们目前使用 的子类AbstractLaunchConfigurationTabGroup来配置分析的参数。是否有替代自己的启动配置类型允许我们在 Eclipse 进程中启动操作并通过 GUI 为该操作提供参数?

问题摘要

  1. 我们可以JavaLaunchDelegate用简单的 替换LaunchConfigurationDelegate吗?
  2. 我们可以从自己的启动配置类型声明中删除sourceLocatorIdsourcePathComputerId属性吗?
  3. 是否适合使用启动配置来执行在 Eclipse 进程中运行的静态代码分析?
  4. 如果不是,是否有替代自己的启动配置类型允许我们在 Eclipse 进程中启动操作并通过 GUI 为该操作提供参数?
4

1 回答 1

0

我们现在使用一个简单的LaunchConfigurationDelegate并且我们从自己的启动配置类型声明中删除了sourceLocatorIdsourcePathComputerId属性。这确实可以防止不必要的过程。此外,我们没有注意到调试有任何问题。因此,我认为问题 1 和 2 已解决。关于问题 3 和 4:简单的启动配置现在对我们来说很好,所以我们坚持下去。

于 2016-11-06T18:48:22.300 回答