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.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.utils.LibraryUtils; import org.jetbrains.kotlin.utils.LibraryUtils;
import org.jetbrains.kotlin.utils.PathUtil;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
@@ -37,26 +36,22 @@ import java.util.jar.Attributes;
public class JsLibraryStdDetectionUtil { public class JsLibraryStdDetectionUtil {
private static final Key<Boolean> IS_JS_LIBRARY_STD_LIB = Key.create("IS_JS_LIBRARY_STD_LIB"); 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) { public static boolean hasJsStdlibJar(@NotNull Library library) {
if (library instanceof LibraryEx && ((LibraryEx) library).isDisposed()) return false; if (library instanceof LibraryEx && ((LibraryEx) library).isDisposed()) return false;
if (!KotlinJavaScriptLibraryDetectionUtil.isKotlinJavaScriptLibrary(library)) return false; if (!KotlinJavaScriptLibraryDetectionUtil.isKotlinJavaScriptLibrary(library)) return false;
List<VirtualFile> classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES)); 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) { if (JavaRuntimeDetectionUtil.getJavaRuntimeVersion(classesRoots) != null) {
// Prevent clashing with java runtime, in case when library collects all roots. // Prevent clashing with java runtime, in case when library collects all roots.
return null; return null;
} }
VirtualFile jar = fixedJarName ? LibraryUtils.getJarFile(classesRoots, PathUtil.JS_LIB_JAR_NAME) : getJsStdLibJar(classesRoots); VirtualFile jar = getJsStdLibJar(classesRoots);
if (jar == null) return null; if (jar == null) return null;
return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jar), Attributes.Name.IMPLEMENTATION_VERSION); return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jar), Attributes.Name.IMPLEMENTATION_VERSION);