Spring dependency-generations actions: runWriteAction moved to the proper place (KT-18385)

This commit is contained in:
Nicolay Mitropolsky
2017-06-22 16:38:54 +03:00
committed by Nikolay Krasko
parent ca19ea8205
commit 532560ef43
4 changed files with 18 additions and 18 deletions
@@ -22,8 +22,6 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.spring.SpringBundle import com.intellij.spring.SpringBundle
import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.editor.BatchTemplateRunner
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClass
class GenerateKotlinAutowiredDependencyAction : GenerateKotlinSpringBeanDependencyAction( class GenerateKotlinAutowiredDependencyAction : GenerateKotlinSpringBeanDependencyAction(
@@ -34,8 +32,6 @@ class GenerateKotlinAutowiredDependencyAction : GenerateKotlinSpringBeanDependen
override fun invoke(project: Project, editor: Editor, file: PsiFile) { override fun invoke(project: Project, editor: Editor, file: PsiFile) {
val klass = getTargetClass(editor, file) as? KtClass ?: return val klass = getTargetClass(editor, file) as? KtClass ?: return
val lightClass = klass.toLightClass() ?: return val lightClass = klass.toLightClass() ?: return
project generateAutowiredDependenciesFor(lightClass).forEach { it.runTemplates() }
.executeWriteCommand<List<BatchTemplateRunner>>("") { generateAutowiredDependenciesFor(lightClass) }
.forEach { it.runTemplates() }
} }
} }
@@ -25,8 +25,6 @@ import com.intellij.spring.SpringBundle
import com.intellij.spring.SpringManager import com.intellij.spring.SpringManager
import com.intellij.spring.model.utils.SpringModelUtils import com.intellij.spring.model.utils.SpringModelUtils
import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.editor.BatchTemplateRunner
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClass
abstract class GenerateKotlinSpringBeanXmlDependencyAction( abstract class GenerateKotlinSpringBeanXmlDependencyAction(
@@ -56,9 +54,7 @@ abstract class GenerateKotlinSpringBeanXmlDependencyAction(
val klass = getTargetClass(editor, file) as? KtClass ?: return val klass = getTargetClass(editor, file) as? KtClass ?: return
val lightClass = klass.toLightClass() ?: return val lightClass = klass.toLightClass() ?: return
val springModel = SpringModelUtils.getInstance().getPsiClassSpringModel(lightClass) val springModel = SpringModelUtils.getInstance().getPsiClassSpringModel(lightClass)
val templates = project.executeWriteCommand<List<BatchTemplateRunner>>("") { val templates = generateDependenciesFor(springModel, lightClass, injectionKind)
generateDependenciesFor(springModel, lightClass, injectionKind)
}
templates.forEach { it.runTemplates() } templates.forEach { it.runTemplates() }
} }
} }
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.spring.generate
import com.intellij.codeInsight.template.TemplateBuilderImpl import com.intellij.codeInsight.template.TemplateBuilderImpl
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import com.intellij.spring.CommonSpringModel import com.intellij.spring.CommonSpringModel
@@ -105,8 +106,11 @@ private fun createAutowiredDependency(
): BatchTemplateRunner? { ): BatchTemplateRunner? {
val candidateBeanClasses = candidateBean.effectiveBeanClasses().ifEmpty { return null } val candidateBeanClasses = candidateBean.effectiveBeanClasses().ifEmpty { return null }
if (!GenerateSpringBeanDependenciesUtil.ensureFileWritable(klass)) return null if (!GenerateSpringBeanDependenciesUtil.ensureFileWritable(klass)) return null
val property = createAutowiredProperty(klass, candidateBean, candidateBeanClasses, model) ?: return null return runWriteAction {
return addCreatePropertyTemplate(property, candidateBean, candidateBeanClasses) createAutowiredProperty(klass, candidateBean, candidateBeanClasses, model)?.let { property ->
addCreatePropertyTemplate(property, candidateBean, candidateBeanClasses)
}
}
} }
fun generateAutowiredDependenciesFor(klass: KtLightClass): List<BatchTemplateRunner> { fun generateAutowiredDependenciesFor(klass: KtLightClass): List<BatchTemplateRunner> {
@@ -114,7 +118,8 @@ fun generateAutowiredDependenciesFor(klass: KtLightClass): List<BatchTemplateRun
val candidates = GenerateSpringBeanDependenciesUtil.getAutowiredBeanCandidates(model) { true } val candidates = GenerateSpringBeanDependenciesUtil.getAutowiredBeanCandidates(model) { true }
val dependencies = if (ApplicationManager.getApplication().isUnitTestMode) { val dependencies = if (ApplicationManager.getApplication().isUnitTestMode) {
candidates.map { it.springBean }.filter(klass.project.beanFilter).sortedBy { it.name } candidates.map { it.springBean }.filter(klass.project.beanFilter).sortedBy { it.name }
} else { }
else {
GenerateSpringBeanDependenciesUtil.chooseDependentBeans(candidates, klass.project, true) GenerateSpringBeanDependenciesUtil.chooseDependentBeans(candidates, klass.project, true)
} }
return dependencies.mapNotNull { createAutowiredDependency(klass, it, model) } return dependencies.mapNotNull { createAutowiredDependency(klass, it, model) }
@@ -24,6 +24,7 @@ import com.intellij.codeInsight.template.TemplateBuilderImpl
import com.intellij.codeInsight.template.TextResult import com.intellij.codeInsight.template.TextResult
import com.intellij.codeInspection.SmartHashMap import com.intellij.codeInspection.SmartHashMap
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.psi.* import com.intellij.psi.*
@@ -439,11 +440,13 @@ private fun generateDependency(
dependency: SpringBeanPointer<CommonSpringBean>, dependency: SpringBeanPointer<CommonSpringBean>,
injectionKind: SpringDependencyInjectionKind injectionKind: SpringDependencyInjectionKind
): BatchTemplateRunner? { ): BatchTemplateRunner? {
return if (injectionKind.isSetter) { return runWriteAction {
createSetterDependency(springBean, dependency, injectionKind) if (injectionKind.isSetter) {
} createSetterDependency(springBean, dependency, injectionKind)
else { }
createConstructorDependency(springBean, dependency) else {
createConstructorDependency(springBean, dependency)
}
} }
} }