From cde84a79235aca39ebc81358d01d970a4ee5c049 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 28 Dec 2017 12:15:25 +0100 Subject: [PATCH] Handle I/O exceptions when updating library jars EA-101940 - FNFE: FileUtil.openOutputStream --- .../idea/versions/KotlinJVMRuntimeLibraryUtil.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/KotlinJVMRuntimeLibraryUtil.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/KotlinJVMRuntimeLibraryUtil.kt index 96ae745f5f5..19417e30de8 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/KotlinJVMRuntimeLibraryUtil.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/KotlinJVMRuntimeLibraryUtil.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.idea.framework.JavaRuntimeDetectionUtil import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.projectStructure.allModules import java.io.File +import java.io.IOException fun updateLibraries(project: Project, libraries: Collection) { if (project.allModules().any { module -> KotlinPluginUtil.isMavenModule(module) }) { @@ -92,7 +93,15 @@ private fun updateJar( } val jarFileToReplace = getLocalJar(fileToReplace)!! - val newVFile = replaceFile(jarPath, jarFileToReplace) + val newVFile = try { + replaceFile(jarPath, jarFileToReplace) + } catch (e: IOException) { + Messages.showErrorDialog(project, + "Failed to update $jarPath: ${e.message}", + "Library update failed") + return + } + if (newVFile != null) { val model = library.modifiableModel runWriteAction {