From c534044646ecd3eff0496f058fa40ba27dea5c03 Mon Sep 17 00:00:00 2001 From: Vladislav Kasimov Date: Thu, 15 Dec 2022 15:10:19 +0300 Subject: [PATCH 1/4] Added checkbox for experimental languages --- .../intellij/plugin/settings/Settings.kt | 5 +++- .../plugin/settings/SettingsWindow.kt | 24 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt index 72c8affffd..661fcd3471 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt @@ -63,7 +63,8 @@ class Settings(val project: Project) : PersistentStateComponent var fuzzingValue: Double = 0.05, var runGeneratedTestsWithCoverage: Boolean = false, var commentStyle: JavaDocCommentStyle = JavaDocCommentStyle.defaultItem, - var enableSummariesGeneration: Boolean = UtSettings.enableSummariesGeneration + var enableSummariesGeneration: Boolean = UtSettings.enableSummariesGeneration, + var enableExperimentalLanguagesSupport: Boolean = false, ) { constructor(model: GenerateTestsModel) : this( sourceRootHistory = model.sourceRootHistory, @@ -155,6 +156,8 @@ class Settings(val project: Project) : PersistentStateComponent val forceStaticMocking: ForceStaticMocking get() = state.forceStaticMocking + val experimentalLanguagesSupport: Boolean get () = state.enableExperimentalLanguagesSupport + val treatOverflowAsError: TreatOverflowAsError get() = state.treatOverflowAsError val parametrizedTestSource: ParametrizedTestSource get() = state.parametrizedTestSource diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt index 8ad2cfeba3..996db117f4 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt @@ -18,11 +18,6 @@ import com.intellij.ui.layout.withValueBinding import com.intellij.util.castSafelyTo import com.intellij.util.ui.UIUtil import com.intellij.util.ui.components.BorderLayoutPanel -import javax.swing.DefaultComboBoxModel -import javax.swing.JCheckBox -import javax.swing.JPanel -import javax.swing.JSlider -import kotlin.reflect.KClass import org.utbot.framework.UtSettings import org.utbot.framework.codegen.domain.ForceStaticMocking import org.utbot.framework.codegen.domain.HangingTestsTimeout @@ -34,6 +29,11 @@ import org.utbot.framework.plugin.api.TreatOverflowAsError import org.utbot.framework.plugin.api.isSummarizationCompatible import org.utbot.intellij.plugin.ui.components.CodeGenerationSettingItemRenderer import org.utbot.intellij.plugin.util.showSettingsEditor +import javax.swing.DefaultComboBoxModel +import javax.swing.JCheckBox +import javax.swing.JPanel +import javax.swing.JSlider +import kotlin.reflect.KClass class SettingsWindow(val project: Project) { private val settings = project.service() @@ -44,6 +44,7 @@ class SettingsWindow(val project: Project) { private lateinit var runInspectionAfterTestGenerationCheckBox: JCheckBox private lateinit var forceMockCheckBox: JCheckBox private lateinit var enableSummarizationGenerationCheckBox: JCheckBox + private lateinit var enableExperimentalLanguagesCheckBox: JCheckBox val panel: JPanel = panel { row("Generated test language:") { @@ -164,6 +165,19 @@ class SettingsWindow(val project: Project) { } } + row { + cell { + enableExperimentalLanguagesCheckBox = checkBox("Experimental languages support") + .onApply { + settings.state.enableExperimentalLanguagesSupport = enableExperimentalLanguagesCheckBox.isSelected + } + .onReset { enableExperimentalLanguagesCheckBox.isSelected = settings.experimentalLanguagesSupport == true } + .onIsModified { enableExperimentalLanguagesCheckBox.isSelected xor settings.experimentalLanguagesSupport } + .apply { ContextHelpLabel.create("Enable Python, JavaScript, Go support")() } + .component + } + } + row("Classes to be forcedly mocked:") {} row { val excludeTableCellBuilder = excludeTable.component(CCFlags.grow) From 74de36e6c0e74b45fa8a1c357c36d9718d13182a Mon Sep 17 00:00:00 2001 From: Vladislav Kasimov Date: Thu, 15 Dec 2022 17:35:50 +0300 Subject: [PATCH 2/4] Fixed fuzzer imports --- .../src/main/kotlin/api/JsUtModelConstructor.kt | 13 ++++++------- .../fuzzer/providers/JsObjectModelProvider.kt | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt b/utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt index 5101612b97..799dac9975 100644 --- a/utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt +++ b/utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt @@ -1,12 +1,5 @@ package api -import fuzzer.providers.JsObjectModelProvider -import org.utbot.framework.concrete.contructors.UtModelConstructorInterface -import org.utbot.framework.plugin.api.ClassId -import org.utbot.framework.plugin.api.UtAssembleModel -import org.utbot.framework.plugin.api.UtExecutableCallModel -import org.utbot.framework.plugin.api.UtModel -import org.utbot.framework.plugin.api.UtStatementModel import framework.api.js.JsClassId import framework.api.js.JsEmptyClassId import framework.api.js.JsNullModel @@ -14,6 +7,12 @@ import framework.api.js.JsPrimitiveModel import framework.api.js.JsUndefinedModel import framework.api.js.util.jsErrorClassId import framework.api.js.util.jsUndefinedClassId +import fuzzer.providers.JsObjectModelProvider +import org.utbot.framework.concrete.constructors.UtModelConstructorInterface +import org.utbot.framework.plugin.api.ClassId +import org.utbot.framework.plugin.api.UtAssembleModel +import org.utbot.framework.plugin.api.UtExecutableCallModel +import org.utbot.framework.plugin.api.UtModel class JsUtModelConstructor : UtModelConstructorInterface { diff --git a/utbot-js/src/main/kotlin/fuzzer/providers/JsObjectModelProvider.kt b/utbot-js/src/main/kotlin/fuzzer/providers/JsObjectModelProvider.kt index aab8245e57..810757cf35 100644 --- a/utbot-js/src/main/kotlin/fuzzer/providers/JsObjectModelProvider.kt +++ b/utbot-js/src/main/kotlin/fuzzer/providers/JsObjectModelProvider.kt @@ -11,8 +11,8 @@ import org.utbot.fuzzer.FuzzedParameter import org.utbot.fuzzer.FuzzedValue import org.utbot.fuzzer.ModelProvider import org.utbot.fuzzer.ModelProvider.Companion.yieldValue -import org.utbot.fuzzer.TooManyCombinationsException import org.utbot.fuzzer.fuzz +import org.utbot.fuzzing.utils.TooManyCombinationsException import java.util.concurrent.atomic.AtomicInteger import java.util.function.IntSupplier @@ -87,4 +87,4 @@ object JsObjectModelProvider : ModelProvider { } -} \ No newline at end of file +} From f4806c5866955e6f17cec232302aed527815fe9f Mon Sep 17 00:00:00 2001 From: Vladislav Kasimov Date: Fri, 16 Dec 2022 13:08:14 +0300 Subject: [PATCH 3/4] Added access check from settings for experimental languages --- .../plugin/ui/actions/GenerateTestsAction.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt index b06d0c0598..7d32d7e2f1 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt @@ -2,7 +2,9 @@ package org.utbot.intellij.plugin.ui.actions import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.components.service import org.utbot.intellij.plugin.language.agnostic.LanguageAssistant +import org.utbot.intellij.plugin.settings.Settings class GenerateTestsAction : AnAction() { override fun actionPerformed(e: AnActionEvent) { @@ -11,10 +13,16 @@ class GenerateTestsAction : AnAction() { override fun update(e: AnActionEvent) { val languageAssistant = LanguageAssistant.get(e) - if (languageAssistant == null) { + if (languageAssistant == null || !accessByProjectSettings(e)) { e.presentation.isEnabled = false } else { languageAssistant.update(e) } } -} \ No newline at end of file + + private fun accessByProjectSettings(e: AnActionEvent): Boolean { + val experimentalLanguageSetting = e.project?.service()?.experimentalLanguagesSupport + val languagePackageName = LanguageAssistant.get(e)?.toString() + return experimentalLanguageSetting == true || languagePackageName?.contains("JvmLanguageAssistant") == true + } +} From 17f5327282cb12433302ab131735d32e2b83470a Mon Sep 17 00:00:00 2001 From: Vladislav Kasimov Date: Fri, 16 Dec 2022 15:55:34 +0300 Subject: [PATCH 4/4] Tooltip correction --- .../utbot/intellij/plugin/settings/SettingsWindow.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt index 996db117f4..14661839ce 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt @@ -169,11 +169,15 @@ class SettingsWindow(val project: Project) { cell { enableExperimentalLanguagesCheckBox = checkBox("Experimental languages support") .onApply { - settings.state.enableExperimentalLanguagesSupport = enableExperimentalLanguagesCheckBox.isSelected + settings.state.enableExperimentalLanguagesSupport = + enableExperimentalLanguagesCheckBox.isSelected + } + .onReset { + enableExperimentalLanguagesCheckBox.isSelected = + settings.experimentalLanguagesSupport == true } - .onReset { enableExperimentalLanguagesCheckBox.isSelected = settings.experimentalLanguagesSupport == true } .onIsModified { enableExperimentalLanguagesCheckBox.isSelected xor settings.experimentalLanguagesSupport } - .apply { ContextHelpLabel.create("Enable Python, JavaScript, Go support")() } + .apply { ContextHelpLabel.create("Enable JavaScript and Python if IDE supports them")() } .component } }