@@ -2,6 +2,7 @@ package org.utbot.intellij.plugin.settings
22
33import com.intellij.openapi.components.service
44import com.intellij.openapi.project.Project
5+ import com.intellij.openapi.ui.ComboBox
56import com.intellij.openapi.ui.DialogPanel
67import com.intellij.ui.ContextHelpLabel
78import com.intellij.ui.components.JBLabel
@@ -10,6 +11,7 @@ import com.intellij.ui.layout.LayoutBuilder
1011import com.intellij.ui.layout.PropertyBinding
1112import com.intellij.ui.layout.labelTable
1213import com.intellij.ui.layout.panel
14+ import com.intellij.ui.layout.selectedValueMatches
1315import com.intellij.ui.layout.slider
1416import com.intellij.ui.layout.withValueBinding
1517import com.intellij.util.castSafelyTo
@@ -29,27 +31,42 @@ import org.utbot.framework.plugin.api.JavaDocCommentStyle
2931import org.utbot.framework.plugin.api.TreatOverflowAsError
3032import org.utbot.intellij.plugin.ui.components.CodeGenerationSettingItemRenderer
3133import javax.swing.JSlider
34+ import org.utbot.framework.plugin.api.isSummarizationCompatible
3235
3336class SettingsWindow (val project : Project ) {
3437 private val settings = project.service<Settings >()
3538
3639 // TODO it is better to use something like SearchEverywhere for classes but it is complicated to implement
40+ private lateinit var codegenLanguageCombo: ComboBox <CodegenLanguage >
3741 private val excludeTable = MockAlwaysClassesTable (project)
3842 private lateinit var runInspectionAfterTestGenerationCheckBox: JCheckBox
3943 private lateinit var forceMockCheckBox: JCheckBox
4044 private lateinit var enableSummarizationGenerationCheckBox: JCheckBox
4145
4246 val panel: JPanel = panel {
47+ row(" Generated test language:" ) {
48+ cell {
49+ codegenLanguageCombo = comboBox(
50+ DefaultComboBoxModel (CodegenLanguage .values()),
51+ getter = { settings.providerNameByServiceLoader(CodegenLanguage ::class ) as CodegenLanguage },
52+ setter = { settings.setProviderByLoader(CodegenLanguage ::class , it as CodeGenerationSettingItem ) }
53+ ).apply {
54+ component.renderer = CodeGenerationSettingItemRenderer ()
55+ ContextHelpLabel .create(" You can generate test methods in Java or Kotlin regardless of your source code language." )
56+ }.component
57+ codegenLanguageCombo.addActionListener {
58+ if (! codegenLanguageCombo.item.isSummarizationCompatible()) {
59+ enableSummarizationGenerationCheckBox.isSelected = false
60+ }
61+ }
62+ }
63+ }
4364 val valuesComboBox: LayoutBuilder .(KClass <* >, Array <* >) -> Unit = { loader, values ->
4465 val serviceLabels = mapOf (
45- CodegenLanguage ::class to "Generated test language:",
4666 RuntimeExceptionTestsBehaviour ::class to "Tests with exceptions:",
4767 TreatOverflowAsError ::class to "Overflow detection:",
4868 JavaDocCommentStyle ::class to "Javadoc comment style:"
4969 )
50- val tooltipLabels = mapOf (
51- CodegenLanguage ::class to "You can generate test methods in Java or Kotlin regardless of your source code language."
52- )
5370
5471 row(serviceLabels[loader] ? : error(" Unknown service loader: $loader " )) {
5572 cell {
@@ -59,14 +76,11 @@ class SettingsWindow(val project: Project) {
5976 setter = { settings.setProviderByLoader(loader, it as CodeGenerationSettingItem ) },
6077 ).apply {
6178 component.renderer = CodeGenerationSettingItemRenderer ()
62- ContextHelpLabel .create(tooltipLabels[loader] ? : return @apply)()
6379 }
6480 }
6581 }
6682 }
6783
68- valuesComboBox(CodegenLanguage ::class , CodegenLanguage .values())
69-
7084 row(" Hanging test timeout:" ) {
7185 cell {
7286 spinner(
@@ -129,6 +143,7 @@ class SettingsWindow(val project: Project) {
129143 .onIsModified {
130144 enableSummarizationGenerationCheckBox.isSelected xor settings.state.enableSummariesGeneration
131145 }
146+ .enableIf(codegenLanguageCombo.selectedValueMatches(CodegenLanguage ? ::isSummarizationCompatible))
132147 .component
133148 }
134149 }
0 commit comments