From ffb9cb0ce0ae3d124955b877db2876ee167cc7a0 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 14 Aug 2015 20:47:05 +0300 Subject: [PATCH] Cache information about library in file user data (KT-8537) KT-8537 Kotlin plugin is causing Intellij to freeze during Indexing #Fix KT-8537 --- .../framework/JsLibraryStdDetectionUtil.java | 16 ++++++++++++---- .../idea/project/ProjectStructureUtil.java | 5 +++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.java index d88a9d9bbfe..a6f8d36acbc 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.java @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.framework; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.JarUtil; import com.intellij.openapi.vfs.StandardFileSystems; import com.intellij.openapi.vfs.VfsUtilCore; @@ -33,6 +34,7 @@ import java.util.List; import java.util.jar.Attributes; public class JsLibraryStdDetectionUtil { + private static final Key IS_JS_LIBRARY_STD_LIB = Key.create("IS_JS_LIBRARY_STD_LIB"); public static String getJsLibraryStdVersion(@NotNull List classesRoots) { return getJsLibraryStdVersion(classesRoots, true); @@ -52,8 +54,6 @@ public class JsLibraryStdDetectionUtil { VirtualFile jar = fixedJarName ? LibraryUtils.getJarFile(classesRoots, PathUtil.JS_LIB_JAR_NAME) : getJsStdLibJar(classesRoots); if (jar == null) return null; - assert KotlinJavaScriptLibraryDetectionUtil.isKotlinJavaScriptLibrary(classesRoots) : "StdLib should also be detected as Kotlin/Javascript library"; - return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jar), Attributes.Name.IMPLEMENTATION_VERSION); } @@ -63,8 +63,16 @@ public class JsLibraryStdDetectionUtil { if (root.getFileSystem().getProtocol() != StandardFileSystems.JAR_PROTOCOL) continue; VirtualFile jar = VfsUtilCore.getVirtualFileForJar(root); - if (jar != null && LibraryUtils.isKotlinJavascriptStdLibrary(new File(jar.getPath()))) { - return jar; + if (jar != null) { + Boolean isJSStdLib = jar.getUserData(IS_JS_LIBRARY_STD_LIB); + if (isJSStdLib == null) { + isJSStdLib = LibraryUtils.isKotlinJavascriptStdLibrary(new File(jar.getPath())); + jar.putUserData(IS_JS_LIBRARY_STD_LIB, isJSStdLib); + } + + if (isJSStdLib) { + return jar; + } } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java index 617ae52dbed..163e6a900e7 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java @@ -68,8 +68,9 @@ public class ProjectStructureUtil { result = CachedValuesManager.getManager(module.getProject()).createCachedValue(new CachedValueProvider() { @Override public Result compute() { - return Result.create(getJSStandardLibrary(module) != null, ProjectRootModificationTracker - .getInstance(module.getProject())); + return Result.create( + getJSStandardLibrary(module) != null, + ProjectRootModificationTracker.getInstance(module.getProject())); } }, false);