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
}
fun getJsLibraryStdVersion(library: Library): String? = getJsLibraryStdVersion(library.getFiles(OrderRootType.CLASSES).toList())
fun getJsLibraryStdVersion(classesRoots: List<VirtualFile>): String? {
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
fun getJsLibraryStdVersion(library: Library): String? {
if ((library as LibraryEx).kind !is JSLibraryKind) return null
val jar = getJsStdLibJar(library.getFiles(OrderRootType.CLASSES).toList()) ?: return null
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) {
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
}
private fun getKotlinLibraryVersion(library: Library): String? {
val roots = library.getFiles(OrderRootType.CLASSES).toList()
return JavaRuntimeDetectionUtil.getJavaRuntimeVersion(roots) ?: JsLibraryStdDetectionUtil.getJsLibraryStdVersion(roots)
}
private fun getKotlinLibraryVersion(library: Library): String? =
JavaRuntimeDetectionUtil.getJavaRuntimeVersion(library) ?:
JsLibraryStdDetectionUtil.getJsLibraryStdVersion(library)
fun findKotlinRuntimeLibrary(module: Module, predicate: (Library) -> Boolean = ::isKotlinRuntime): Library? {
val orderEntries = ModuleRootManager.getInstance(module).orderEntries.filterIsInstance<LibraryOrderEntry>()
@@ -81,7 +80,7 @@ fun isKotlinJavaRuntime(library: Library) =
JavaRuntimeDetectionUtil.getRuntimeJar(library.getFiles(OrderRootType.CLASSES).asList()) != null
fun isKotlinJsRuntime(library: Library) =
JsLibraryStdDetectionUtil.getJsStdLibJar(library.getFiles(OrderRootType.CLASSES).asList()) != null
JsLibraryStdDetectionUtil.hasJsStdlibJar(library)
fun collectModulesWithOutdatedRuntime(libraries: List<VersionedLibrary>): List<Module> =
libraries.flatMap { it.usedInModules }