Fix NoSwingUnderWriteActionException in KotlinAndroidAddStringResource

This commit is contained in:
Vyacheslav Gerasimov
2017-04-07 16:34:42 +03:00
parent 2f159bb64b
commit 70d24d0108
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.intentions.SelfTargetingIntention import org.jetbrains.kotlin.idea.intentions.SelfTargetingIntention
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
@@ -60,6 +61,8 @@ class KotlinAndroidAddStringResource : SelfTargetingIntention<KtLiteralStringTem
private val RESOURCE_DIR_ERROR = "check.resource.dir.error" private val RESOURCE_DIR_ERROR = "check.resource.dir.error"
} }
override fun startInWriteAction(): Boolean = false
override fun isApplicableTo(element: KtLiteralStringTemplateEntry, caretOffset: Int): Boolean { override fun isApplicableTo(element: KtLiteralStringTemplateEntry, caretOffset: Int): Boolean {
if (AndroidFacet.getInstance(element.containingFile) == null) { if (AndroidFacet.getInstance(element.containingFile) == null) {
return false return false
@@ -91,19 +94,20 @@ class KotlinAndroidAddStringResource : SelfTargetingIntention<KtLiteralStringTem
val parameters = getCreateXmlResourceParameters(facet.module, element, file.virtualFile) ?: return val parameters = getCreateXmlResourceParameters(facet.module, element, file.virtualFile) ?: return
if (!AndroidResourceUtil.createValueResource(project, parameters.resourceDirectory, parameters.name, ResourceType.STRING, runWriteAction {
parameters.fileName, parameters.directoryNames, parameters.value)) { if (!AndroidResourceUtil.createValueResource(project, parameters.resourceDirectory, parameters.name, ResourceType.STRING,
return parameters.fileName, parameters.directoryNames, parameters.value)) {
} return@runWriteAction
}
createResourceReference(facet.module, editor, file, element, manifestPackage, parameters.name, ResourceType.STRING) createResourceReference(facet.module, editor, file, element, manifestPackage, parameters.name, ResourceType.STRING)
PsiDocumentManager.getInstance(project).commitAllDocuments() PsiDocumentManager.getInstance(project).commitAllDocuments()
UndoUtil.markPsiFileForUndo(file) UndoUtil.markPsiFileForUndo(file)
}
} }
private fun getCreateXmlResourceParameters(module: Module, element: KtLiteralStringTemplateEntry, private fun getCreateXmlResourceParameters(module: Module, element: KtLiteralStringTemplateEntry,
contextFile: VirtualFile): CreateXmlResourceParameters? { contextFile: VirtualFile): CreateXmlResourceParameters? {
val stringValue = element.text val stringValue = element.text
val showDialog = !ApplicationManager.getApplication().isUnitTestMode val showDialog = !ApplicationManager.getApplication().isUnitTestMode