Skip to content

Commit 1fa451f

Browse files
authored
UTBot multi-IDE support (#2611)
1 parent 6a87097 commit 1fa451f

File tree

77 files changed

+1609
-628
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1609
-628
lines changed

.github/workflows/publish-plugin-from-branch.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ jobs:
4848
extra_options: "-PideType=IC -PprojectType=Community"
4949
- plugin_type: IU
5050
extra_options: "-PideType=IU -PprojectType=Ultimate"
51+
- plugin_type: PY
52+
extra_options: "-PideType=PY -PprojectType=Ultimate"
5153
runs-on: ubuntu-20.04
5254
container: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
5355
steps:
@@ -79,13 +81,13 @@ jobs:
7981
- name: Build UTBot IntelliJ IDEA plugin
8082
run: |
8183
gradle clean buildPlugin --no-daemon --build-cache --no-parallel ${{ matrix.configuration.extra_options }} -Dorg.gradle.jvmargs=-Xmx2g -Dkotlin.daemon.jvm.options=-Xmx4g -PsemVer=${{ env.VERSION }}
82-
cd utbot-intellij/build/distributions
83-
unzip utbot-intellij-${{ env.VERSION }}.zip
84-
rm utbot-intellij-${{ env.VERSION }}.zip
84+
cd utbot-intellij-main/build/distributions
85+
unzip utbot-intellij-main-${{ env.VERSION }}.zip
86+
rm utbot-intellij-main-${{ env.VERSION }}.zip
8587
8688
- name: Archive UTBot IntelliJ IDEA plugin
8789
if: ${{ inputs.upload-artifact == 'true' }}
8890
uses: actions/upload-artifact@v3
8991
with:
9092
name: utbot-intellij-${{ matrix.configuration.plugin_type }}-${{ env.VERSION_ARCHIVE }}
91-
path: utbot-intellij/build/distributions/*
93+
path: utbot-intellij-main/build/distributions/*

buildSrc/src/main/java/SettingsTemplateHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class SettingsTemplateHelper {
3030
public static void proceed(Project project) {
3131
File settingsSourceDir = new File(project.getBuildDir().getParentFile().getParentFile(), "utbot-framework-api/src/main/kotlin/org/utbot/framework/");
3232
String sourceFileName = "UtSettings.kt";
33-
File settingsResourceDir = new File(project.getBuildDir().getParentFile().getParentFile(), "utbot-intellij/src/main/resources/");
33+
File settingsResourceDir = new File(project.getBuildDir().getParentFile().getParentFile(), "utbot-intellij-main/src/main/resources/");
3434
String settingsFileName = "settings.properties";
3535

3636
Map<String, String> dictionary = new HashMap<>();

gradle.properties

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
kotlin.code.style=official
22

3-
#Project Type
3+
# === IDE settings ===
4+
# Project Type
45
# - Community: for Java + Spring + Python (IC supported features)
56
# - Ultimate: for Java + Spring + Python (IU supported features) + JavaScript + Go
67
projectType=Ultimate
@@ -11,14 +12,17 @@ ultimateEdition=Ultimate
1112
# IU, IC, PC, PY
1213
# IC for AndroidStudio
1314
ideType=IC
14-
ideVersion=232.8660.185
15+
ideaVersion=232.8660.185
16+
pycharmVersion=2023.2
17+
golandVersion=2023.2
1518
# ALL, NOJS
1619
buildType=NOJS
1720

21+
javaIde=IC,IU
1822
pythonIde=IC,IU,PC,PY
19-
jsIde=IU,PY,WS
23+
jsIde=IU,PY
2024
jsBuild=ALL
21-
goIde=IU
25+
goIde=IU,GO
2226

2327
# In order to run Android Studio instead of IntelliJ Community, specify the path to your Android Studio installation
2428
#androidStudioPath=your_path_to_android_studio
@@ -29,6 +33,7 @@ pythonCommunityPluginVersion=232.8660.185
2933
pythonUltimatePluginVersion=232.8660.185
3034
# Version numbers: https://plugins.jetbrains.com/plugin/9568-go/versions
3135
goPluginVersion=232.8660.142
36+
# === IDE settings ===
3237

3338
junit5Version=5.8.2
3439
junit4Version=4.13.2

settings.gradle.kts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ val ultimateEdition: String by settings
55
val ideType: String by settings
66
val buildType: String by settings
77

8+
val javaIde: String by settings
89
val pythonIde: String by settings
910
val jsIde: String by settings
1011
val jsBuild: String by settings
@@ -27,7 +28,6 @@ include("utbot-core")
2728
include("utbot-framework")
2829
include("utbot-framework-api")
2930
include("utbot-modificators-analyzer")
30-
include("utbot-intellij")
3131
include("utbot-sample")
3232
include("utbot-java-fuzzing")
3333
include("utbot-fuzzing")
@@ -60,6 +60,12 @@ include("utbot-spring-framework")
6060
include("utbot-spring-commons-api")
6161
include("utbot-spring-commons")
6262
include("utbot-spring-analyzer")
63+
include("utbot-spring-sample")
64+
include("utbot-spring-test")
65+
66+
if (javaIde.split(",").contains(ideType)) {
67+
include("utbot-intellij")
68+
}
6369

6470
if (pythonIde.split(",").contains(ideType)) {
6571
include("utbot-python")
@@ -70,9 +76,6 @@ if (pythonIde.split(",").contains(ideType)) {
7076
include("utbot-python-executor")
7177
}
7278

73-
include("utbot-spring-sample")
74-
include("utbot-spring-test")
75-
7679
if (projectType == ultimateEdition) {
7780
if (jsBuild == buildType || jsIde.split(",").contains(ideType)) {
7881
include("utbot-js")
@@ -88,3 +91,4 @@ if (projectType == ultimateEdition) {
8891
}
8992

9093
include("utbot-light")
94+
include("utbot-intellij-main")

utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/Utils.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,4 @@ fun writeToFileAndSave(filename: String, fileContent: String) {
2525
val file = File(filename)
2626
file.parentFile?.mkdirs()
2727
file.writeText(fileContent)
28-
file.createNewFile()
2928
}

utbot-intellij-go/build.gradle.kts

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,44 @@ val intellijPluginVersion: String? by rootProject
22
val kotlinLoggingVersion: String? by rootProject
33
val apacheCommonsTextVersion: String? by rootProject
44
val jacksonVersion: String? by rootProject
5-
val ideType: String? by rootProject
6-
val ideVersion: String by rootProject
75
val kotlinPluginVersion: String by rootProject
6+
7+
// === IDE settings ===
8+
val projectType: String by rootProject
9+
val communityEdition: String by rootProject
10+
val ultimateEdition: String by rootProject
11+
12+
val ideType: String by rootProject
13+
val androidStudioPath: String? by rootProject
14+
15+
val ideaVersion: String? by rootProject
16+
val pycharmVersion: String? by rootProject
17+
val golandVersion: String? by rootProject
18+
19+
val javaIde: String? by rootProject
20+
val pythonIde: String? by rootProject
21+
val jsIde: String? by rootProject
22+
val goIde: String? by rootProject
23+
24+
val ideVersion = when(ideType) {
25+
"PC", "PY" -> pycharmVersion
26+
"GO" -> golandVersion
27+
else -> ideaVersion
28+
}
29+
830
val pythonCommunityPluginVersion: String? by rootProject
931
val pythonUltimatePluginVersion: String? by rootProject
1032
val goPluginVersion: String? by rootProject
1133

34+
// https://plugins.jetbrains.com/docs/intellij/android-studio.html#configuring-the-plugin-pluginxml-file
35+
val ideTypeOrAndroidStudio = if (androidStudioPath == null) ideType else "IC"
36+
37+
project.tasks.asMap["runIde"]?.enabled = false
38+
// === IDE settings ===
39+
1240
plugins {
1341
id("org.jetbrains.intellij") version "1.13.1"
1442
}
15-
project.tasks.asMap["runIde"]?.enabled = false
1643

1744
tasks {
1845
compileKotlin {
@@ -46,10 +73,16 @@ intellij {
4673

4774
val androidPlugins = listOf("org.jetbrains.android")
4875

49-
val jvmPlugins = listOf(
76+
val jvmPlugins = mutableListOf(
5077
"java"
5178
)
5279

80+
val kotlinPlugins = listOf(
81+
"org.jetbrains.kotlin"
82+
)
83+
84+
androidStudioPath?.let { jvmPlugins += androidPlugins }
85+
5386
val pythonCommunityPlugins = listOf(
5487
"PythonCore:${pythonCommunityPluginVersion}"
5588
)
@@ -66,13 +99,24 @@ intellij {
6699
"org.jetbrains.plugins.go:${goPluginVersion}"
67100
)
68101

102+
val mavenUtilsPlugins = listOf(
103+
"org.jetbrains.idea.maven"
104+
)
105+
106+
val basePluginSet = jvmPlugins + kotlinPlugins + mavenUtilsPlugins + androidPlugins
107+
69108
plugins.set(
70-
when (ideType) {
71-
"IC" -> jvmPlugins + pythonCommunityPlugins + androidPlugins
72-
"IU" -> jvmPlugins + pythonUltimatePlugins + jsPlugins + goPlugins + androidPlugins
73-
"PC" -> pythonCommunityPlugins
74-
"PU" -> pythonUltimatePlugins // something else, JS?
75-
else -> jvmPlugins
109+
when (projectType) {
110+
communityEdition -> basePluginSet + pythonCommunityPlugins
111+
ultimateEdition -> when (ideType) {
112+
"IC" -> basePluginSet + pythonCommunityPlugins
113+
"IU" -> basePluginSet + pythonUltimatePlugins + jsPlugins + goPlugins
114+
"PC" -> pythonCommunityPlugins
115+
"PY" -> pythonUltimatePlugins + jsPlugins
116+
"GO" -> goPlugins
117+
else -> basePluginSet
118+
}
119+
else -> basePluginSet
76120
}
77121
)
78122

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package org.utbot.intellij.plugin.language.go.generator
1+
package org.utbot.intellij.plugin.go.generator
22

3-
import com.intellij.codeInsight.CodeInsightUtil
43
import com.intellij.openapi.application.runWriteAction
4+
import com.intellij.openapi.fileEditor.OpenFileDescriptor
55
import com.intellij.openapi.project.Project
66
import com.intellij.openapi.vfs.VirtualFileManager
77
import com.intellij.psi.PsiFile
88
import com.intellij.psi.PsiFileFactory
99
import com.intellij.psi.PsiManager
1010
import com.intellij.util.IncorrectOperationException
1111
import org.utbot.go.api.GoUtFile
12-
import org.utbot.intellij.plugin.language.go.GoLanguageAssistant
13-
import org.utbot.intellij.plugin.language.go.models.GenerateGoTestsModel
12+
import org.utbot.intellij.plugin.go.language.GoLanguageAssistant
13+
import org.utbot.intellij.plugin.go.models.GenerateGoTestsModel
1414
import org.utbot.intellij.plugin.ui.utils.showErrorDialogLater
1515
import java.nio.file.Paths
1616

@@ -37,7 +37,7 @@ object GoUtTestsCodeFileWriter {
3737
sourceFileDir.add(testPsiFile)
3838

3939
val testFile = sourceFileDir.findFile(testsFileNameWithExtension)!!
40-
CodeInsightUtil.positionCursor(model.project, testFile, testFile)
40+
OpenFileDescriptor(model.project, testFile.virtualFile).navigate(true)
4141
}
4242
} catch (e: IncorrectOperationException) {
4343
showCreatingFileError(model.project, testsFileName)
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.utbot.intellij.plugin.language.go.generator
1+
package org.utbot.intellij.plugin.go.generator
22

33
import com.goide.project.DefaultGoRootsProvider
44
import com.goide.psi.GoFunctionOrMethodDeclaration
@@ -16,9 +16,9 @@ import com.intellij.openapi.ui.Messages
1616
import org.utbot.go.gocodeanalyzer.GoParsingSourceCodeAnalysisResultException
1717
import org.utbot.go.logic.GoUtTestsGenerationConfig
1818
import org.utbot.go.worker.GoWorkerFailedException
19-
import org.utbot.intellij.plugin.language.go.models.GenerateGoTestsModel
20-
import org.utbot.intellij.plugin.language.go.ui.GenerateGoTestsDialogWindow
21-
import org.utbot.intellij.plugin.language.go.ui.utils.resolveGoExecutablePath
19+
import org.utbot.intellij.plugin.go.models.GenerateGoTestsModel
20+
import org.utbot.intellij.plugin.go.ui.GenerateGoTestsDialogWindow
21+
import org.utbot.intellij.plugin.go.ui.utils.resolveGoExecutablePath
2222
import org.utbot.intellij.plugin.ui.utils.showErrorDialogLater
2323
import java.nio.file.Paths
2424

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.utbot.intellij.plugin.language.go.generator
1+
package org.utbot.intellij.plugin.go.generator
22

33
import com.intellij.openapi.application.invokeLater
44
import com.intellij.openapi.progress.ProgressIndicator
@@ -7,7 +7,7 @@ import org.utbot.go.api.GoUtFunction
77
import org.utbot.go.api.GoUtFuzzedFunctionTestCase
88
import org.utbot.go.gocodeanalyzer.GoSourceCodeAnalyzer
99
import org.utbot.go.logic.AbstractGoUtTestsGenerationController
10-
import org.utbot.intellij.plugin.language.go.models.GenerateGoTestsModel
10+
import org.utbot.intellij.plugin.go.models.GenerateGoTestsModel
1111
import org.utbot.intellij.plugin.ui.utils.showErrorDialogLater
1212
import org.utbot.intellij.plugin.ui.utils.showWarningDialogLater
1313
import java.nio.file.Path

utbot-intellij-go/src/main/kotlin/org/utbot/intellij/plugin/language/go/GoLanguageAssistant.kt renamed to utbot-intellij-go/src/main/kotlin/org/utbot/intellij/plugin/go/language/GoLanguageAssistant.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package org.utbot.intellij.plugin.language.go
1+
package org.utbot.intellij.plugin.go.language
22

33
import com.goide.psi.*
44
import com.intellij.lang.Language
55
import com.intellij.openapi.actionSystem.AnActionEvent
66
import com.intellij.openapi.actionSystem.CommonDataKeys
77
import com.intellij.openapi.editor.Editor
8+
import com.intellij.openapi.module.ModuleUtilCore
89
import com.intellij.psi.PsiElement
910
import com.intellij.psi.PsiFile
1011
import com.intellij.psi.util.PsiTreeUtil
11-
import org.jetbrains.kotlin.idea.base.util.module
1212
import org.utbot.intellij.plugin.language.agnostic.LanguageAssistant
13-
import org.utbot.intellij.plugin.language.go.generator.GoUtTestsDialogProcessor
13+
import org.utbot.intellij.plugin.go.generator.GoUtTestsDialogProcessor
1414

1515
@Suppress("unused") // is used in org.utbot.intellij.plugin.language.agnostic.LanguageAssistant via reflection
1616
object GoLanguageAssistant : LanguageAssistant() {
@@ -26,7 +26,7 @@ object GoLanguageAssistant : LanguageAssistant() {
2626
override fun actionPerformed(e: AnActionEvent) {
2727
val project = e.project ?: return
2828
val file = e.getData(CommonDataKeys.PSI_FILE) as? GoFile ?: return
29-
val module = file.module ?: return
29+
val module = ModuleUtilCore.findModuleForFile(file) ?: return
3030
val (targetFunctions, focusedTargetFunctions) = getPsiTargets(e) ?: return
3131
GoUtTestsDialogProcessor.createDialogAndGenerateTests(
3232
project,

0 commit comments

Comments
 (0)