【问题标题】:IntelliJ plugin: Editing Run Configuration settings programmatically and/or creating from contextIntelliJ 插件:以编程方式编辑运行配置设置和/或从上下文创建
【发布时间】:2020-04-11 19:08:20
【问题描述】:

也发布到 IntelliJ 社区。​​p>

简而言之,我想要做的是基于 EditorPopupMenu 操作以编程方式创建运行配置的实例(不是我自己创建的,特别是 Mocha)。 (对于上下文,稍后我希望能够添加一个运行前操作,并触发它运行)。

我通过

创建了一个空配置
ConfigurationType type = ConfigurationTypeUtil.findConfigurationType("mocha-javascript-test-runner");
ConfigurationFactory[] factories = type.getConfigurationFactories();
RunnerAndConfigurationSettings racs = runManager.createConfiguration("testConfig", factories[0]);

但我不确定如何填写您通常通过 UI 执行的设置字段。我已经看到了 sdk 文档引用的 SettingsEditor 页面,但这似乎只是 UI。运行配置的其余文档侧重于制作您自己的配置,而不是以编程方式操作现有配置。

我可以在调试器中看到 MochaRunSettings 对象存在于我所追求的所有字段中,但我没有看到访问它的方法。我也不知道如何手动创建一个,或者如果可以的话将它变成一个 RunnerAndConfigurationSettings 对象。

我认为几乎所有我想设置的东西都可以使用 ConfigurationContext 来完成,类似于单击排水沟中的运行按钮。我已经完成了

ConfigurationContext cc = new ConfigurationContext(e.getData(LangDataKeys.PSI_ELEMENT));

但是当我在调试器中检查它时似乎没有太多信息,而且我不确定我需要什么方法将它变成一个实际的 RunnerAndConfigurationSettings 对象。

也许我也只是采取了完全错误的方法?

感谢任何人提供的任何提示。

额外问题:如何以编程方式触发 RunnerAndConfigurationSettings 配置以实际运行,就像您单击它/按了 Shift+F10 一样?

【问题讨论】:

标签: java intellij-idea plugins mocha.js


【解决方案1】:

好的,我有点搞定了。这是需要的:

ConfigurationType type = ConfigurationTypeUtil.findConfigurationType("mocha-javascript-test-runner");

MapDataContext dataContext = new MapDataContext();
dataContext.put(CommonDataKeys.PROJECT, project);
dataContext.put(Location.DATA_KEY, PsiLocation.fromPsiElement(e.getData(LangDataKeys.PSI_ELEMENT)));

List<RunConfigurationProducer<?>> runConfProds = RunConfigurationProducer.getProducers(project);
RunConfigurationProducer runConfProd = null;
// I got the producer above by checking entries in 'runConfProds' against 'type'
// Unfortunately it gets two matches, so it's a bit scuffed right now. Probably better way to do this.

ConfigurationContext configurationContext = ConfigurationContext.getFromContext(dataContext);
ConfigurationFromContext configurationFromContext = runConfProd.createConfigurationFromContext(configurationContext);

RunnerAndConfigurationSettings runnerAndConfigurationSettings = configurationFromContext.getConfigurationSettings();
Executor executor = DefaultRunExecutor.getRunExecutorInstance();
ExecutionUtil.runConfiguration(runnerAndConfigurationSettings, executor);

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多