diff --git a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJsModuleConfigurator.java b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJsModuleConfigurator.java
index 3837b80471b..520bd8055a3 100644
--- a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJsModuleConfigurator.java
+++ b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJsModuleConfigurator.java
@@ -147,7 +147,7 @@ public class KotlinJsModuleConfigurator extends KotlinWithLibraryConfigurator {
}
@NotNull
- private static String getDefaultPathToJsFile(@NotNull Project project) {
+ protected String getDefaultPathToJsFile(@NotNull Project project) {
return FileUIUtils.createRelativePath(project, project.getBaseDir(), "script");
}
diff --git a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java
index fb9f07089fd..aa54ce8a1fe 100644
--- a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java
+++ b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java
@@ -41,6 +41,7 @@ import java.io.File;
import static org.jetbrains.jet.plugin.configuration.ConfigureKotlinInProjectUtils.showInfoNotification;
public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConfigurator {
+ public static final String DEFAULT_LIBRARY_DIR = "lib";
@NotNull
protected abstract String getLibraryName();
@@ -376,8 +377,8 @@ public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConf
return !isProjectLibraryPresent(project) && !getFileInDir(getJarName(), defaultPath).exists();
}
- protected static String getDefaultPathToJarFile(@NotNull Project project) {
- return FileUIUtils.createRelativePath(project, project.getBaseDir(), "lib");
+ protected String getDefaultPathToJarFile(@NotNull Project project) {
+ return FileUIUtils.createRelativePath(project, project.getBaseDir(), DEFAULT_LIBRARY_DIR);
}
protected void showError(@NotNull String message) {
diff --git a/idea/src/org/jetbrains/jet/plugin/framework/ui/CreateJavaLibraryDialogBase.java b/idea/src/org/jetbrains/jet/plugin/framework/ui/CreateJavaLibraryDialogBase.java
index b4e5e21bc5a..66c4cc882eb 100644
--- a/idea/src/org/jetbrains/jet/plugin/framework/ui/CreateJavaLibraryDialogBase.java
+++ b/idea/src/org/jetbrains/jet/plugin/framework/ui/CreateJavaLibraryDialogBase.java
@@ -73,7 +73,7 @@ public abstract class CreateJavaLibraryDialogBase extends DialogWrapper {
@Nullable
public String getCopyIntoPath() {
- return pathPanel.getPath();
+ return chooseLibraryPathPlace.isVisible() ? pathPanel.getPath() : null;
}
@Nullable
diff --git a/idea/src/org/jetbrains/jet/plugin/framework/ui/CreateJavaScriptLibraryDialogBase.java b/idea/src/org/jetbrains/jet/plugin/framework/ui/CreateJavaScriptLibraryDialogBase.java
index c6cc5386f4b..37b101bc157 100644
--- a/idea/src/org/jetbrains/jet/plugin/framework/ui/CreateJavaScriptLibraryDialogBase.java
+++ b/idea/src/org/jetbrains/jet/plugin/framework/ui/CreateJavaScriptLibraryDialogBase.java
@@ -98,6 +98,7 @@ public abstract class CreateJavaScriptLibraryDialogBase extends DialogWrapper im
@Override
@Nullable
public String getCopyLibraryIntoPath() {
+ if (!copyLibraryPlace.isVisible()) return null;
return copyLibraryFilePanel.getPath();
}
diff --git a/idea/testData/configuration/twoModulesWithJSNonDefaultPath/module1.iml b/idea/testData/configuration/twoModulesWithJSNonDefaultPath/module1.iml
new file mode 100644
index 00000000000..72749645ae1
--- /dev/null
+++ b/idea/testData/configuration/twoModulesWithJSNonDefaultPath/module1.iml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/idea/testData/configuration/twoModulesWithJSNonDefaultPath/module2.iml b/idea/testData/configuration/twoModulesWithJSNonDefaultPath/module2.iml
new file mode 100644
index 00000000000..72749645ae1
--- /dev/null
+++ b/idea/testData/configuration/twoModulesWithJSNonDefaultPath/module2.iml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/idea/testData/configuration/twoModulesWithJSNonDefaultPath/projectFile.ipr b/idea/testData/configuration/twoModulesWithJSNonDefaultPath/projectFile.ipr
new file mode 100644
index 00000000000..eea4e721978
--- /dev/null
+++ b/idea/testData/configuration/twoModulesWithJSNonDefaultPath/projectFile.ipr
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/idea/testData/configuration/twoModulesWithNonDefaultPath/module1.iml b/idea/testData/configuration/twoModulesWithNonDefaultPath/module1.iml
new file mode 100644
index 00000000000..c7649d2d5da
--- /dev/null
+++ b/idea/testData/configuration/twoModulesWithNonDefaultPath/module1.iml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/idea/testData/configuration/twoModulesWithNonDefaultPath/module2.iml b/idea/testData/configuration/twoModulesWithNonDefaultPath/module2.iml
new file mode 100644
index 00000000000..c7649d2d5da
--- /dev/null
+++ b/idea/testData/configuration/twoModulesWithNonDefaultPath/module2.iml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/idea/testData/configuration/twoModulesWithNonDefaultPath/projectFile.ipr b/idea/testData/configuration/twoModulesWithNonDefaultPath/projectFile.ipr
new file mode 100644
index 00000000000..f360e80a49a
--- /dev/null
+++ b/idea/testData/configuration/twoModulesWithNonDefaultPath/projectFile.ipr
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/idea/tests/org/jetbrains/jet/plugin/configuration/ConfigureKotlinTest.java b/idea/tests/org/jetbrains/jet/plugin/configuration/ConfigureKotlinTest.java
index 654ef45daa7..a2b5f52bee3 100644
--- a/idea/tests/org/jetbrains/jet/plugin/configuration/ConfigureKotlinTest.java
+++ b/idea/tests/org/jetbrains/jet/plugin/configuration/ConfigureKotlinTest.java
@@ -21,6 +21,7 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.testFramework.PlatformTestCase;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.utils.PathUtil;
@@ -35,12 +36,32 @@ import static org.jetbrains.jet.plugin.configuration.KotlinWithLibraryConfigurat
public class ConfigureKotlinTest extends PlatformTestCase {
private static final String BASE_PATH = "idea/testData/configuration/";
- private static final KotlinJavaModuleConfigurator JAVA_CONFIGURATOR = new KotlinJavaModuleConfigurator();
- private static final KotlinJsModuleConfigurator JS_CONFIGURATOR = new KotlinJsModuleConfigurator();
+
+ private static final KotlinJavaModuleConfigurator JAVA_CONFIGURATOR = new KotlinJavaModuleConfigurator() {
+ @Override
+ protected String getDefaultPathToJarFile(@NotNull Project project) {
+ return getPathRelativeToTemp("default_jvm_lib");
+ }
+ };
+
+ private static final String TEMP_DIR_MACRO_KEY = "TEMP_TEST_DIR";
+
+ private static final KotlinJsModuleConfigurator JS_CONFIGURATOR = new KotlinJsModuleConfigurator() {
+ @Override
+ protected String getDefaultPathToJarFile(@NotNull Project project) {
+ return getPathRelativeToTemp("default_js_lib");
+ }
+
+ @NotNull
+ @Override
+ protected String getDefaultPathToJsFile(@NotNull Project project) {
+ return getPathRelativeToTemp("default_script");
+ }
+ };
@Override
protected void tearDown() throws Exception {
- PathMacros.getInstance().removeMacro("TEMP_TEST_DIR");
+ PathMacros.getInstance().removeMacro(TEMP_DIR_MACRO_KEY);
super.tearDown();
}
@@ -50,7 +71,7 @@ public class ConfigureKotlinTest extends PlatformTestCase {
super.initApplication();
File tempLibDir = FileUtil.createTempDirectory("temp", null);
- PathMacros.getInstance().setMacro("TEMP_TEST_DIR", tempLibDir.getAbsolutePath());
+ PathMacros.getInstance().setMacro(TEMP_DIR_MACRO_KEY, FileUtilRt.toSystemDependentName(tempLibDir.getAbsolutePath()));
}
public void testNewLibrary_copyJar() {
@@ -106,11 +127,24 @@ public class ConfigureKotlinTest extends PlatformTestCase {
public void testLibraryNonDefault_libExistInDefault() throws IOException {
Module module = getModule();
+ // Move fake runtime jar to default library path to pretend library is already configured
+ FileUtil.copy(
+ new File(getProject().getBasePath() + "/lib/kotlin-runtime.jar"),
+ new File(JAVA_CONFIGURATOR.getDefaultPathToJarFile(getProject()) + "/kotlin-runtime.jar"));
+
assertNotConfigured(module, JAVA_CONFIGURATOR);
JAVA_CONFIGURATOR.configure(myProject);
assertProperlyConfigured(module, JAVA_CONFIGURATOR);
}
+ public void testTwoModulesWithNonDefaultPath_doNotCopyInDefault() throws IOException {
+ doTestConfigureModulesWithNonDefaultSetup(JAVA_CONFIGURATOR);
+ }
+
+ public void testTwoModulesWithJSNonDefaultPath_doNotCopyInDefault() throws IOException {
+ doTestConfigureModulesWithNonDefaultSetup(JS_CONFIGURATOR);
+ }
+
public void testNewLibrary_jarExists_js() {
doTestOneJsModule(FileState.EXISTS, LibraryState.NEW_LIBRARY);
}
@@ -145,6 +179,23 @@ public class ConfigureKotlinTest extends PlatformTestCase {
doTestOneJsModule(FileState.DO_NOT_COPY, LibraryState.NON_CONFIGURED_LIBRARY);
}
+ private void doTestConfigureModulesWithNonDefaultSetup(KotlinWithLibraryConfigurator configurator) {
+ assertNoFilesInDefaultPaths(true);
+
+ Module[] modules = getModules();
+ for (Module module : modules) {
+ assertNotConfigured(module, configurator);
+ }
+
+ configurator.configure(myProject);
+
+ assertNoFilesInDefaultPaths(false);
+
+ for (Module module : modules) {
+ assertProperlyConfigured(module, configurator);
+ }
+ }
+
private void doTestOneJavaModule(@NotNull FileState jarState, @NotNull LibraryState libraryState) {
doTestOneModule(jarState, libraryState, JAVA_CONFIGURATOR);
}
@@ -259,6 +310,15 @@ public class ConfigureKotlinTest extends PlatformTestCase {
protected void setUpModule() {
}
+ private void assertNoFilesInDefaultPaths(boolean checkJsFiles) {
+ assertDoesntExist(new File(JAVA_CONFIGURATOR.getDefaultPathToJarFile(getProject())));
+ assertDoesntExist(new File(JS_CONFIGURATOR.getDefaultPathToJarFile(getProject())));
+
+ if (checkJsFiles) {
+ assertDoesntExist(new File(JS_CONFIGURATOR.getDefaultPathToJsFile(getProject())));
+ }
+ }
+
private static void assertNotConfigured(Module module, KotlinWithLibraryConfigurator configurator) {
assertFalse(
String.format("Module %s should not be configured as %s Module", module.getName(), configurator.getPresentableText()),
@@ -282,4 +342,9 @@ public class ConfigureKotlinTest extends PlatformTestCase {
throw new IllegalArgumentException("Only JS_CONFIGURATOR and JAVA_CONFIGURATOR are supported");
}
+
+ private static String getPathRelativeToTemp(String relativePath) {
+ String tempPath = PathMacros.getInstance().getValue(TEMP_DIR_MACRO_KEY);
+ return tempPath + '/' + relativePath;
+ }
}