IDE: fix detecting target platform for module when it contains js stdlib without regular name

Don't use fixed library name to detect JS stdlib.
This commit is contained in:
Zalim Bashorov
2016-11-18 15:53:52 +03:00
committed by Zalim Bashorov
parent 2f0bccfb09
commit 7dbcbeb794
@@ -27,7 +27,6 @@ import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.utils.LibraryUtils;
import org.jetbrains.kotlin.utils.PathUtil;
import java.io.File;
import java.util.Arrays;
@@ -37,26 +36,22 @@ import java.util.jar.Attributes;
public class JsLibraryStdDetectionUtil {
private static final Key<Boolean> IS_JS_LIBRARY_STD_LIB = Key.create("IS_JS_LIBRARY_STD_LIB");
public static String getJsLibraryStdVersion(@NotNull List<VirtualFile> classesRoots) {
return getJsLibraryStdVersion(classesRoots, true);
}
public static boolean hasJsStdlibJar(@NotNull Library library) {
if (library instanceof LibraryEx && ((LibraryEx) library).isDisposed()) return false;
if (!KotlinJavaScriptLibraryDetectionUtil.isKotlinJavaScriptLibrary(library)) return false;
List<VirtualFile> classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES));
return getJsLibraryStdVersion(classes, false) != null;
return getJsLibraryStdVersion(classes) != null;
}
private static String getJsLibraryStdVersion(@NotNull List<VirtualFile> classesRoots, boolean fixedJarName) {
public static String getJsLibraryStdVersion(@NotNull List<VirtualFile> classesRoots) {
if (JavaRuntimeDetectionUtil.getJavaRuntimeVersion(classesRoots) != null) {
// Prevent clashing with java runtime, in case when library collects all roots.
return null;
}
VirtualFile jar = fixedJarName ? LibraryUtils.getJarFile(classesRoots, PathUtil.JS_LIB_JAR_NAME) : getJsStdLibJar(classesRoots);
VirtualFile jar = getJsStdLibJar(classesRoots);
if (jar == null) return null;
return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jar), Attributes.Name.IMPLEMENTATION_VERSION);