java - Intellij doExecute 未使用 DefaultProgramRunner 触发
问题描述
我正在尝试为 Intellij 开发一个使用 Debugger 的插件。
我以这个 repo 为例,但在我的例子中doExecute永远不会被执行。
所以在我的文件中只执行执行方法。知道为什么会这样吗?
更新:因为在 plugin.xml 中定义的 ProgramRunner 并且我需要具有RunProfileState 状态,所以我不能自己触发方法。
public class StudioScriptDebuggerRunner extends DefaultProgramRunner {
@NotNull
@Override
public String getRunnerId() {
return "StudioScriptDebuggerRunner";
}
@Override
public boolean canRun(@NotNull String executorId, @NotNull RunProfile profile) {
return executorId.equals(DefaultDebugExecutor.EXECUTOR_ID) && profile instanceof StudioDebuggerRunConfiguration;
}
@Override
protected RunContentDescriptor doExecute(@NotNull RunProfileState state, @NotNull ExecutionEnvironment env) throws ExecutionException {
FileDocumentManager.getInstance().saveAllDocuments();
return super.doExecute(state, env);
}
@Override
public void execute(@NotNull ExecutionEnvironment environment) throws ExecutionException {
FileDocumentManager.getInstance().saveAllDocuments();
Project[] projects = ProjectManager.getInstance().getOpenProjects();
StudioConfigurationProvider config = StudioConfigurationProvider.getInstance(projects[0]);
RunContentDescriptor descriptor = XDebuggerManager.getInstance(environment.getProject()).startSession(environment, new XDebugProcessStarter() {
@NotNull
public XDebugProcess start(@NotNull XDebugSession session) throws ExecutionException {
final SDAPIClient client = new SDAPIClient(config.getHostname(), config.getUsername(), config.getPassword(), "StudioDebuggerClient");
client.createSession();
return new StudioDebuggerProcess(session, client);
}
}).getRunContentDescriptor();
environment.setContentToReuse(descriptor);
}
}
插件.xml
<programRunner id="StudioScriptDebuggerRunner" implementation="com.binarysushi.studio.debugger.StudioScriptDebuggerRunner" order="last"/>
解决方案
据我所知,调用“doExecute()”方法的唯一地方是它自己的方法体。只要它没有在其他任何地方被调用,它就不会执行。我会尝试将它合并到方法“doExecute()”之外的某个地方。
推荐阅读
- python - 如何使用 python 在交互式破折号中显示本地图像
- azure-devops - 部署开始失败 - 解密操作失败
- reactjs - graphql 正则表达式过滤器不断给出无效的转义序列错误
- r - 如何处理无限的 P 值?我应该删除它吗?
- normalization - 如何使用 jmespath 从 json 中获取所有名为 ref 的属性?
- python - 我将如何创建一个函数来检查坐标是否在某个地图边界内?
- sql-server-data-tools - 数据库名称作为文件组文件名的一部分
- visual-studio - 在 Visual Studio/msbuild 中,一个目标框架的构建事件如何依赖于另一个?
- linux - kex_exchange_identification:远程主机使用 ~/.ssh/config 文件关闭连接
- tomcat - 如何更改 Tomcat 的 undeployOldVersions 超时?