Better encapsulate JS library detection

This commit is contained in:
Dmitry Jemerov
2017-07-12 15:12:27 +02:00
parent b8d453eec3
commit c7e85ea28f
2 changed files with 8 additions and 15 deletions
@@ -41,20 +41,14 @@ object JsLibraryStdDetectionUtil {
return getJsStdLibJar(classes) != null return getJsStdLibJar(classes) != null
} }
fun getJsLibraryStdVersion(library: Library): String? = getJsLibraryStdVersion(library.getFiles(OrderRootType.CLASSES).toList()) fun getJsLibraryStdVersion(library: Library): String? {
if ((library as LibraryEx).kind !is JSLibraryKind) return null
fun getJsLibraryStdVersion(classesRoots: List<VirtualFile>): String? { val jar = getJsStdLibJar(library.getFiles(OrderRootType.CLASSES).toList()) ?: return null
if (JavaRuntimeDetectionUtil.getJavaRuntimeVersion(classesRoots) != null) {
// Prevent clashing with java runtime, in case when library collects all roots.
return null
}
val jar = getJsStdLibJar(classesRoots) ?: return null
return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jar), Attributes.Name.IMPLEMENTATION_VERSION) return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jar), Attributes.Name.IMPLEMENTATION_VERSION)
} }
fun getJsStdLibJar(classesRoots: List<VirtualFile>): VirtualFile? { private fun getJsStdLibJar(classesRoots: List<VirtualFile>): VirtualFile? {
for (root in classesRoots) { for (root in classesRoots) {
if (root.fileSystem.protocol !== StandardFileSystems.JAR_PROTOCOL) continue if (root.fileSystem.protocol !== StandardFileSystems.JAR_PROTOCOL) continue
@@ -63,10 +63,9 @@ fun getOutdatedRuntimeLibraryVersion(library: Library): String? {
return if (isRuntimeOutdated(libraryVersion, runtimeVersion)) libraryVersion else null return if (isRuntimeOutdated(libraryVersion, runtimeVersion)) libraryVersion else null
} }
private fun getKotlinLibraryVersion(library: Library): String? { private fun getKotlinLibraryVersion(library: Library): String? =
val roots = library.getFiles(OrderRootType.CLASSES).toList() JavaRuntimeDetectionUtil.getJavaRuntimeVersion(library) ?:
return JavaRuntimeDetectionUtil.getJavaRuntimeVersion(roots) ?: JsLibraryStdDetectionUtil.getJsLibraryStdVersion(roots) JsLibraryStdDetectionUtil.getJsLibraryStdVersion(library)
}
fun findKotlinRuntimeLibrary(module: Module, predicate: (Library) -> Boolean = ::isKotlinRuntime): Library? { fun findKotlinRuntimeLibrary(module: Module, predicate: (Library) -> Boolean = ::isKotlinRuntime): Library? {
val orderEntries = ModuleRootManager.getInstance(module).orderEntries.filterIsInstance<LibraryOrderEntry>() val orderEntries = ModuleRootManager.getInstance(module).orderEntries.filterIsInstance<LibraryOrderEntry>()
@@ -81,7 +80,7 @@ fun isKotlinJavaRuntime(library: Library) =
JavaRuntimeDetectionUtil.getRuntimeJar(library.getFiles(OrderRootType.CLASSES).asList()) != null JavaRuntimeDetectionUtil.getRuntimeJar(library.getFiles(OrderRootType.CLASSES).asList()) != null
fun isKotlinJsRuntime(library: Library) = fun isKotlinJsRuntime(library: Library) =
JsLibraryStdDetectionUtil.getJsStdLibJar(library.getFiles(OrderRootType.CLASSES).asList()) != null JsLibraryStdDetectionUtil.hasJsStdlibJar(library)
fun collectModulesWithOutdatedRuntime(libraries: List<VersionedLibrary>): List<Module> = fun collectModulesWithOutdatedRuntime(libraries: List<VersionedLibrary>): List<Module> =
libraries.flatMap { it.usedInModules } libraries.flatMap { it.usedInModules }