From 88da3fe44da238d0e39bd496a393ec7fd17b52d4 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 4 Apr 2016 20:35:02 +0300 Subject: [PATCH] Check that library isn't already disposed before use to avoid exceptions like in #EA-79154 --- .../idea/framework/JsLibraryStdDetectionUtil.java | 5 ++++- .../framework/KotlinJavaScriptLibraryDetectionUtil.kt | 11 +++++++---- 2 files changed, 11 insertions(+), 5 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 4699d5c3c51..672d41e7384 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 @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.framework; import com.intellij.openapi.roots.OrderRootType; +import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.JarUtil; @@ -41,6 +42,8 @@ public class JsLibraryStdDetectionUtil { } public static boolean hasJsStdlibJar(@NotNull Library library) { + if (library instanceof LibraryEx && ((LibraryEx) library).isDisposed()) return false; + if (!KotlinJavaScriptLibraryDetectionUtil.isKotlinJavaScriptLibrary(library)) return false; List classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES)); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/KotlinJavaScriptLibraryDetectionUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/KotlinJavaScriptLibraryDetectionUtil.kt index b908289a807..928198ee358 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/KotlinJavaScriptLibraryDetectionUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/KotlinJavaScriptLibraryDetectionUtil.kt @@ -1,6 +1,6 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,8 @@ package org.jetbrains.kotlin.idea.framework import com.intellij.openapi.roots.OrderRootType +import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.libraries.Library -import com.intellij.openapi.util.Key import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.idea.caches.JarUserDataManager @@ -27,8 +27,11 @@ import org.jetbrains.kotlin.js.JavaScript import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils object KotlinJavaScriptLibraryDetectionUtil { - @JvmStatic fun isKotlinJavaScriptLibrary(library: Library): Boolean = - isKotlinJavaScriptLibrary(library.getFiles(OrderRootType.CLASSES).toList()) + @JvmStatic fun isKotlinJavaScriptLibrary(library: Library): Boolean { + if (library is LibraryEx && library.isDisposed) return false + + return isKotlinJavaScriptLibrary(library.getFiles(OrderRootType.CLASSES).toList()) + } @JvmStatic fun isKotlinJavaScriptLibrary(classesRoots: List): Boolean { // Prevent clashing with java runtime