[ui] I/O error handling in "Edit custom settings" action (EA-91670)
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Fri, 11 Nov 2016 15:40:54 +0000 (16:40 +0100)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Fri, 11 Nov 2016 15:41:18 +0000 (16:41 +0100)
platform/platform-impl/src/com/intellij/ide/actions/EditCustomSettingsAction.kt
platform/platform-resources-en/src/messages/IdeBundle.properties

index 64dc736a5daa93ee725c3cf2f3181395a87c2021..e07ee7f413774608e921ec4cf480338fdcfff9aa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 package com.intellij.ide.actions
 
+import com.intellij.CommonBundle
 import com.intellij.diagnostic.VMOptions
 import com.intellij.ide.IdeBundle
 import com.intellij.openapi.actionSystem.AnActionEvent
 import com.intellij.openapi.application.ApplicationNamesInfo
 import com.intellij.openapi.application.PathManager
+import com.intellij.openapi.diagnostic.Logger
 import com.intellij.openapi.fileEditor.OpenFileDescriptor
 import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessExtension
 import com.intellij.openapi.project.DumbAwareAction
@@ -28,6 +30,7 @@ import com.intellij.openapi.util.io.FileUtil
 import com.intellij.openapi.vfs.LocalFileSystem
 import com.intellij.openapi.vfs.VirtualFile
 import java.io.File
+import java.io.IOException
 
 abstract class EditCustomSettingsAction : DumbAwareAction() {
   protected abstract fun file(): File?
@@ -42,10 +45,19 @@ abstract class EditCustomSettingsAction : DumbAwareAction() {
     val file = file() ?: return
 
     if (!file.exists()) {
-      val message = IdeBundle.message("edit.custom.settings.confirm", FileUtil.getLocationRelativeToUserHome(file.path))
-      val result = Messages.showYesNoDialog(project, message, e.presentation.text!!, Messages.getQuestionIcon())
+      val confirmation = IdeBundle.message("edit.custom.settings.confirm", FileUtil.getLocationRelativeToUserHome(file.path))
+      val result = Messages.showYesNoDialog(project, confirmation, e.presentation.text!!, Messages.getQuestionIcon())
       if (result == Messages.NO) return
-      FileUtil.writeToFile(file, template())
+
+      try {
+        FileUtil.writeToFile(file, template())
+      }
+      catch(ex: IOException) {
+        Logger.getInstance(javaClass).warn(ex)
+        val message = IdeBundle.message("edit.custom.settings.failed", file, ex.message)
+        Messages.showErrorDialog(project, message, CommonBundle.message("title.error"))
+        return
+      }
     }
 
     val vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file)
index 3d7dfa6d9ab5ba68201fa6e1a2c2c6fe86b49269..5dd37ba6cda3ee72186629ddaad4ae46e68cc20c 100644 (file)
@@ -1212,6 +1212,8 @@ go.to.class.toolwindow.title=Classes matching pattern
 go.to.class.dumb.mode.message=Go To Class action is not available until indices are built, using Go To File instead
 
 edit.custom.settings.confirm=File \n''{0}''\n does not exist. Create?
+edit.custom.settings.failed=Cannot create file ''{0}'': {1}
+
 warning.load.project.from.share=You are opening a project from a network share. Do you trust this location?\n{0}
 title.load.project.from.share=Loading Project From Network
 warning.load.file.from.share=You are opening a file from a network share. Do you want to continue?\n{0}