Make sure that library file still exists before calling loadMetadata from JsResolverForModuleFactory since IDE model could be outdated
#EA-218905 fixed
This commit is contained in:
+13
-1
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.caches.resolve
|
package org.jetbrains.kotlin.caches.resolve
|
||||||
|
|
||||||
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import org.jetbrains.kotlin.analyzer.*
|
import org.jetbrains.kotlin.analyzer.*
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
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.KotlinJavascriptSerializationUtil
|
||||||
import org.jetbrains.kotlin.serialization.js.createKotlinJavascriptPackageFragmentProvider
|
import org.jetbrains.kotlin.serialization.js.createKotlinJavascriptPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
private val LOG = Logger.getInstance(JsResolverForModuleFactory::class.java)
|
||||||
|
|
||||||
class JsResolverForModuleFactory(
|
class JsResolverForModuleFactory(
|
||||||
private val targetEnvironment: TargetEnvironment
|
private val targetEnvironment: TargetEnvironment
|
||||||
@@ -85,7 +89,15 @@ internal fun <M : ModuleInfo> createPackageFragmentProvider(
|
|||||||
}
|
}
|
||||||
is LibraryModuleInfo -> {
|
is LibraryModuleInfo -> {
|
||||||
moduleInfo.getLibraryRoots()
|
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() }
|
.filter { it.version.isCompatible() }
|
||||||
.map { metadata ->
|
.map { metadata ->
|
||||||
val (header, packageFragmentProtos) =
|
val (header, packageFragmentProtos) =
|
||||||
|
|||||||
Reference in New Issue
Block a user