From 4f1181266853c10965b638af9da5dd0761bf150a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 17 Aug 2018 18:14:02 +0200 Subject: [PATCH] Report error instead of throwing exception in JvmPackagePartProvider --- .../jvm/compiler/JvmPackagePartProvider.kt | 26 ++++++++++++++----- .../cli/jvm/compiler/KotlinCoreEnvironment.kt | 4 +-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmPackagePartProvider.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmPackagePartProvider.kt index 3360078d5c0..03e043e1f37 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmPackagePartProvider.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmPackagePartProvider.kt @@ -19,16 +19,21 @@ package org.jetbrains.kotlin.cli.jvm.compiler import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.GlobalSearchScope import com.intellij.util.SmartList +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.LOGGING +import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.index.JavaRoot import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.load.kotlin.PackagePartProvider -import org.jetbrains.kotlin.load.kotlin.loadModuleMapping import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider +import java.io.ByteArrayOutputStream import java.io.EOFException +import java.io.PrintStream class JvmPackagePartProvider( languageVersionSettings: LanguageVersionSettings, @@ -77,7 +82,7 @@ class JvmPackagePartProvider( }.flatten() } - fun addRoots(roots: List) { + fun addRoots(roots: List, messageCollector: MessageCollector) { for ((root, type) in roots) { if (type != JavaRoot.RootType.BINARY) continue if (root !in scope) continue @@ -86,12 +91,21 @@ class JvmPackagePartProvider( for (moduleFile in metaInf.children) { if (!moduleFile.name.endsWith(ModuleMapping.MAPPING_FILE_EXT)) continue - val mapping = try { - ModuleMapping.loadModuleMapping(moduleFile.contentsToByteArray(), moduleFile.toString(), deserializationConfiguration) + try { + val mapping = ModuleMapping.loadModuleMapping( + moduleFile.contentsToByteArray(), moduleFile.toString(), deserializationConfiguration + ) + loadedModules.add(ModuleMappingInfo(root, mapping, moduleFile.nameWithoutExtension)) } catch (e: EOFException) { - throw RuntimeException("Error on reading package parts from $moduleFile in $root", e) + messageCollector.report( + ERROR, "Error occurred when reading the module: ${e.message}", CompilerMessageLocation.create(moduleFile.path) + ) + messageCollector.report( + LOGGING, + String(ByteArrayOutputStream().also { e.printStackTrace(PrintStream(it)) }.toByteArray()), + CompilerMessageLocation.create(moduleFile.path) + ) } - loadedModules.add(ModuleMappingInfo(root, mapping, moduleFile.nameWithoutExtension)) } } } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index 96017de9c8b..15515e4668f 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -307,7 +307,7 @@ class KotlinCoreEnvironment private constructor( fun createPackagePartProvider(scope: GlobalSearchScope): JvmPackagePartProvider { return JvmPackagePartProvider(configuration.languageVersionSettings, scope).apply { - addRoots(initialRoots) + addRoots(initialRoots, configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)) packagePartProviders += this (ModuleAnnotationsResolver.getInstance(project) as CliModuleAnnotationsResolver).addPackagePartProvider(this) } @@ -365,7 +365,7 @@ class KotlinCoreEnvironment private constructor( val newRoots = classpathRootsResolver.convertClasspathRoots(contentRoots).roots for (packagePartProvider in packagePartProviders) { - packagePartProvider.addRoots(newRoots) + packagePartProvider.addRoots(newRoots, configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)) } return rootsIndex.addNewIndexForRoots(newRoots)?.let { newIndex ->