Skip to content

Commit c1f50a5

Browse files
committed
Check multiple test source roots for util class to avoid util class duplication
1 parent 397e3fa commit c1f50a5

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.intellij.openapi.command.executeCommand
1414
import com.intellij.openapi.editor.Document
1515
import com.intellij.openapi.editor.Editor
1616
import com.intellij.openapi.fileTypes.FileType
17+
import com.intellij.openapi.module.Module
1718
import com.intellij.openapi.project.DumbService
1819
import com.intellij.openapi.project.Project
1920
import com.intellij.openapi.util.Computable
@@ -26,6 +27,7 @@ import com.intellij.psi.PsiDocumentManager
2627
import com.intellij.psi.PsiElement
2728
import com.intellij.psi.PsiFile
2829
import com.intellij.psi.PsiFileFactory
30+
import com.intellij.psi.PsiManager
2931
import com.intellij.psi.PsiMethod
3032
import com.intellij.psi.codeStyle.CodeStyleManager
3133
import com.intellij.psi.codeStyle.JavaCodeStyleManager
@@ -76,6 +78,7 @@ import org.utbot.intellij.plugin.ui.TestsReportNotifier
7678
import org.utbot.intellij.plugin.ui.WarningTestsReportNotifier
7779
import org.utbot.intellij.plugin.ui.utils.getOrCreateSarifReportsPath
7880
import org.utbot.intellij.plugin.ui.utils.showErrorDialogLater
81+
import org.utbot.intellij.plugin.ui.utils.suitableTestSourceRoots
7982
import org.utbot.intellij.plugin.util.RunConfigurationHelper
8083
import org.utbot.intellij.plugin.util.signature
8184
import org.utbot.sarif.SarifReport
@@ -148,7 +151,11 @@ object CodeGenerationController {
148151

149152
run(EDT_LATER) {
150153
waitForCountDown(latch, timeout = 100, timeUnit = TimeUnit.MILLISECONDS) {
151-
val existingUtilClass = model.codegenLanguage.getUtilClassOrNull(baseTestDirectory)
154+
val project = model.project
155+
val language = model.codegenLanguage
156+
val testModule = model.testModule
157+
158+
val existingUtilClass = language.getUtilClassOrNull(project, testModule)
152159

153160
val utilClassKind = utilClassListener.requiredUtilClassKind
154161
?: return@waitForCountDown // no util class needed
@@ -345,6 +352,28 @@ object CodeGenerationController {
345352
}
346353
}
347354

355+
/**
356+
* @param project project whose classes we generate tests for.
357+
* @param testModule module where the generated tests will be placed.
358+
* @return an existing util class from one of the test source roots
359+
* in the given [testModule] or `null` if no util class was found.
360+
*/
361+
private fun CodegenLanguage.getUtilClassOrNull(project: Project, testModule: Module): PsiFile? {
362+
val psiManager = PsiManager.getInstance(project)
363+
364+
// all test roots for the given test module
365+
val testRoots = runReadAction {
366+
testModule
367+
.suitableTestSourceRoots(this)
368+
.mapNotNull { psiManager.findDirectory(it) }
369+
}
370+
371+
// return an util class from one of the test source roots or null if no util class was found
372+
return testRoots
373+
.mapNotNull { testRoot -> getUtilClassOrNull(testRoot) }
374+
.firstOrNull()
375+
}
376+
348377
/**
349378
* Create all package directories for UtUtils class.
350379
* @return the innermost directory - utils from `org.utbot.runtime.utils`

0 commit comments

Comments
 (0)