Configure JS library properly
This commit is contained in:
@@ -18,25 +18,32 @@ package org.jetbrains.jet.plugin.framework;
|
|||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.intellij.framework.library.LibraryVersionProperties;
|
import com.intellij.framework.library.LibraryVersionProperties;
|
||||||
import com.intellij.openapi.fileChooser.FileChooser;
|
|
||||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
|
||||||
import com.intellij.openapi.roots.OrderRootType;
|
import com.intellij.openapi.roots.OrderRootType;
|
||||||
import com.intellij.openapi.roots.libraries.LibraryKind;
|
import com.intellij.openapi.roots.libraries.LibraryKind;
|
||||||
import com.intellij.openapi.roots.libraries.NewLibraryConfiguration;
|
import com.intellij.openapi.roots.libraries.NewLibraryConfiguration;
|
||||||
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.libraryEditor.LibraryEditor;
|
import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor;
|
||||||
|
import com.intellij.openapi.ui.Messages;
|
||||||
|
import com.intellij.openapi.vfs.VfsUtil;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.plugin.framework.ui.FileUIUtils;
|
||||||
import org.jetbrains.jet.plugin.framework.ui.FrameworkSourcePanel;
|
import org.jetbrains.jet.plugin.framework.ui.FrameworkSourcePanel;
|
||||||
import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil;
|
import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil;
|
||||||
|
import org.jetbrains.jet.utils.PathUtil;
|
||||||
|
|
||||||
import javax.management.openmbean.InvalidOpenTypeException;
|
import javax.management.openmbean.InvalidOpenTypeException;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class JetJavaRuntimeLibraryDescription extends CustomLibraryDescription {
|
public class JetJavaRuntimeLibraryDescription extends CustomLibraryDescription {
|
||||||
public static final LibraryKind KOTLIN_JAVA_RUNTIME_KIND = LibraryKind.create("kotlin-java-runtime");
|
public static final LibraryKind KOTLIN_JAVA_RUNTIME_KIND = LibraryKind.create("kotlin-java-runtime");
|
||||||
|
|
||||||
|
private static final String JAVA_RUNTIME_LIBRARY_CREATION = "Java Runtime Library Creation";
|
||||||
|
|
||||||
private final FrameworkSourcePanel frameworkSourcePanel;
|
private final FrameworkSourcePanel frameworkSourcePanel;
|
||||||
|
|
||||||
public JetJavaRuntimeLibraryDescription(FrameworkSourcePanel frameworkSourcePanel) {
|
public JetJavaRuntimeLibraryDescription(FrameworkSourcePanel frameworkSourcePanel) {
|
||||||
@@ -54,30 +61,46 @@ public class JetJavaRuntimeLibraryDescription extends CustomLibraryDescription {
|
|||||||
@Override
|
@Override
|
||||||
public NewLibraryConfiguration createNewLibrary(@NotNull JComponent parentComponent, @Nullable VirtualFile contextDirectory) {
|
public NewLibraryConfiguration createNewLibrary(@NotNull JComponent parentComponent, @Nullable VirtualFile contextDirectory) {
|
||||||
if (frameworkSourcePanel.isConfigureFromBundled()) {
|
if (frameworkSourcePanel.isConfigureFromBundled()) {
|
||||||
final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false);
|
return createFromPlugin(parentComponent, contextDirectory);
|
||||||
|
|
||||||
descriptor.setTitle("Select Folder");
|
|
||||||
descriptor.setDescription("Select folder where bundled Kotlin java runtime library should be copied");
|
|
||||||
|
|
||||||
final VirtualFile[] files = FileChooser.chooseFiles(descriptor, parentComponent, null, contextDirectory);
|
|
||||||
if (files.length == 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert files.length == 1: "Only one folder is expected";
|
|
||||||
|
|
||||||
final VirtualFile directory = files[0];
|
|
||||||
assert directory.isDirectory();
|
|
||||||
|
|
||||||
return new NewLibraryConfiguration(KotlinRuntimeLibraryUtil.LIBRARY_NAME, getDownloadableLibraryType(), new LibraryVersionProperties()) {
|
|
||||||
@Override
|
|
||||||
public void addRoots(@NotNull LibraryEditor editor) {
|
|
||||||
editor.addRoot(directory.getUrl() + "/" + KotlinRuntimeLibraryUtil.KOTLIN_RUNTIME_JAR, OrderRootType.CLASSES);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new InvalidOpenTypeException("Isn't supported yet");
|
throw new InvalidOpenTypeException("Isn't supported yet");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NewLibraryConfiguration createFromPlugin(JComponent parentComponent, VirtualFile contextDirectory) {
|
||||||
|
File runtimePath = PathUtil.getKotlinPathsForIdeaPlugin().getRuntimePath();
|
||||||
|
|
||||||
|
if (!runtimePath.exists()) {
|
||||||
|
Messages.showErrorDialog("Java Runtime library was not found. Make sure plugin is installed properly.",
|
||||||
|
JAVA_RUNTIME_LIBRARY_CREATION);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final VirtualFile directory = FileUIUtils.selectCopyToDirectory(
|
||||||
|
"Select folder where bundled Kotlin java runtime library should be copied",
|
||||||
|
parentComponent, contextDirectory);
|
||||||
|
|
||||||
|
if (directory == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final File targetFile;
|
||||||
|
try {
|
||||||
|
targetFile = FileUIUtils.copyWithOverwriteDialog(directory, runtimePath);
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
Messages.showErrorDialog("Error during file copy", JAVA_RUNTIME_LIBRARY_CREATION);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new NewLibraryConfiguration(
|
||||||
|
KotlinRuntimeLibraryUtil.LIBRARY_NAME, getDownloadableLibraryType(), new LibraryVersionProperties()) {
|
||||||
|
@Override
|
||||||
|
public void addRoots(@NotNull LibraryEditor editor) {
|
||||||
|
editor.addRoot(VfsUtil.getUrlForLibraryRoot(targetFile), OrderRootType.CLASSES);
|
||||||
|
editor.addRoot(VfsUtil.getUrlForLibraryRoot(targetFile) + "src", OrderRootType.SOURCES);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -72,6 +72,7 @@ public class JetJavaScriptFrameworkSupportProvider extends FrameworkSupportInMod
|
|||||||
@NotNull Module module,
|
@NotNull Module module,
|
||||||
@NotNull ModifiableRootModel rootModel,
|
@NotNull ModifiableRootModel rootModel,
|
||||||
@NotNull ModifiableModelsProvider modifiableModelsProvider) {
|
@NotNull ModifiableModelsProvider modifiableModelsProvider) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private FrameworkSourcePanel getConfigurationPanel() {
|
private FrameworkSourcePanel getConfigurationPanel() {
|
||||||
|
|||||||
@@ -18,20 +18,18 @@ package org.jetbrains.jet.plugin.framework;
|
|||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.intellij.framework.library.LibraryVersionProperties;
|
import com.intellij.framework.library.LibraryVersionProperties;
|
||||||
import com.intellij.openapi.fileChooser.FileChooser;
|
|
||||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
|
||||||
import com.intellij.openapi.roots.OrderRootType;
|
import com.intellij.openapi.roots.OrderRootType;
|
||||||
import com.intellij.openapi.roots.libraries.LibraryKind;
|
import com.intellij.openapi.roots.libraries.LibraryKind;
|
||||||
import com.intellij.openapi.roots.libraries.NewLibraryConfiguration;
|
import com.intellij.openapi.roots.libraries.NewLibraryConfiguration;
|
||||||
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.libraryEditor.LibraryEditor;
|
import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
import com.intellij.openapi.vfs.VfsUtil;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.plugin.framework.ui.FileUIUtils;
|
||||||
import org.jetbrains.jet.plugin.framework.ui.FrameworkSourcePanel;
|
import org.jetbrains.jet.plugin.framework.ui.FrameworkSourcePanel;
|
||||||
import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil;
|
|
||||||
import org.jetbrains.jet.utils.PathUtil;
|
import org.jetbrains.jet.utils.PathUtil;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@@ -42,6 +40,8 @@ import java.util.Set;
|
|||||||
public class JetJavaScriptLibraryDescription extends CustomLibraryDescription {
|
public class JetJavaScriptLibraryDescription extends CustomLibraryDescription {
|
||||||
public static final LibraryKind KOTLIN_JAVASCRIPT_KIND = LibraryKind.create("kotlin-js-stdlib");
|
public static final LibraryKind KOTLIN_JAVASCRIPT_KIND = LibraryKind.create("kotlin-js-stdlib");
|
||||||
|
|
||||||
|
private static final String JAVA_SCRIPT_LIBRARY_CREATION = "JavaScript Library Creation";
|
||||||
|
|
||||||
private final FrameworkSourcePanel configurationPanel;
|
private final FrameworkSourcePanel configurationPanel;
|
||||||
|
|
||||||
public JetJavaScriptLibraryDescription(FrameworkSourcePanel configurationPanel) {
|
public JetJavaScriptLibraryDescription(FrameworkSourcePanel configurationPanel) {
|
||||||
@@ -58,47 +58,44 @@ public class JetJavaScriptLibraryDescription extends CustomLibraryDescription {
|
|||||||
@Override
|
@Override
|
||||||
public NewLibraryConfiguration createNewLibrary(@NotNull JComponent parentComponent, @Nullable VirtualFile contextDirectory) {
|
public NewLibraryConfiguration createNewLibrary(@NotNull JComponent parentComponent, @Nullable VirtualFile contextDirectory) {
|
||||||
if (configurationPanel.isConfigureFromBundled()) {
|
if (configurationPanel.isConfigureFromBundled()) {
|
||||||
// Select folder where to copy bundled library
|
return createFromPlugin(parentComponent, contextDirectory);
|
||||||
final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false);
|
|
||||||
descriptor.setTitle("Select Folder");
|
|
||||||
descriptor.setDescription("Select folder where bundled runtime should be placed");
|
|
||||||
|
|
||||||
final VirtualFile[] files = FileChooser.chooseFiles(descriptor, parentComponent, null, contextDirectory);
|
|
||||||
if (files.length == 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert files.length == 1: "Only one folder is expected";
|
|
||||||
|
|
||||||
final VirtualFile directory = files[0];
|
|
||||||
assert directory.isDirectory();
|
|
||||||
|
|
||||||
File runtimePath = PathUtil.getKotlinPathsForIdeaPlugin().getRuntimePath();
|
|
||||||
if (!runtimePath.exists()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
File targetJar = new File(com.intellij.util.PathUtil.getLocalPath(directory), KotlinRuntimeLibraryUtil.KOTLIN_RUNTIME_JAR);
|
|
||||||
try {
|
|
||||||
FileUtil.copy(runtimePath, targetJar);
|
|
||||||
VirtualFile jarVfs = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(targetJar);
|
|
||||||
if (jarVfs != null) {
|
|
||||||
jarVfs.refresh(false, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new NewLibraryConfiguration(KotlinRuntimeLibraryUtil.LIBRARY_NAME, getDownloadableLibraryType(), new LibraryVersionProperties()) {
|
|
||||||
@Override
|
|
||||||
public void addRoots(@NotNull LibraryEditor editor) {
|
|
||||||
editor.addRoot(directory.getUrl() + "/" + KotlinRuntimeLibraryUtil.KOTLIN_RUNTIME_JAR, OrderRootType.CLASSES);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new IllegalStateException("Feature isn't ready yet");
|
throw new IllegalStateException("Feature isn't ready yet");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NewLibraryConfiguration createFromPlugin(JComponent parentComponent, VirtualFile contextDirectory) {
|
||||||
|
File runtimePath = PathUtil.getKotlinPathsForIdeaPlugin().getJsLibJarPath();
|
||||||
|
|
||||||
|
if (!runtimePath.exists()) {
|
||||||
|
Messages.showErrorDialog("JavaScript standard library was not found. Make sure plugin is installed properly.",
|
||||||
|
JAVA_SCRIPT_LIBRARY_CREATION);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final VirtualFile directory = FileUIUtils.selectCopyToDirectory(
|
||||||
|
"Select folder where Kotlin JavaScript header should be copied",
|
||||||
|
parentComponent, contextDirectory);
|
||||||
|
|
||||||
|
if (directory == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final File targetFile;
|
||||||
|
try {
|
||||||
|
targetFile = FileUIUtils.copyWithOverwriteDialog(directory, runtimePath);
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
Messages.showErrorDialog("Error during file copy", JAVA_SCRIPT_LIBRARY_CREATION);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new NewLibraryConfiguration(PathUtil.JS_LIB_JAR_NAME, getDownloadableLibraryType(), new LibraryVersionProperties()) {
|
||||||
|
@Override
|
||||||
|
public void addRoots(@NotNull LibraryEditor editor) {
|
||||||
|
editor.addRoot(VfsUtil.getUrlForLibraryRoot(targetFile), OrderRootType.SOURCES);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-6
@@ -41,12 +41,9 @@ public class KotlinJavaScriptHeadersPresentationProvider extends LibraryPresenta
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public LibraryVersionProperties detect(@NotNull List<VirtualFile> classesRoots) {
|
public LibraryVersionProperties detect(@NotNull List<VirtualFile> classesRoots) {
|
||||||
for (VirtualFile root : classesRoots) {
|
// TODO: Ask for better api of library detection
|
||||||
// TODO: Better detection for headers library
|
if (classesRoots.isEmpty()) {
|
||||||
if (root.getName().equals(PathUtil.JS_LIB_JS_NAME)) {
|
return new LibraryVersionProperties("Unknown");
|
||||||
// TODO: Detect library version
|
|
||||||
return new LibraryVersionProperties("Unknown");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
+38
-3
@@ -16,17 +16,22 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.framework.ui;
|
package org.jetbrains.jet.plugin.framework.ui;
|
||||||
|
|
||||||
|
import com.intellij.openapi.fileChooser.FileChooser;
|
||||||
|
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||||
import com.intellij.openapi.ui.Messages;
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
|
import com.intellij.util.PathUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class CopyFileUtil {
|
public class FileUIUtils {
|
||||||
private CopyFileUtil() {
|
private FileUIUtils() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -42,7 +47,7 @@ public class CopyFileUtil {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int replaceIfExist = Messages.showYesNoDialog(
|
int replaceIfExist = Messages.showYesNoDialog(
|
||||||
String.format("File \"%s\" already exist in %s. Do you want to rewrite it?", targetFile.getName(),
|
String.format("File \"%s\" is already exist in %s.\nDo you want to rewrite it?", targetFile.getName(),
|
||||||
folder.getAbsolutePath()),
|
folder.getAbsolutePath()),
|
||||||
"Replace File", Messages.getWarningIcon());
|
"Replace File", Messages.getWarningIcon());
|
||||||
|
|
||||||
@@ -55,4 +60,34 @@ public class CopyFileUtil {
|
|||||||
|
|
||||||
return targetFile;
|
return targetFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static File copyWithOverwriteDialog(@NotNull VirtualFile directory, @NotNull File path) throws IOException {
|
||||||
|
String localPath = PathUtil.getLocalPath(directory);
|
||||||
|
assert localPath != null;
|
||||||
|
|
||||||
|
return copyWithOverwriteDialog(localPath, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static VirtualFile selectCopyToDirectory(
|
||||||
|
@NotNull String description,
|
||||||
|
@Nullable JComponent parentComponent,
|
||||||
|
@Nullable VirtualFile contextDirectory) {
|
||||||
|
final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false);
|
||||||
|
|
||||||
|
descriptor.setTitle("Select Folder");
|
||||||
|
descriptor.setDescription(description);
|
||||||
|
|
||||||
|
final VirtualFile[] files = FileChooser.chooseFiles(descriptor, parentComponent, null, contextDirectory);
|
||||||
|
if (files.length == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert files.length == 1: "Only one folder is expected";
|
||||||
|
|
||||||
|
final VirtualFile directory = files[0];
|
||||||
|
assert directory.isDirectory();
|
||||||
|
|
||||||
|
return directory;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user