@@ -2,10 +2,14 @@ package org.utbot.intellij.plugin.util
2
2
3
3
import com.intellij.coverage.CoverageExecutor
4
4
import com.intellij.execution.ExecutorRegistry
5
+ import com.intellij.execution.JavaTestConfigurationBase
5
6
import com.intellij.execution.Location
6
7
import com.intellij.execution.PsiLocation
7
8
import com.intellij.execution.RunManagerEx
8
9
import com.intellij.execution.actions.ConfigurationContext
10
+ import com.intellij.execution.actions.ConfigurationFromContext
11
+ import com.intellij.execution.actions.RunConfigurationProducer
12
+ import com.intellij.execution.configurations.RunConfiguration
9
13
import com.intellij.execution.executors.DefaultRunExecutor
10
14
import com.intellij.execution.runners.ExecutionUtil
11
15
import com.intellij.execution.runners.ProgramRunner
@@ -23,6 +27,7 @@ import com.intellij.psi.PsiElement
23
27
import com.intellij.psi.PsiFile
24
28
import com.intellij.psi.SmartPsiElementPointer
25
29
import com.intellij.psi.util.childrenOfType
30
+ import java.util.Comparator
26
31
import mu.KotlinLogging
27
32
import org.utbot.intellij.plugin.models.GenerateTestsModel
28
33
import org.utbot.intellij.plugin.util.IntelliJApiHelper.run
@@ -59,6 +64,20 @@ class RunConfigurationHelper {
59
64
companion object {
60
65
private val logger = KotlinLogging .logger {}
61
66
67
+ private fun RunConfiguration.isPatternBased () = this is JavaTestConfigurationBase && testType == " pattern"
68
+
69
+ // In case we do "generate and run" for many files at once,
70
+ // desired run configuration has to be one of "pattern" typed test configuration that may run many tests at once.
71
+ // Thus, we sort list of all provided configurations to get desired configuration the first.
72
+ private val rcComparator = Comparator <ConfigurationFromContext > { o1, o2 ->
73
+ val p1 = o1.configuration.isPatternBased()
74
+ val p2 = o2.configuration.isPatternBased()
75
+ if (p1 xor p2) {
76
+ return @Comparator if (p1) - 1 else 1
77
+ }
78
+ ConfigurationFromContext .COMPARATOR .compare(o1, o2)
79
+ }
80
+
62
81
fun runTestsWithCoverage (
63
82
model : GenerateTestsModel ,
64
83
testFilesPointers : MutableList <SmartPsiElementPointer <PsiFile >>,
@@ -86,10 +105,12 @@ class RunConfigurationHelper {
86
105
)
87
106
run (IntelliJApiHelper .Target .THREAD_POOL ) {
88
107
val configurations = ApplicationManager .getApplication().runReadAction(Computable {
89
- myConfigurationContext.configurationsFromContext
108
+ return @Computable RunConfigurationProducer .getProducers(model.project)
109
+ .mapNotNull { it.findOrCreateConfigurationFromContext(myConfigurationContext) }
110
+ .toMutableList().sortedWith(rcComparator)
90
111
})
91
112
92
- val settings = if (configurations.isNullOrEmpty ()) null else configurations[0 ].configurationSettings
113
+ val settings = if (configurations.isEmpty ()) null else configurations[0 ].configurationSettings
93
114
if (settings != null ) {
94
115
val executor = if (ProgramRunner .getRunner(CoverageExecutor .EXECUTOR_ID , settings.configuration) != null ) {
95
116
ExecutorRegistry .getInstance().getExecutorById(CoverageExecutor .EXECUTOR_ID ) ? : DefaultRunExecutor .getRunExecutorInstance()
@@ -113,6 +134,5 @@ class RunConfigurationHelper {
113
134
}
114
135
}
115
136
}
116
-
117
137
}
118
138
}
0 commit comments