Show full library panel. Add warning on attempt to create project without library.
This commit is contained in:
@@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
public class JavaFrameworkSupportProvider extends FrameworkSupportInModuleProvider {
|
class JavaFrameworkSupportProvider extends FrameworkSupportInModuleProvider {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public FrameworkTypeEx getFrameworkType() {
|
public FrameworkTypeEx getFrameworkType() {
|
||||||
@@ -42,7 +42,7 @@ public class JavaFrameworkSupportProvider extends FrameworkSupportInModuleProvid
|
|||||||
@Override
|
@Override
|
||||||
public FrameworkSupportInModuleConfigurable createConfigurable(@NotNull final FrameworkSupportModel model) {
|
public FrameworkSupportInModuleConfigurable createConfigurable(@NotNull final FrameworkSupportModel model) {
|
||||||
return new FrameworkSupportInModuleConfigurable() {
|
return new FrameworkSupportInModuleConfigurable() {
|
||||||
JavaRuntimeLibraryDescription description = null;
|
private JavaRuntimeLibraryDescription description = null;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.intellij.framework.library.FrameworkLibraryVersionFilter;
|
|||||||
import com.intellij.ide.util.projectWizard.ModuleBuilder;
|
import com.intellij.ide.util.projectWizard.ModuleBuilder;
|
||||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
|
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
|
||||||
import com.intellij.ide.util.projectWizard.SettingsStep;
|
import com.intellij.ide.util.projectWizard.SettingsStep;
|
||||||
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.openapi.module.JavaModuleType;
|
import com.intellij.openapi.module.JavaModuleType;
|
||||||
import com.intellij.openapi.module.Module;
|
import com.intellij.openapi.module.Module;
|
||||||
import com.intellij.openapi.options.ConfigurationException;
|
import com.intellij.openapi.options.ConfigurationException;
|
||||||
@@ -31,18 +32,26 @@ import com.intellij.openapi.roots.libraries.Library;
|
|||||||
import com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription;
|
import com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription;
|
||||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
|
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
|
||||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
|
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
|
||||||
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.openapi.util.Disposer;
|
import com.intellij.openapi.util.Disposer;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
|
import com.intellij.ui.IdeBorderFactory;
|
||||||
|
import com.intellij.ui.components.panels.VerticalLayout;
|
||||||
|
import com.intellij.util.ui.RadioButtonEnumModel;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.kotlin.idea.KotlinBundle;
|
||||||
import org.jetbrains.kotlin.js.resolve.JsPlatform;
|
import org.jetbrains.kotlin.js.resolve.JsPlatform;
|
||||||
import org.jetbrains.kotlin.resolve.TargetPlatform;
|
import org.jetbrains.kotlin.resolve.TargetPlatform;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class KotlinModuleSettingStep extends ModuleWizardStep {
|
public class KotlinModuleSettingStep extends ModuleWizardStep {
|
||||||
|
private static final Logger LOG = Logger.getInstance(KotlinModuleSettingStep.class);
|
||||||
|
|
||||||
private final TargetPlatform targetPlatform;
|
private final TargetPlatform targetPlatform;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -52,6 +61,8 @@ public class KotlinModuleSettingStep extends ModuleWizardStep {
|
|||||||
private final LibrariesContainer librariesContainer;
|
private final LibrariesContainer librariesContainer;
|
||||||
|
|
||||||
private LibraryOptionsPanel libraryOptionsPanel;
|
private LibraryOptionsPanel libraryOptionsPanel;
|
||||||
|
private JPanel panel;
|
||||||
|
|
||||||
private LibraryCompositionSettings libraryCompositionSettings;
|
private LibraryCompositionSettings libraryCompositionSettings;
|
||||||
|
|
||||||
private final String basePath;
|
private final String basePath;
|
||||||
@@ -68,7 +79,7 @@ public class KotlinModuleSettingStep extends ModuleWizardStep {
|
|||||||
|
|
||||||
moduleBuilder.addModuleConfigurationUpdater(createModuleConfigurationUpdater());
|
moduleBuilder.addModuleConfigurationUpdater(createModuleConfigurationUpdater());
|
||||||
|
|
||||||
settingsStep.addSettingsField(getLibraryLabelText(), getLibraryPanel().getSimplePanel());
|
settingsStep.addSettingsComponent(getComponent());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ModuleBuilder.ModuleConfigurationUpdater createModuleConfigurationUpdater() {
|
protected ModuleBuilder.ModuleConfigurationUpdater createModuleConfigurationUpdater() {
|
||||||
@@ -95,13 +106,18 @@ public class KotlinModuleSettingStep extends ModuleWizardStep {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JComponent getComponent() {
|
public JComponent getComponent() {
|
||||||
return getLibraryPanel().getMainPanel();
|
if (panel == null) {
|
||||||
|
panel = new JPanel(new VerticalLayout(0));
|
||||||
|
panel.setBorder(IdeBorderFactory.createTitledBorder(getLibraryLabelText()));
|
||||||
|
panel.add(getLibraryPanel().getMainPanel());
|
||||||
|
}
|
||||||
|
return panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected String getLibraryLabelText() {
|
protected String getLibraryLabelText() {
|
||||||
if (targetPlatform == JvmPlatform.INSTANCE) return "\u001BKotlin runtime:";
|
if (targetPlatform == JvmPlatform.INSTANCE) return "Kotlin runtime";
|
||||||
if (targetPlatform == JsPlatform.INSTANCE) return "\u001BKotlin JS library:";
|
if (targetPlatform == JsPlatform.INSTANCE) return "Kotlin JS library";
|
||||||
throw new IllegalStateException("Only JS and JVM target are supported");
|
throw new IllegalStateException("Only JS and JVM target are supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +138,18 @@ public class KotlinModuleSettingStep extends ModuleWizardStep {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean validate() throws ConfigurationException {
|
public boolean validate() throws ConfigurationException {
|
||||||
return super.validate() && (myJavaStep == null || myJavaStep.validate());
|
if (!(super.validate() && (myJavaStep == null || myJavaStep.validate()))) return false;
|
||||||
|
|
||||||
|
Boolean selected = isLibrarySelected();
|
||||||
|
if (selected != null && !selected) {
|
||||||
|
int result = Messages.showYesNoDialog("Do you want to continue with no Kotlin Runtime library?",
|
||||||
|
"No Kotlin Runtime Specified", Messages.getWarningIcon());
|
||||||
|
if (result != Messages.YES) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected LibraryOptionsPanel getLibraryPanel() {
|
protected LibraryOptionsPanel getLibraryPanel() {
|
||||||
@@ -139,4 +166,30 @@ public class KotlinModuleSettingStep extends ModuleWizardStep {
|
|||||||
|
|
||||||
return libraryOptionsPanel;
|
return libraryOptionsPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Boolean isLibrarySelected() {
|
||||||
|
try {
|
||||||
|
LibraryOptionsPanel panel = getLibraryPanel();
|
||||||
|
Field modelField = panel.getClass().getDeclaredField("myButtonEnumModel");
|
||||||
|
modelField.setAccessible(true);
|
||||||
|
|
||||||
|
RadioButtonEnumModel enumModel = (RadioButtonEnumModel) modelField.get(panel);
|
||||||
|
int ordinal = enumModel.getSelected().ordinal();
|
||||||
|
|
||||||
|
if (ordinal == 0) {
|
||||||
|
Field libComboboxField = panel.getClass().getDeclaredField("myExistingLibraryComboBox");
|
||||||
|
libComboboxField.setAccessible(true);
|
||||||
|
JComboBox combobox = (JComboBox) libComboboxField.get(panel);
|
||||||
|
|
||||||
|
return combobox.getSelectedItem() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ordinal != 2;
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
LOG.warn("Error in reflection", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user