fix detection Kotlin Javascript stdlib
This commit is contained in:
+16
-2
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.framework;
|
package org.jetbrains.jet.plugin.framework;
|
||||||
|
|
||||||
|
import com.intellij.openapi.roots.OrderRootType;
|
||||||
|
import com.intellij.openapi.roots.libraries.Library;
|
||||||
import com.intellij.openapi.util.io.JarUtil;
|
import com.intellij.openapi.util.io.JarUtil;
|
||||||
import com.intellij.openapi.vfs.StandardFileSystems;
|
import com.intellij.openapi.vfs.StandardFileSystems;
|
||||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||||
@@ -23,19 +25,31 @@ 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.jet.utils.LibraryUtils;
|
import org.jetbrains.jet.utils.LibraryUtils;
|
||||||
|
import org.jetbrains.jet.utils.PathUtil;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.jar.Attributes;
|
import java.util.jar.Attributes;
|
||||||
|
|
||||||
public class JsLibraryStdDetectionUtil {
|
public class JsLibraryStdDetectionUtil {
|
||||||
|
|
||||||
public static String getJsLibraryStdVersion(@NotNull List<VirtualFile> classesRoots) {
|
public static String getJsLibraryStdVersion(@NotNull List<VirtualFile> classesRoots) {
|
||||||
|
return getJsLibraryStdVersion(classesRoots, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasJsStdlibJar(@NotNull Library library) {
|
||||||
|
List<VirtualFile> classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES));
|
||||||
|
return getJsLibraryStdVersion(classes, false) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getJsLibraryStdVersion(@NotNull List<VirtualFile> classesRoots, boolean fixedJarName) {
|
||||||
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 = getJsStdLibJar(classesRoots);
|
VirtualFile jar = fixedJarName ? LibraryUtils.getJarFile(classesRoots, PathUtil.JS_LIB_JAR_NAME) : getJsStdLibJar(classesRoots);
|
||||||
if (jar == null) return null;
|
if (jar == null) return null;
|
||||||
|
|
||||||
assert JsHeaderLibraryDetectionUtil.isJsHeaderLibraryDetected(classesRoots) : "StdLib should also be detected as headers library";
|
assert JsHeaderLibraryDetectionUtil.isJsHeaderLibraryDetected(classesRoots) : "StdLib should also be detected as headers library";
|
||||||
@@ -44,7 +58,7 @@ public class JsLibraryStdDetectionUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static VirtualFile getJsStdLibJar(@NotNull List<VirtualFile> classesRoots) {
|
private static VirtualFile getJsStdLibJar(@NotNull List<VirtualFile> classesRoots) {
|
||||||
for (VirtualFile root : classesRoots) {
|
for (VirtualFile root : classesRoots) {
|
||||||
if (root.getFileSystem().getProtocol() != StandardFileSystems.JAR_PROTOCOL) continue;
|
if (root.getFileSystem().getProtocol() != StandardFileSystems.JAR_PROTOCOL) continue;
|
||||||
|
|
||||||
|
|||||||
@@ -22,13 +22,11 @@ import com.intellij.openapi.module.ModuleManager;
|
|||||||
import com.intellij.openapi.module.ModuleUtilCore;
|
import com.intellij.openapi.module.ModuleUtilCore;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.roots.ModuleRootManager;
|
import com.intellij.openapi.roots.ModuleRootManager;
|
||||||
import com.intellij.openapi.roots.OrderRootType;
|
|
||||||
import com.intellij.openapi.roots.ProjectRootModificationTracker;
|
import com.intellij.openapi.roots.ProjectRootModificationTracker;
|
||||||
import com.intellij.openapi.roots.libraries.Library;
|
import com.intellij.openapi.roots.libraries.Library;
|
||||||
import com.intellij.openapi.util.Computable;
|
import com.intellij.openapi.util.Computable;
|
||||||
import com.intellij.openapi.util.Key;
|
import com.intellij.openapi.util.Key;
|
||||||
import com.intellij.openapi.util.Ref;
|
import com.intellij.openapi.util.Ref;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
|
||||||
import com.intellij.psi.search.FileTypeIndex;
|
import com.intellij.psi.search.FileTypeIndex;
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import com.intellij.psi.util.CachedValue;
|
import com.intellij.psi.util.CachedValue;
|
||||||
@@ -42,9 +40,7 @@ import org.jetbrains.jet.plugin.JetFileType;
|
|||||||
import org.jetbrains.jet.plugin.framework.JsLibraryStdDetectionUtil;
|
import org.jetbrains.jet.plugin.framework.JsLibraryStdDetectionUtil;
|
||||||
import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryCoreUtil;
|
import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryCoreUtil;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class ProjectStructureUtil {
|
public class ProjectStructureUtil {
|
||||||
@@ -146,11 +142,7 @@ public class ProjectStructureUtil {
|
|||||||
ModuleRootManager.getInstance(module).orderEntries().librariesOnly().forEachLibrary(new Processor<Library>() {
|
ModuleRootManager.getInstance(module).orderEntries().librariesOnly().forEachLibrary(new Processor<Library>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean process(Library library) {
|
public boolean process(Library library) {
|
||||||
List<VirtualFile> classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES));
|
if (JsLibraryStdDetectionUtil.hasJsStdlibJar(library)) {
|
||||||
|
|
||||||
boolean detected = JsLibraryStdDetectionUtil.getJsLibraryStdVersion(classes) != null;
|
|
||||||
|
|
||||||
if (detected) {
|
|
||||||
jsLibrary.set(library);
|
jsLibrary.set(library);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class JSLibraryStdPresentationProvider extends LibraryPresentationProvide
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static VirtualFile getJsStdLibJar(@NotNull Library library) {
|
public static VirtualFile getJsStdLibJar(@NotNull Library library) {
|
||||||
return JsLibraryStdDetectionUtil.getJsStdLibJar(Arrays.asList(library.getFiles(OrderRootType.CLASSES)));
|
return LibraryUtils.getJarFile(Arrays.asList(library.getFiles(OrderRootType.CLASSES)), PathUtil.JS_LIB_JAR_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
Reference in New Issue
Block a user