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:
committed by
Zalim Bashorov
parent
2f0bccfb09
commit
7dbcbeb794
+3
-8
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user