fix detection Kotlin Javascript stdlib

This commit is contained in:
Michael Nedzelsky
2014-12-11 03:31:12 +03:00
parent 2a680f4d8b
commit a49bcc8d39
3 changed files with 18 additions and 12 deletions
@@ -16,6 +16,8 @@
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.vfs.StandardFileSystems;
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.Nullable;
import org.jetbrains.jet.utils.LibraryUtils;
import org.jetbrains.jet.utils.PathUtil;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.jar.Attributes;
public class JsLibraryStdDetectionUtil {
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) {
// Prevent clashing with java runtime, in case when library collects all roots.
return null;
}
VirtualFile jar = getJsStdLibJar(classesRoots);
VirtualFile jar = fixedJarName ? LibraryUtils.getJarFile(classesRoots, PathUtil.JS_LIB_JAR_NAME) : getJsStdLibJar(classesRoots);
if (jar == null) return null;
assert JsHeaderLibraryDetectionUtil.isJsHeaderLibraryDetected(classesRoots) : "StdLib should also be detected as headers library";
@@ -44,7 +58,7 @@ public class JsLibraryStdDetectionUtil {
}
@Nullable
public static VirtualFile getJsStdLibJar(@NotNull List<VirtualFile> classesRoots) {
private static VirtualFile getJsStdLibJar(@NotNull List<VirtualFile> classesRoots) {
for (VirtualFile root : classesRoots) {
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.project.Project;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.ProjectRootModificationTracker;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.search.FileTypeIndex;
import com.intellij.psi.search.GlobalSearchScope;
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.versions.KotlinRuntimeLibraryCoreUtil;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ProjectStructureUtil {
@@ -146,11 +142,7 @@ public class ProjectStructureUtil {
ModuleRootManager.getInstance(module).orderEntries().librariesOnly().forEachLibrary(new Processor<Library>() {
@Override
public boolean process(Library library) {
List<VirtualFile> classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES));
boolean detected = JsLibraryStdDetectionUtil.getJsLibraryStdVersion(classes) != null;
if (detected) {
if (JsLibraryStdDetectionUtil.hasJsStdlibJar(library)) {
jsLibrary.set(library);
return false;
}
@@ -70,7 +70,7 @@ public class JSLibraryStdPresentationProvider extends LibraryPresentationProvide
@Nullable
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