首页 > 解决方案 > Intellij doExecute 未使用 DefaultProgramRunner 触发

问题描述

我正在尝试为 Intellij 开发一个使用 Debugger 的插件。

我以这个 repo 为例,但在我的例子中doExecute永远不会被执行。

https://github.com/mulesoft-labs/data-weave-intellij-plugin/blob/master/data-weave-plugin/src/main/java/org/mule/tooling/lang/dw/debug/WeaveDebuggerRunner。爪哇

所以在我的文件中只执行执行方法。知道为什么会这样吗?

更新:因为在 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"/>

标签: javaintellij-ideaintellij-plugin

解决方案


据我所知,调用“doExecute()”方法的唯一地方是它自己的方法体。只要它没有在其他任何地方被调用,它就不会执行。我会尝试将它合并到方法“doExecute()”之外的某个地方。


推荐阅读