diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 157a2ff444d..442035ed726 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -189,11 +189,17 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { } } + annotation class WorkingDir(val name: String) + override fun setUp() { super.setUp() - val sourceFilesRoot = File(AbstractKotlinJpsBuildTestCase.TEST_DATA_PATH + "general/" + getTestName(false)) + val currentTestMethod = this::class.members.firstOrNull { it.name == "test" + getTestName(false) } + val workingDirFromAnnotation = currentTestMethod?.annotations?.filterIsInstance()?.firstOrNull()?.name + val sourceFilesRoot = File(AbstractKotlinJpsBuildTestCase.TEST_DATA_PATH + "general/" + (workingDirFromAnnotation ?: getTestName(false))) workDir = AbstractKotlinJpsBuildTestCase.copyTestDataToTmpDir(sourceFilesRoot) orCreateProjectDir + + JpsUtils.resetCaches() } override fun tearDown() { @@ -276,6 +282,15 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { checkWhen(arrayOf(touch("src/test1.kt"), touch("module2/src/module2.kt")), null, k2jsOutput(PROJECT_NAME, ADDITIONAL_MODULE_NAME)) } + @WorkingDir("KotlinJavaScriptProjectWithTwoModules") + fun testKotlinJavaScriptProjectWithTwoModulesAndWithLibrary() { + initProject() + createKotlinJavaScriptLibraryArchive() + addKotlinJavaScriptDependency(KOTLIN_JS_LIBRARY, File(workDir, KOTLIN_JS_LIBRARY_JAR)) + addKotlinJavaScriptStdlibDependency() + makeAll().assertSuccessful() + } + fun testKotlinJavaScriptProjectWithDirectoryAsStdlib() { initProject() val jslibJar = PathUtil.getKotlinPathsForDistDirectory().jsStdLibJarPath @@ -839,7 +854,7 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { private fun assertCanceled(buildResult: BuildResult) { val list = buildResult.getMessages(BuildMessage.Kind.INFO) - assertTrue("The build has been canceled".equals(list.last().messageText)) + assertTrue("The build has been canceled" == list.last().messageText) } private fun generateLongKotlinFile(filePath: String, packagename: String, className: String) { diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsUtils.java b/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsUtils.java index 4ab593ed174..58058ec0573 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsUtils.java +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsUtils.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.jps.build; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.TestOnly; import org.jetbrains.jps.incremental.ModuleBuildTarget; import org.jetbrains.jps.model.java.JpsJavaClasspathKind; import org.jetbrains.jps.model.java.JpsJavaDependenciesEnumerator; @@ -27,8 +28,6 @@ import org.jetbrains.jps.model.library.JpsOrderRootType; import org.jetbrains.jps.util.JpsPathUtil; import org.jetbrains.kotlin.utils.LibraryUtils; -import java.util.AbstractMap; -import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -36,8 +35,8 @@ import java.util.concurrent.ConcurrentHashMap; class JpsUtils { private JpsUtils() {} - private static final Map IS_KOTLIN_JS_MODULE_CACHE = createMapForCaching(); - private static final Map IS_KOTLIN_JS_STDLIB_JAR_CACHE = createMapForCaching(); + private static final Map IS_KOTLIN_JS_MODULE_CACHE = new ConcurrentHashMap(); + private static final Map IS_KOTLIN_JS_STDLIB_JAR_CACHE = new ConcurrentHashMap(); @NotNull static JpsJavaDependenciesEnumerator getAllDependencies(@NotNull ModuleBuildTarget target) { @@ -62,7 +61,10 @@ class JpsUtils { String url = root.getUrl(); Boolean cachedValue = IS_KOTLIN_JS_STDLIB_JAR_CACHE.get(url); - if (cachedValue != null) return cachedValue; + if (cachedValue != null) { + if (cachedValue.booleanValue()) return true; + else continue; + } boolean isKotlinJavascriptStdLibrary = LibraryUtils.isKotlinJavascriptStdLibrary(JpsPathUtil.urlToFile(url)); IS_KOTLIN_JS_STDLIB_JAR_CACHE.put(url, isKotlinJavascriptStdLibrary); @@ -72,27 +74,9 @@ class JpsUtils { return false; } - private static Map createMapForCaching() { - if ("true".equalsIgnoreCase(System.getProperty("kotlin.jps.tests"))) { - return new AbstractMap() { - @Override - public V put(K key, V value) { - return null; - } - - @Override - public V get(Object key) { - return null; - } - - @NotNull - @Override - public Set> entrySet() { - return Collections.emptySet(); - } - }; - } - - return new ConcurrentHashMap(); + @TestOnly + static void resetCaches() { + IS_KOTLIN_JS_MODULE_CACHE.clear(); + IS_KOTLIN_JS_STDLIB_JAR_CACHE.clear(); } }