From 7f4684104c3a67810d333f31d2c7f6284c7ba98a Mon Sep 17 00:00:00 2001 From: Vyacheslav Tamarin Date: Thu, 14 Dec 2023 13:41:03 +0300 Subject: [PATCH] Fix problem with Pycharm plugin #2720 (#2721) * Create new module for Pycharm plugin * Change github script publish-plugin-from-branch.yml --- .../workflows/publish-plugin-from-branch.yml | 2 +- gradle.properties | 4 + settings.gradle.kts | 8 +- .../plugin/python/PythonDialogProcessor.kt | 29 ++--- utbot-python-pycharm/build.gradle.kts | 123 ++++++++++++++++++ .../python/ui/actions/GenerateTestsAction.kt | 2 - .../src/main/resources/META-INF/plugin.xml | 0 .../main/resources/META-INF/pluginIcon.svg | 0 .../main/resources/META-INF/withPython.xml | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/log4j2.xml | 0 .../src/main/resources/settings.properties | 0 12 files changed, 145 insertions(+), 23 deletions(-) create mode 100644 utbot-python-pycharm/build.gradle.kts rename {utbot-intellij-python => utbot-python-pycharm}/src/main/kotlin/org/utbot/intellij/plugin/python/ui/actions/GenerateTestsAction.kt (88%) rename {utbot-intellij-python => utbot-python-pycharm}/src/main/resources/META-INF/plugin.xml (100%) rename {utbot-intellij-python => utbot-python-pycharm}/src/main/resources/META-INF/pluginIcon.svg (100%) rename {utbot-intellij-python => utbot-python-pycharm}/src/main/resources/META-INF/withPython.xml (100%) rename {utbot-intellij-python => utbot-python-pycharm}/src/main/resources/application.properties (100%) rename {utbot-intellij-python => utbot-python-pycharm}/src/main/resources/log4j2.xml (100%) rename {utbot-intellij-python => utbot-python-pycharm}/src/main/resources/settings.properties (100%) diff --git a/.github/workflows/publish-plugin-from-branch.yml b/.github/workflows/publish-plugin-from-branch.yml index 51415412d6..755ade4a60 100644 --- a/.github/workflows/publish-plugin-from-branch.yml +++ b/.github/workflows/publish-plugin-from-branch.yml @@ -52,7 +52,7 @@ jobs: directory: utbot-intellij-main - plugin_type: PY extra_options: "-PideType=PY -PprojectType=Ultimate" - directory: utbot-intellij-python + directory: utbot-python-pycharm runs-on: ubuntu-20.04 container: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0 steps: diff --git a/gradle.properties b/gradle.properties index 5034b34b1b..cd83a4920b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,12 +18,16 @@ golandVersion=2023.2 # ALL, NOJS buildType=NOJS +# IDE types that supports appropriate language javaIde=IC,IU pythonIde=IC,IU,PC,PY jsIde=IU,PY jsBuild=ALL goIde=IU,GO +# IDE types that require Pycharm plugin +pycharmIdeType=PC,PY + # In order to run Android Studio instead of IntelliJ Community, specify the path to your Android Studio installation #androidStudioPath=your_path_to_android_studio diff --git a/settings.gradle.kts b/settings.gradle.kts index 0f9c6937b3..de67e6ca54 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,6 +4,7 @@ val ultimateEdition: String by settings val ideType: String by settings val buildType: String by settings +val pycharmIdeType: String by settings val javaIde: String by settings val pythonIde: String by settings @@ -65,6 +66,12 @@ include("utbot-spring-analyzer") include("utbot-spring-sample") include("utbot-spring-test") +if (pycharmIdeType.split(",").contains(ideType)) { + include("utbot-python-pycharm") +} else { + include("utbot-intellij-main") +} + if (javaIde.split(",").contains(ideType)) { include("utbot-intellij") } @@ -93,4 +100,3 @@ if (projectType == ultimateEdition) { } include("utbot-light") -include("utbot-intellij-main") diff --git a/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/python/PythonDialogProcessor.kt b/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/python/PythonDialogProcessor.kt index a90e62650e..7f24baccc7 100644 --- a/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/python/PythonDialogProcessor.kt +++ b/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/python/PythonDialogProcessor.kt @@ -31,12 +31,11 @@ import org.utbot.intellij.plugin.settings.Settings import org.utbot.intellij.plugin.ui.utils.showErrorDialogLater import org.utbot.python.PythonMethodHeader import org.utbot.python.PythonTestGenerationConfig -import org.utbot.python.utils.RequirementsInstaller import org.utbot.python.TestFileInformation import org.utbot.python.framework.api.python.PythonClassId import org.utbot.python.framework.codegen.PythonCgLanguageAssistant import org.utbot.python.newtyping.mypy.dropInitFile -import org.utbot.python.utils.PythonVersionChecker +import org.utbot.python.utils.RequirementsInstaller import java.util.concurrent.ScheduledFuture import java.util.concurrent.TimeUnit import kotlin.io.path.Path @@ -125,24 +124,16 @@ object PythonDialogProcessor { title = "Python test generation error" ) } else { - if (!PythonVersionChecker.checkPythonVersion(pythonPath)) { - showErrorDialogLater( - project, - message = "Please use Python 3.10 or newer", - title = "Python test generation error" - ) - } else { - val dialog = createDialog( - project, - elementsToShow, - focusedElement, - pythonPath, - ) - if (!dialog.showAndGet()) { - return - } - createTests(project, dialog.model) + val dialog = createDialog( + project, + elementsToShow, + focusedElement, + pythonPath, + ) + if (!dialog.showAndGet()) { + return } + createTests(project, dialog.model) } } diff --git a/utbot-python-pycharm/build.gradle.kts b/utbot-python-pycharm/build.gradle.kts new file mode 100644 index 0000000000..792a07fac2 --- /dev/null +++ b/utbot-python-pycharm/build.gradle.kts @@ -0,0 +1,123 @@ +val semVer: String? by rootProject +val kotlinLoggingVersion: String? by rootProject + +// === IDE settings === +val projectType: String by rootProject +val communityEdition: String by rootProject +val ultimateEdition: String by rootProject + +val ideType: String by rootProject +val androidStudioPath: String? by rootProject + +val ideaVersion: String? by rootProject +val pycharmVersion: String? by rootProject +val golandVersion: String? by rootProject + +val javaIde: String? by rootProject +val pythonIde: String? by rootProject +val jsIde: String? by rootProject +val goIde: String? by rootProject + +val ideVersion = when(ideType) { + "PC", "PY" -> pycharmVersion + "GO" -> golandVersion + else -> ideaVersion +} + +val pythonCommunityPluginVersion: String? by rootProject +val pythonUltimatePluginVersion: String? by rootProject +val goPluginVersion: String? by rootProject + +// https://plugins.jetbrains.com/docs/intellij/android-studio.html#configuring-the-plugin-pluginxml-file +val ideTypeOrAndroidStudio = if (androidStudioPath == null) ideType else "IC" + +project.tasks.asMap["runIde"]?.enabled = false +// === IDE settings === + +plugins { + id("org.jetbrains.intellij") version "1.13.1" +} + +tasks { + compileKotlin { + kotlinOptions { + jvmTarget = "17" + freeCompilerArgs = freeCompilerArgs + listOf("-Xallow-result-return-type", "-Xsam-conversions=class") + allWarningsAsErrors = false + } + } + + java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + patchPluginXml { + sinceBuild.set("223") + untilBuild.set("232.*") + version.set(semVer) + } +} + +dependencies { + implementation(group = "io.github.microutils", name = "kotlin-logging", version = kotlinLoggingVersion) + implementation(project(":utbot-ui-commons")) + + //Family + implementation(project(":utbot-intellij-python")) +} + +intellij { + + val androidPlugins = listOf("org.jetbrains.android") + + val jvmPlugins = mutableListOf( + "java" + ) + + val kotlinPlugins = listOf( + "org.jetbrains.kotlin" + ) + + androidStudioPath?.let { jvmPlugins += androidPlugins } + + val pythonCommunityPlugins = listOf( + "PythonCore:${pythonCommunityPluginVersion}" + ) + + val pythonUltimatePlugins = listOf( + "Pythonid:${pythonUltimatePluginVersion}" + ) + + val jsPlugins = listOf( + "JavaScript" + ) + + val goPlugins = listOf( + "org.jetbrains.plugins.go:${goPluginVersion}" + ) + + val mavenUtilsPlugins = listOf( + "org.jetbrains.idea.maven" + ) + + val basePluginSet = jvmPlugins + kotlinPlugins + mavenUtilsPlugins + androidPlugins + + plugins.set( + when (projectType) { + communityEdition -> basePluginSet + pythonCommunityPlugins + ultimateEdition -> when (ideType) { + "IC" -> basePluginSet + pythonCommunityPlugins + "IU" -> basePluginSet + pythonUltimatePlugins + jsPlugins + goPlugins + "PC" -> pythonCommunityPlugins + "PY" -> pythonUltimatePlugins + jsPlugins + "GO" -> goPlugins + else -> basePluginSet + } + else -> basePluginSet + } + ) + + version.set(ideVersion) + type.set(ideType) +} diff --git a/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/python/ui/actions/GenerateTestsAction.kt b/utbot-python-pycharm/src/main/kotlin/org/utbot/intellij/plugin/python/ui/actions/GenerateTestsAction.kt similarity index 88% rename from utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/python/ui/actions/GenerateTestsAction.kt rename to utbot-python-pycharm/src/main/kotlin/org/utbot/intellij/plugin/python/ui/actions/GenerateTestsAction.kt index ccbacbd9a5..7e9870690c 100644 --- a/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/python/ui/actions/GenerateTestsAction.kt +++ b/utbot-python-pycharm/src/main/kotlin/org/utbot/intellij/plugin/python/ui/actions/GenerateTestsAction.kt @@ -3,9 +3,7 @@ package org.utbot.intellij.plugin.python.ui.actions import com.intellij.openapi.actionSystem.ActionUpdateThread 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) { diff --git a/utbot-intellij-python/src/main/resources/META-INF/plugin.xml b/utbot-python-pycharm/src/main/resources/META-INF/plugin.xml similarity index 100% rename from utbot-intellij-python/src/main/resources/META-INF/plugin.xml rename to utbot-python-pycharm/src/main/resources/META-INF/plugin.xml diff --git a/utbot-intellij-python/src/main/resources/META-INF/pluginIcon.svg b/utbot-python-pycharm/src/main/resources/META-INF/pluginIcon.svg similarity index 100% rename from utbot-intellij-python/src/main/resources/META-INF/pluginIcon.svg rename to utbot-python-pycharm/src/main/resources/META-INF/pluginIcon.svg diff --git a/utbot-intellij-python/src/main/resources/META-INF/withPython.xml b/utbot-python-pycharm/src/main/resources/META-INF/withPython.xml similarity index 100% rename from utbot-intellij-python/src/main/resources/META-INF/withPython.xml rename to utbot-python-pycharm/src/main/resources/META-INF/withPython.xml diff --git a/utbot-intellij-python/src/main/resources/application.properties b/utbot-python-pycharm/src/main/resources/application.properties similarity index 100% rename from utbot-intellij-python/src/main/resources/application.properties rename to utbot-python-pycharm/src/main/resources/application.properties diff --git a/utbot-intellij-python/src/main/resources/log4j2.xml b/utbot-python-pycharm/src/main/resources/log4j2.xml similarity index 100% rename from utbot-intellij-python/src/main/resources/log4j2.xml rename to utbot-python-pycharm/src/main/resources/log4j2.xml diff --git a/utbot-intellij-python/src/main/resources/settings.properties b/utbot-python-pycharm/src/main/resources/settings.properties similarity index 100% rename from utbot-intellij-python/src/main/resources/settings.properties rename to utbot-python-pycharm/src/main/resources/settings.properties