Skip to content

Commit 2340e24

Browse files
Added plugin setting for experimental languages: Python, JavaScript, Go (#1545)
* Added checkbox for experimental languages * Fixed fuzzer imports * Added access check from settings for experimental languages * Tooltip correction Co-authored-by: Vassiliy Kudryashov <[email protected]>
1 parent 1883cc7 commit 2340e24

File tree

5 files changed

+45
-17
lines changed

5 files changed

+45
-17
lines changed

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ class Settings(val project: Project) : PersistentStateComponent<Settings.State>
6363
var fuzzingValue: Double = 0.05,
6464
var runGeneratedTestsWithCoverage: Boolean = false,
6565
var commentStyle: JavaDocCommentStyle = JavaDocCommentStyle.defaultItem,
66-
var enableSummariesGeneration: Boolean = UtSettings.enableSummariesGeneration
66+
var enableSummariesGeneration: Boolean = UtSettings.enableSummariesGeneration,
67+
var enableExperimentalLanguagesSupport: Boolean = false,
6768
) {
6869
constructor(model: GenerateTestsModel) : this(
6970
sourceRootHistory = model.sourceRootHistory,
@@ -155,6 +156,8 @@ class Settings(val project: Project) : PersistentStateComponent<Settings.State>
155156

156157
val forceStaticMocking: ForceStaticMocking get() = state.forceStaticMocking
157158

159+
val experimentalLanguagesSupport: Boolean get () = state.enableExperimentalLanguagesSupport
160+
158161
val treatOverflowAsError: TreatOverflowAsError get() = state.treatOverflowAsError
159162

160163
val parametrizedTestSource: ParametrizedTestSource get() = state.parametrizedTestSource

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ import com.intellij.ui.layout.withValueBinding
1818
import com.intellij.util.castSafelyTo
1919
import com.intellij.util.ui.UIUtil
2020
import com.intellij.util.ui.components.BorderLayoutPanel
21-
import javax.swing.DefaultComboBoxModel
22-
import javax.swing.JCheckBox
23-
import javax.swing.JPanel
24-
import javax.swing.JSlider
25-
import kotlin.reflect.KClass
2621
import org.utbot.framework.UtSettings
2722
import org.utbot.framework.codegen.domain.ForceStaticMocking
2823
import org.utbot.framework.codegen.domain.HangingTestsTimeout
@@ -34,6 +29,11 @@ import org.utbot.framework.plugin.api.TreatOverflowAsError
3429
import org.utbot.framework.plugin.api.isSummarizationCompatible
3530
import org.utbot.intellij.plugin.ui.components.CodeGenerationSettingItemRenderer
3631
import org.utbot.intellij.plugin.util.showSettingsEditor
32+
import javax.swing.DefaultComboBoxModel
33+
import javax.swing.JCheckBox
34+
import javax.swing.JPanel
35+
import javax.swing.JSlider
36+
import kotlin.reflect.KClass
3737

3838
class SettingsWindow(val project: Project) {
3939
private val settings = project.service<Settings>()
@@ -44,6 +44,7 @@ class SettingsWindow(val project: Project) {
4444
private lateinit var runInspectionAfterTestGenerationCheckBox: JCheckBox
4545
private lateinit var forceMockCheckBox: JCheckBox
4646
private lateinit var enableSummarizationGenerationCheckBox: JCheckBox
47+
private lateinit var enableExperimentalLanguagesCheckBox: JCheckBox
4748

4849
val panel: JPanel = panel {
4950
row("Generated test language:") {
@@ -164,6 +165,23 @@ class SettingsWindow(val project: Project) {
164165
}
165166
}
166167

168+
row {
169+
cell {
170+
enableExperimentalLanguagesCheckBox = checkBox("Experimental languages support")
171+
.onApply {
172+
settings.state.enableExperimentalLanguagesSupport =
173+
enableExperimentalLanguagesCheckBox.isSelected
174+
}
175+
.onReset {
176+
enableExperimentalLanguagesCheckBox.isSelected =
177+
settings.experimentalLanguagesSupport == true
178+
}
179+
.onIsModified { enableExperimentalLanguagesCheckBox.isSelected xor settings.experimentalLanguagesSupport }
180+
.apply { ContextHelpLabel.create("Enable JavaScript and Python if IDE supports them")() }
181+
.component
182+
}
183+
}
184+
167185
row("Classes to be forcedly mocked:") {}
168186
row {
169187
val excludeTableCellBuilder = excludeTable.component(CCFlags.grow)

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package org.utbot.intellij.plugin.ui.actions
22

33
import com.intellij.openapi.actionSystem.AnAction
44
import com.intellij.openapi.actionSystem.AnActionEvent
5+
import com.intellij.openapi.components.service
56
import org.utbot.intellij.plugin.language.agnostic.LanguageAssistant
7+
import org.utbot.intellij.plugin.settings.Settings
68

79
class GenerateTestsAction : AnAction() {
810
override fun actionPerformed(e: AnActionEvent) {
@@ -11,10 +13,16 @@ class GenerateTestsAction : AnAction() {
1113

1214
override fun update(e: AnActionEvent) {
1315
val languageAssistant = LanguageAssistant.get(e)
14-
if (languageAssistant == null) {
16+
if (languageAssistant == null || !accessByProjectSettings(e)) {
1517
e.presentation.isEnabled = false
1618
} else {
1719
languageAssistant.update(e)
1820
}
1921
}
20-
}
22+
23+
private fun accessByProjectSettings(e: AnActionEvent): Boolean {
24+
val experimentalLanguageSetting = e.project?.service<Settings>()?.experimentalLanguagesSupport
25+
val languagePackageName = LanguageAssistant.get(e)?.toString()
26+
return experimentalLanguageSetting == true || languagePackageName?.contains("JvmLanguageAssistant") == true
27+
}
28+
}

utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package api
22

3-
import fuzzer.providers.JsObjectModelProvider
4-
import org.utbot.framework.concrete.contructors.UtModelConstructorInterface
5-
import org.utbot.framework.plugin.api.ClassId
6-
import org.utbot.framework.plugin.api.UtAssembleModel
7-
import org.utbot.framework.plugin.api.UtExecutableCallModel
8-
import org.utbot.framework.plugin.api.UtModel
9-
import org.utbot.framework.plugin.api.UtStatementModel
103
import framework.api.js.JsClassId
114
import framework.api.js.JsEmptyClassId
125
import framework.api.js.JsNullModel
136
import framework.api.js.JsPrimitiveModel
147
import framework.api.js.JsUndefinedModel
158
import framework.api.js.util.jsErrorClassId
169
import framework.api.js.util.jsUndefinedClassId
10+
import fuzzer.providers.JsObjectModelProvider
11+
import org.utbot.framework.concrete.constructors.UtModelConstructorInterface
12+
import org.utbot.framework.plugin.api.ClassId
13+
import org.utbot.framework.plugin.api.UtAssembleModel
14+
import org.utbot.framework.plugin.api.UtExecutableCallModel
15+
import org.utbot.framework.plugin.api.UtModel
1716

1817
class JsUtModelConstructor : UtModelConstructorInterface {
1918

utbot-js/src/main/kotlin/fuzzer/providers/JsObjectModelProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import org.utbot.fuzzer.FuzzedParameter
1111
import org.utbot.fuzzer.FuzzedValue
1212
import org.utbot.fuzzer.ModelProvider
1313
import org.utbot.fuzzer.ModelProvider.Companion.yieldValue
14-
import org.utbot.fuzzer.TooManyCombinationsException
1514
import org.utbot.fuzzer.fuzz
15+
import org.utbot.fuzzing.utils.TooManyCombinationsException
1616
import java.util.concurrent.atomic.AtomicInteger
1717
import java.util.function.IntSupplier
1818

@@ -87,4 +87,4 @@ object JsObjectModelProvider : ModelProvider {
8787
}
8888

8989

90-
}
90+
}

0 commit comments

Comments
 (0)