2016-03-23 2 views
1

В моем плагине мне удалось создать новый мастер проекта, но первая страница выглядит неправильно. Например. это то, что мой плагин имеет:Настройка типа ModuleType с опцией SDK в начале

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 есть javadoc для API плагина?

Я знаю, где источники, но нет готового JavaDoc?

ответ

0

я не нашел совершенно четкое решение этой проблемы, но я достичь несколько выводов на основе обсуждения here:

  • Установка SDK для проекта должно быть сделано с помощью: ProjectRootManager.getInstance(project).setProjectSdk(jdk);

  • Вместо переопределения createWizardSteps, который начинается со второй страницы мастера, я могу просто переопределить первую страницу, используя getCustomOptionsStep

После того, как я понял, те, которые я только воссоздал окно пользовательского интерфейса со списком выше, с использованием IntelliJ IDEA/GUI Builder и какая-то логика:

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); 
     } 
    });