一开始使用 SDK 选项配置 ModuleType
Configuring a ModuleType with the SDK option in the beginning
在我的插件中,我能够构建一个新的项目向导,但第一页看起来不正确。例如。这是我的插件:
这是大多数其他插件所具有的:
我缺少的是 "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
。如果有帮助,我可以 post 更多资源。
顺便说一句,有插件 API 的 javadoc 吗?
我知道来源在哪里但是没有现成的Java文档吗?
我没有找到一个完全明确的解决方案,但我确实根据讨论得出了几个结论 here:
应通过以下方式为项目设置 SDK:ProjectRootManager.getInstance(project).setProjectSdk(jdk);
我可以使用 getCustomOptionsStep
[=31= 覆盖第一页,而不是覆盖从向导第二页开始的 createWizardSteps
]
一旦我理解了这些,我就使用 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);
}
});
在我的插件中,我能够构建一个新的项目向导,但第一页看起来不正确。例如。这是我的插件:
这是大多数其他插件所具有的:
我缺少的是 "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
。如果有帮助,我可以 post 更多资源。
顺便说一句,有插件 API 的 javadoc 吗?
我知道来源在哪里但是没有现成的Java文档吗?
我没有找到一个完全明确的解决方案,但我确实根据讨论得出了几个结论 here:
应通过以下方式为项目设置 SDK:
ProjectRootManager.getInstance(project).setProjectSdk(jdk);
我可以使用
[=31= 覆盖第一页,而不是覆盖从向导第二页开始的getCustomOptionsStep
createWizardSteps
]
一旦我理解了这些,我就使用 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);
}
});