From a49bcc8d390c32a72b8e631396df38c05b6da89c Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Thu, 11 Dec 2014 03:31:12 +0300 Subject: [PATCH] fix detection Kotlin Javascript stdlib --- .../framework/JsLibraryStdDetectionUtil.java | 18 ++++++++++++++++-- .../plugin/project/ProjectStructureUtil.java | 10 +--------- .../JSLibraryStdPresentationProvider.java | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsLibraryStdDetectionUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsLibraryStdDetectionUtil.java index 41d57f70347..1c92c285870 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsLibraryStdDetectionUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsLibraryStdDetectionUtil.java @@ -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 classesRoots) { + return getJsLibraryStdVersion(classesRoots, true); + } + + public static boolean hasJsStdlibJar(@NotNull Library library) { + List classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES)); + return getJsLibraryStdVersion(classes, false) != null; + } + + private static String getJsLibraryStdVersion(@NotNull List 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 classesRoots) { + private static VirtualFile getJsStdLibJar(@NotNull List classesRoots) { for (VirtualFile root : classesRoots) { if (root.getFileSystem().getProtocol() != StandardFileSystems.JAR_PROTOCOL) continue; diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java index b30ed16df16..eb7416851b0 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java @@ -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() { @Override public boolean process(Library library) { - List classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES)); - - boolean detected = JsLibraryStdDetectionUtil.getJsLibraryStdVersion(classes) != null; - - if (detected) { + if (JsLibraryStdDetectionUtil.hasJsStdlibJar(library)) { jsLibrary.set(library); return false; } diff --git a/idea/src/org/jetbrains/jet/plugin/framework/JSLibraryStdPresentationProvider.java b/idea/src/org/jetbrains/jet/plugin/framework/JSLibraryStdPresentationProvider.java index 5ea6ee3003e..61c261fea54 100644 --- a/idea/src/org/jetbrains/jet/plugin/framework/JSLibraryStdPresentationProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/framework/JSLibraryStdPresentationProvider.java @@ -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