在开始时使用SDK选项配置ModuleType

时间:2016-03-23 20:26:22

标签: intellij-idea codenameone intellij-plugin

在我的插件中,我能够构建一个新的项目向导,但第一页看起来并不正确。例如。这就是我的插件:

My plugin

这就是大多数其他插件所具有的:

Other plugins

我所缺少的是" SDK"选项。我们的插件需要Java 8,我喜欢选择SDK来显示它。但我不明白这些配置的位置。

这是我的plugins.xml

<extensions defaultExtensionNs="com.intellij">
   <!-- moduleBuilder builderClass="com.codename1.plugin.intellij.module.CodenameOneModuleType"/ -->
   <moduleType id="CodenameOne.Module" implementationClass="com.codename1.plugin.intellij.module.CodenameOneModuleType" classpathProvider="true"  />
</extensions>

CodenameOneModuleType只是扩展ModuleType<NewCodenameOneProject>,其中NewCodenameOneProject基本上是JavaModuleBuilder。如果这会有所帮助,我可以发布一些更多来源。

BTW是否有插件API的javadoc?

我知道源代码在哪里,但是没有现成的JavaDoc吗?

1 个答案:

答案 0 :(得分:0)

我没有找到一个完全明确的解决方案,但我确实根据讨论得出了几个结论here

  • 为项目设置SDK应通过以下方式完成:ProjectRootManager.getInstance(project).setProjectSdk(jdk);

  • 我可以使用createWizardSteps

  • 覆盖第一页,而不是覆盖从向导第二页开始的getCustomOptionsStep

一旦我理解了那些,我刚刚使用IntelliJ / IDEA gui构建器和一些逻辑重新创建了上面的组合框UI:

private void refreshSDKCombo(Sdk preferredSdk) {
    DefaultComboBoxModel<Sdk> sdks = new DefaultComboBoxModel<>();
    Sdk[] s = ProjectJdkTable.getInstance().getAllJdks();
    for (Sdk ss : s) {
        if (ss.getSdkType() instanceof JavaSdkType) {
            String str = ss.getVersionString();
            if (str.contains("1.8.") || str.contains("1.9.")) {
                sdks.addElement(ss);
            }
        }
    }
    if(preferredSdk != null) {
        String str = preferredSdk.getVersionString();
        if (str.contains("1.8.") || str.contains("1.9.")) {
            projectSDKCombo.setSelectedItem(preferredSdk);
        }
    }
    projectSDKCombo.setModel(sdks);
    if(sdks.getSize() > 0) {
        projectSDKCombo.setSelectedIndex(0);
    }
}

注意到我将选项限制为JDK 8+,这是我们的用例所必需的!

我绑定按钮逻辑以配置SDK:

    newButton.addActionListener(e -> {
        ProjectJdksEditor editor = new ProjectJdksEditor((Sdk)projectSDKCombo.getSelectedItem(),
                ProjectManager.getInstance().getDefaultProject(),
                newButton);
        if (editor.showAndGet()) {
            Sdk selectedJdk = editor.getSelectedJdk();
            refreshSDKCombo(selectedJdk);
        }
    });