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