[英]Moving static code analysis from a separate process to an Eclipse plug-in
我目前正在開發一個用於靜態代碼分析器的Eclipse插件。 分析器是用Java編寫的。 到目前為止,Eclipse插件使用自己的啟動配置類型以及JavaLaunchDelegate
的子類來在單獨的進程中執行代碼分析器。 Eclipse插件和代碼分析器通過新進程的stdin和stdout進行通信。 這很難看:-P
現在,我們的目標是清理它。 首先,我們將代碼分析器轉換為jar文件,而不僅僅是Eclipse插件。 其次,我們用適當的Java接口替換了基於stdio的通信:代碼分析器為Eclipse插件提供了一個API。 一切正常。
但是,Eclipse插件仍然使用自己的啟動配置類型及其子類JavaLaunchDelegate
來運行分析。 這意味着,由於代碼分析器本身現在是一個Eclipse插件,因此分析在同一個過程中完成。 但是,Eclipse插件仍然使用代碼分析器啟動額外的進程而不使用它。
舊設置我們還需要什么?
我很確定,我們可以將JavaLaunchDelegate
轉換為簡單的LaunchConfigurationDelegate
。 這應該可以防止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>
在這里,我不確定是否可以刪除sourceLocatorId
和sourcePathComputerId
屬性:啟動配置仍然啟動Java代碼,但不再在單獨的進程中啟動。 當這些屬性與不是JavaLaunchDelegate
的啟動委托一起使用時,這些屬性是否有意義?
最后,我不知道是否仍然使用啟動配置是一個好主意。 這是因為我們並沒有真正啟動額外的進程,而是在Eclipse進程中執行的操作。 是否適合在此用例中使用啟動配置? 此外,我們當前使用AbstractLaunchConfigurationTabGroup
的子類來配置分析的參數。 是否有替代自己的啟動配置類型,允許我們在Eclipse進程中啟動操作並通過GUI為此操作提供參數?
JavaLaunchDelegate
用一個簡單的LaunchConfigurationDelegate
? sourceLocatorId
和sourcePathComputerId
屬性嗎? 我們現在使用一個簡單的LaunchConfigurationDelegate
,我們從自己的啟動配置類型聲明中刪除了sourceLocatorId
和sourcePathComputerId
屬性。 這確實可以防止不必要的過程。 此外,我們沒有注意到調試的任何問題。 因此,我認為問題1和2已經解決了。 關於問題3和4:簡單的啟動配置現在對我們來說很好,所以我們堅持下去。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.