From a8623b9b287e70e77191b052cdde95f26e090ac6 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Wed, 27 May 2020 23:13:39 +0300 Subject: [PATCH] Make sure that library file still exists before calling loadMetadata from JsResolverForModuleFactory since IDE model could be outdated #EA-218905 fixed --- .../caches/resolve/JsResolverForModuleFactory.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsResolverForModuleFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsResolverForModuleFactory.kt index 4d036e712e2..52de11d0adc 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsResolverForModuleFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsResolverForModuleFactory.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.caches.resolve +import com.intellij.openapi.diagnostic.Logger import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.container.StorageComponentContainer @@ -25,6 +26,9 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil import org.jetbrains.kotlin.serialization.js.createKotlinJavascriptPackageFragmentProvider import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils +import java.io.File + +private val LOG = Logger.getInstance(JsResolverForModuleFactory::class.java) class JsResolverForModuleFactory( private val targetEnvironment: TargetEnvironment @@ -85,7 +89,15 @@ internal fun createPackageFragmentProvider( } is LibraryModuleInfo -> { moduleInfo.getLibraryRoots() - .flatMap { KotlinJavascriptMetadataUtils.loadMetadata(it) } + .flatMap { + if (File(it).exists()) { + KotlinJavascriptMetadataUtils.loadMetadata(it) + } else { + // TODO can/should we warn a user about a problem in a library root? If so how? + LOG.error("Library $it not found") + emptyList() + } + } .filter { it.version.isCompatible() } .map { metadata -> val (header, packageFragmentProtos) =