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.spring.SpringBundle
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
class GenerateKotlinAutowiredDependencyAction : GenerateKotlinSpringBeanDependencyAction(
@@ -34,8 +32,6 @@ class GenerateKotlinAutowiredDependencyAction : GenerateKotlinSpringBeanDependen
override fun invoke(project: Project, editor: Editor, file: PsiFile) {
val klass = getTargetClass(editor, file) as? KtClass ?: return
val lightClass = klass.toLightClass() ?: return
project
.executeWriteCommand<List<BatchTemplateRunner>>("") { generateAutowiredDependenciesFor(lightClass) }
.forEach { it.runTemplates() }
generateAutowiredDependenciesFor(lightClass).forEach { it.runTemplates() }
}
}
@@ -25,8 +25,6 @@ import com.intellij.spring.SpringBundle
import com.intellij.spring.SpringManager
import com.intellij.spring.model.utils.SpringModelUtils
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
abstract class GenerateKotlinSpringBeanXmlDependencyAction(
@@ -56,9 +54,7 @@ abstract class GenerateKotlinSpringBeanXmlDependencyAction(
val klass = getTargetClass(editor, file) as? KtClass ?: return
val lightClass = klass.toLightClass() ?: return
val springModel = SpringModelUtils.getInstance().getPsiClassSpringModel(lightClass)
val templates = project.executeWriteCommand<List<BatchTemplateRunner>>("") {
generateDependenciesFor(springModel, lightClass, injectionKind)
}
val templates = generateDependenciesFor(springModel, lightClass, injectionKind)
templates.forEach { it.runTemplates() }
}
}
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.spring.generate
import com.intellij.codeInsight.template.TemplateBuilderImpl
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiClass
import com.intellij.spring.CommonSpringModel
@@ -105,8 +106,11 @@ private fun createAutowiredDependency(
): BatchTemplateRunner? {
val candidateBeanClasses = candidateBean.effectiveBeanClasses().ifEmpty { return null }
if (!GenerateSpringBeanDependenciesUtil.ensureFileWritable(klass)) return null
val property = createAutowiredProperty(klass, candidateBean, candidateBeanClasses, model) ?: return null
return addCreatePropertyTemplate(property, candidateBean, candidateBeanClasses)
return runWriteAction {
createAutowiredProperty(klass, candidateBean, candidateBeanClasses, model)?.let { property ->
addCreatePropertyTemplate(property, candidateBean, candidateBeanClasses)
}
}
}
fun generateAutowiredDependenciesFor(klass: KtLightClass): List<BatchTemplateRunner> {
@@ -114,7 +118,8 @@ fun generateAutowiredDependenciesFor(klass: KtLightClass): List<BatchTemplateRun
val candidates = GenerateSpringBeanDependenciesUtil.getAutowiredBeanCandidates(model) { true }
val dependencies = if (ApplicationManager.getApplication().isUnitTestMode) {
candidates.map { it.springBean }.filter(klass.project.beanFilter).sortedBy { it.name }
} else {
}
else {
GenerateSpringBeanDependenciesUtil.chooseDependentBeans(candidates, klass.project, true)
}
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.codeInspection.SmartHashMap
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key
import com.intellij.psi.*
@@ -439,11 +440,13 @@ private fun generateDependency(
dependency: SpringBeanPointer<CommonSpringBean>,
injectionKind: SpringDependencyInjectionKind
): BatchTemplateRunner? {
return if (injectionKind.isSetter) {
createSetterDependency(springBean, dependency, injectionKind)
}
else {
createConstructorDependency(springBean, dependency)
return runWriteAction {
if (injectionKind.isSetter) {
createSetterDependency(springBean, dependency, injectionKind)
}
else {
createConstructorDependency(springBean, dependency)
}
}
}