Fix NoSwingUnderWriteActionException in KotlinAndroidAddStringResource
This commit is contained in:
+12
-8
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user