@@ -8,7 +8,6 @@ import com.intellij.ide.fileTemplates.FileTemplateUtil
88import com.intellij.ide.fileTemplates.JavaTemplateUtil
99import com.intellij.ide.highlighter.JavaFileType
1010import com.intellij.openapi.application.ApplicationManager
11- import com.intellij.openapi.application.invokeLater
1211import com.intellij.openapi.application.runReadAction
1312import com.intellij.openapi.application.runWriteAction
1413import com.intellij.openapi.command.WriteCommandAction.runWriteCommandAction
@@ -23,28 +22,47 @@ import com.intellij.openapi.project.DumbService
2322import com.intellij.openapi.project.Project
2423import com.intellij.openapi.util.Computable
2524import com.intellij.openapi.wm.ToolWindowManager
26- import com.intellij.psi.*
25+ import com.intellij.psi.JavaDirectoryService
26+ import com.intellij.psi.PsiClass
27+ import com.intellij.psi.PsiClassOwner
28+ import com.intellij.psi.PsiComment
29+ import com.intellij.psi.PsiDirectory
30+ import com.intellij.psi.PsiDocumentManager
31+ import com.intellij.psi.PsiElement
32+ import com.intellij.psi.PsiFile
33+ import com.intellij.psi.PsiFileFactory
34+ import com.intellij.psi.PsiManager
35+ import com.intellij.psi.PsiMethod
36+ import com.intellij.psi.SmartPointerManager
37+ import com.intellij.psi.SmartPsiElementPointer
2738import com.intellij.psi.codeStyle.CodeStyleManager
2839import com.intellij.psi.codeStyle.JavaCodeStyleManager
2940import com.intellij.psi.search.GlobalSearchScopesCore
3041import com.intellij.testIntegration.TestIntegrationUtils
3142import com.siyeh.ig.psiutils.ImportUtils
43+ import java.nio.file.Path
44+ import java.util.concurrent.CancellationException
45+ import java.util.concurrent.CountDownLatch
46+ import java.util.concurrent.TimeUnit
3247import mu.KotlinLogging
3348import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
3449import org.jetbrains.kotlin.idea.KotlinFileType
3550import org.jetbrains.kotlin.idea.core.ShortenReferences
3651import org.jetbrains.kotlin.idea.core.getPackage
3752import org.jetbrains.kotlin.idea.core.util.toPsiDirectory
3853import org.jetbrains.kotlin.idea.util.ImportInsertHelperImpl
54+ import org.jetbrains.kotlin.idea.util.projectStructure.allModules
3955import org.jetbrains.kotlin.name.FqName
4056import org.jetbrains.kotlin.psi.KtClass
4157import org.jetbrains.kotlin.psi.KtNamedFunction
4258import org.jetbrains.kotlin.psi.KtPsiFactory
4359import org.jetbrains.kotlin.psi.psiUtil.endOffset
4460import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
4561import org.jetbrains.kotlin.psi.psiUtil.startOffset
62+ import org.utbot.common.FileUtil
4663import org.utbot.common.HTML_LINE_SEPARATOR
4764import org.utbot.common.PathUtil.toHtmlLinkTag
65+ import org.utbot.framework.UtSettings
4866import org.utbot.framework.codegen.Import
4967import org.utbot.framework.codegen.ParametrizedTestSource
5068import org.utbot.framework.codegen.RegularImport
@@ -59,23 +77,25 @@ import org.utbot.intellij.plugin.models.packageName
5977import org.utbot.intellij.plugin.process.EngineProcess
6078import org.utbot.intellij.plugin.process.RdTestGenerationResult
6179import org.utbot.intellij.plugin.sarif.SarifReportIdea
62- import org.utbot.intellij.plugin.ui.*
80+ import org.utbot.intellij.plugin.ui.CommonErrorNotifier
81+ import org.utbot.intellij.plugin.ui.DetailsTestsReportNotifier
82+ import org.utbot.intellij.plugin.ui.SarifReportNotifier
83+ import org.utbot.intellij.plugin.ui.TestReportUrlOpeningListener
84+ import org.utbot.intellij.plugin.ui.TestsReportNotifier
85+ import org.utbot.intellij.plugin.ui.WarningTestsReportNotifier
86+ import org.utbot.intellij.plugin.ui.utils.TestSourceRoot
6387import org.utbot.intellij.plugin.ui.utils.getOrCreateSarifReportsPath
88+ import org.utbot.intellij.plugin.ui.utils.isBuildWithGradle
6489import org.utbot.intellij.plugin.ui.utils.showErrorDialogLater
6590import org.utbot.intellij.plugin.ui.utils.suitableTestSourceRoots
66- import org.utbot.intellij.plugin.util.IntelliJApiHelper.Target.*
91+ import org.utbot.intellij.plugin.util.IntelliJApiHelper.Target.EDT_LATER
92+ import org.utbot.intellij.plugin.util.IntelliJApiHelper.Target.THREAD_POOL
93+ import org.utbot.intellij.plugin.util.IntelliJApiHelper.Target.WRITE_ACTION
6794import org.utbot.intellij.plugin.util.IntelliJApiHelper.run
6895import org.utbot.intellij.plugin.util.RunConfigurationHelper
6996import org.utbot.intellij.plugin.util.extractClassMethodsIncludingNested
7097import org.utbot.sarif.Sarif
7198import org.utbot.sarif.SarifReport
72- import java.nio.file.Path
73- import java.util.concurrent.CancellationException
74- import java.util.concurrent.CountDownLatch
75- import java.util.concurrent.TimeUnit
76- import org.jetbrains.kotlin.idea.util.projectStructure.allModules
77- import org.utbot.intellij.plugin.ui.utils.TestSourceRoot
78- import org.utbot.intellij.plugin.ui.utils.isBuildWithGradle
7999
80100object CodeGenerationController {
81101 private val logger = KotlinLogging .logger {}
@@ -143,14 +163,14 @@ object CodeGenerationController {
143163 }
144164 }
145165
146- run (THREAD_POOL , indicator) {
166+ run (THREAD_POOL , indicator, " Waiting for per-class Sarif reports " ) {
147167 waitForCountDown(latch, indicator = indicator) {
148- run (EDT_LATER , indicator) {
149- run (WRITE_ACTION , indicator) {
168+ run (EDT_LATER , indicator, " Go to EDT for utility class creation " ) {
169+ run (WRITE_ACTION , indicator, " Need write action for utility class creation " ) {
150170 createUtilityClassIfNeed(utilClassListener, model, baseTestDirectory, indicator)
151- run (EDT_LATER , indicator) {
171+ run (EDT_LATER , indicator, " Proceed test report " ) {
152172 proceedTestReport(proc, model)
153- run (THREAD_POOL , indicator) {
173+ run (THREAD_POOL , indicator, " Generate summary Sarif report " ) {
154174 val sarifReportsPath =
155175 model.testModule.getOrCreateSarifReportsPath(model.testSourceRoot)
156176 UtTestsDialogProcessor .updateIndicator(indicator, UtTestsDialogProcessor .ProgressRange .SARIF , " Merge Sarif reports" , 0.75 )
@@ -160,9 +180,9 @@ object CodeGenerationController {
160180 RunConfigurationHelper .runTestsWithCoverage(model, testFilesPointers)
161181 }
162182 proc.forceTermination()
163- UtTestsDialogProcessor .updateIndicator(indicator, UtTestsDialogProcessor .ProgressRange .SARIF , " Start tests with coverage " , 1.0 )
183+ UtTestsDialogProcessor .updateIndicator(indicator, UtTestsDialogProcessor .ProgressRange .SARIF , " Generation finished " , 1.0 )
164184
165- invokeLater {
185+ run ( EDT_LATER , null , " Run sarif-based inspections " ) {
166186 runInspectionsIfNeeded(model, srcClassPathToSarifReport)
167187 }
168188 }
@@ -342,8 +362,8 @@ object CodeGenerationController {
342362
343363 val utUtilsText = utilClassKind.getUtilClassText(model.codegenLanguage)
344364
345- run (EDT_LATER , indicator) {
346- run (WRITE_ACTION , indicator) {
365+ run (EDT_LATER , indicator, " Overwrite utility class " ) {
366+ run (WRITE_ACTION , indicator, " Overwrite utility class " ) {
347367 unblockDocument(model.project, utilsClassDocument)
348368 executeCommand {
349369 utilsClassDocument.setText(utUtilsText.replace(" jdk.internal.misc" , " sun.misc" ))
@@ -520,7 +540,8 @@ object CodeGenerationController {
520540 private fun waitForCountDown (latch : CountDownLatch , timeout : Long = 5, timeUnit : TimeUnit = TimeUnit .SECONDS , indicator : ProgressIndicator , action : Runnable ) {
521541 try {
522542 if (! latch.await(timeout, timeUnit)) {
523- run (THREAD_POOL , indicator) { waitForCountDown(latch, timeout, timeUnit, indicator, action) }
543+ run (THREAD_POOL , indicator, " Waiting for ${latch.count} sarif report(s) in a loop" ) {
544+ waitForCountDown(latch, timeout, timeUnit, indicator, action) }
524545 } else {
525546 action.run ()
526547 }
@@ -643,7 +664,7 @@ object CodeGenerationController {
643664 val editor = CodeInsightUtil .positionCursorAtLBrace(testClass.project, filePointer.containingFile, testClass)
644665 // TODO: Use PsiDocumentManager.getInstance(model.project).getDocument(file)
645666 // if we don't want to open _all_ new files with tests in editor one-by-one
646- run (THREAD_POOL , indicator) {
667+ run (THREAD_POOL , indicator, " Rendering test code " ) {
647668 val (generatedTestsCode, utilClassKind) = try {
648669 proc.render(
649670 testSetsId,
@@ -668,8 +689,8 @@ object CodeGenerationController {
668689 return @run
669690 }
670691 utilClassListener.onTestClassGenerated(utilClassKind)
671- run (EDT_LATER , indicator) {
672- run (WRITE_ACTION , indicator) {
692+ run (EDT_LATER , indicator, " Writing generation text to documents " ) {
693+ run (WRITE_ACTION , indicator, " Writing generation text to documents " ) {
673694 try {
674695 unblockDocument(testClass.project, editor.document)
675696 // TODO: JIRA:1246 - display warnings if we rewrite the file
@@ -689,9 +710,9 @@ object CodeGenerationController {
689710
690711 // reformatting before creating reports due to
691712 // SarifReport requires the final version of the generated tests code
692- run (THREAD_POOL , indicator) {
713+ // run(THREAD_POOL, indicator) {
693714// IntentionHelper(model.project, editor, filePointer).applyIntentions()
694- run (EDT_LATER , indicator) {
715+ run (EDT_LATER , indicator, " Tests reformatting " ) {
695716 try {
696717 runWriteCommandAction(filePointer.project, " UtBot tests reformatting" , null , {
697718 reformat(model, filePointer, testClassUpdated)
@@ -719,7 +740,7 @@ object CodeGenerationController {
719740
720741 unblockDocument(testClassUpdated.project, editor.document)
721742 }
722- }
743+ // }
723744 }
724745 }
725746 }
@@ -729,6 +750,16 @@ object CodeGenerationController {
729750 val project = model.project
730751 val codeStyleManager = CodeStyleManager .getInstance(project)
731752 val file = smartPointer.containingFile? : return
753+
754+ if (file.virtualFile.length > UtSettings .maxTestFileSize) {
755+ CommonErrorNotifier .notify(
756+ " Size of ${file.virtualFile.presentableName} exceeds configured limit " +
757+ " (${FileUtil .byteCountToDisplaySize(UtSettings .maxTestFileSize.toLong())} ), reformatting was skipped. " +
758+ " The limit can be configured in '{HOME_DIR}/.utbot/settings.properties' with 'maxTestFileSize' property" ,
759+ model.project)
760+ return
761+ }
762+
732763 DumbService .getInstance(model.project).runWhenSmart {
733764 codeStyleManager.reformat(file)
734765 when (model.codegenLanguage) {
0 commit comments