Add an ability to provide own handler for errors inside KotlinJavascriptMetadataUtils.loadMetadata
Use a logger to handle errors inside loadMetadata when it's used from IDE (JsResolverForModuleFactory). #EA-218905
This commit is contained in:
+4
-1
@@ -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
|
||||
@@ -26,6 +27,8 @@ import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
|
||||
import org.jetbrains.kotlin.serialization.js.createKotlinJavascriptPackageFragmentProvider
|
||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||
|
||||
private val LOG = Logger.getInstance(JsResolverForModuleFactory::class.java)
|
||||
|
||||
class JsResolverForModuleFactory(
|
||||
private val targetEnvironment: TargetEnvironment
|
||||
) : ResolverForModuleFactory() {
|
||||
@@ -85,7 +88,7 @@ internal fun <M : ModuleInfo> createPackageFragmentProvider(
|
||||
}
|
||||
is LibraryModuleInfo -> {
|
||||
moduleInfo.getLibraryRoots()
|
||||
.flatMap { KotlinJavascriptMetadataUtils.loadMetadata(it) }
|
||||
.flatMap { KotlinJavascriptMetadataUtils.loadMetadata(it) { msg -> LOG.error(msg) } }
|
||||
.filter { it.version.isCompatible() }
|
||||
.map { metadata ->
|
||||
val (header, packageFragmentProtos) =
|
||||
|
||||
@@ -65,8 +65,11 @@ object KotlinJavascriptMetadataUtils {
|
||||
"\"${Base64.getEncoder().encodeToString(content)}\");\n"
|
||||
|
||||
@JvmStatic
|
||||
fun loadMetadata(file: File): List<KotlinJavascriptMetadata> {
|
||||
assert(file.exists()) { "Library $file not found" }
|
||||
fun loadMetadata(file: File, onError: (message: String) -> Unit = ::error): List<KotlinJavascriptMetadata> {
|
||||
if (!file.exists()) {
|
||||
onError("Library $file not found")
|
||||
return emptyList()
|
||||
}
|
||||
val metadataList = arrayListOf<KotlinJavascriptMetadata>()
|
||||
JsLibraryUtils.traverseJsLibrary(file) { library ->
|
||||
parseMetadata(library.content, metadataList)
|
||||
@@ -76,7 +79,7 @@ object KotlinJavascriptMetadataUtils {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun loadMetadata(path: String): List<KotlinJavascriptMetadata> = loadMetadata(File(path))
|
||||
fun loadMetadata(path: String, onError: (message: String) -> Unit): List<KotlinJavascriptMetadata> = loadMetadata(File(path), onError)
|
||||
|
||||
@JvmStatic
|
||||
fun parseMetadata(text: CharSequence, metadataList: MutableList<KotlinJavascriptMetadata>) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -881,7 +881,7 @@ abstract class BasicBoxTest(
|
||||
|
||||
companion object {
|
||||
val METADATA_CACHE = (JsConfig.JS_STDLIB + JsConfig.JS_KOTLIN_TEST).flatMap { path ->
|
||||
KotlinJavascriptMetadataUtils.loadMetadata(path).map { metadata ->
|
||||
KotlinJavascriptMetadataUtils.loadMetadata(path, ::error).map { metadata ->
|
||||
val parts = KotlinJavascriptSerializationUtil.readModuleAsProto(metadata.body, metadata.version)
|
||||
JsModuleDescriptor(metadata.moduleName, parts.kind, parts.importedModules, parts)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user