@@ -8,7 +8,6 @@ import com.intellij.ide.fileTemplates.FileTemplateUtil
8
8
import com.intellij.ide.fileTemplates.JavaTemplateUtil
9
9
import com.intellij.ide.highlighter.JavaFileType
10
10
import com.intellij.openapi.application.ApplicationManager
11
- import com.intellij.openapi.application.invokeLater
12
11
import com.intellij.openapi.application.runReadAction
13
12
import com.intellij.openapi.application.runWriteAction
14
13
import com.intellij.openapi.command.WriteCommandAction.runWriteCommandAction
@@ -23,28 +22,47 @@ import com.intellij.openapi.project.DumbService
23
22
import com.intellij.openapi.project.Project
24
23
import com.intellij.openapi.util.Computable
25
24
import 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
27
38
import com.intellij.psi.codeStyle.CodeStyleManager
28
39
import com.intellij.psi.codeStyle.JavaCodeStyleManager
29
40
import com.intellij.psi.search.GlobalSearchScopesCore
30
41
import com.intellij.testIntegration.TestIntegrationUtils
31
42
import 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
32
47
import mu.KotlinLogging
33
48
import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
34
49
import org.jetbrains.kotlin.idea.KotlinFileType
35
50
import org.jetbrains.kotlin.idea.core.ShortenReferences
36
51
import org.jetbrains.kotlin.idea.core.getPackage
37
52
import org.jetbrains.kotlin.idea.core.util.toPsiDirectory
38
53
import org.jetbrains.kotlin.idea.util.ImportInsertHelperImpl
54
+ import org.jetbrains.kotlin.idea.util.projectStructure.allModules
39
55
import org.jetbrains.kotlin.name.FqName
40
56
import org.jetbrains.kotlin.psi.KtClass
41
57
import org.jetbrains.kotlin.psi.KtNamedFunction
42
58
import org.jetbrains.kotlin.psi.KtPsiFactory
43
59
import org.jetbrains.kotlin.psi.psiUtil.endOffset
44
60
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
45
61
import org.jetbrains.kotlin.psi.psiUtil.startOffset
62
+ import org.utbot.common.FileUtil
46
63
import org.utbot.common.HTML_LINE_SEPARATOR
47
64
import org.utbot.common.PathUtil.toHtmlLinkTag
65
+ import org.utbot.framework.UtSettings
48
66
import org.utbot.framework.codegen.Import
49
67
import org.utbot.framework.codegen.ParametrizedTestSource
50
68
import org.utbot.framework.codegen.RegularImport
@@ -59,23 +77,25 @@ import org.utbot.intellij.plugin.models.packageName
59
77
import org.utbot.intellij.plugin.process.EngineProcess
60
78
import org.utbot.intellij.plugin.process.RdTestGenerationResult
61
79
import 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
63
87
import org.utbot.intellij.plugin.ui.utils.getOrCreateSarifReportsPath
88
+ import org.utbot.intellij.plugin.ui.utils.isBuildWithGradle
64
89
import org.utbot.intellij.plugin.ui.utils.showErrorDialogLater
65
90
import 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
67
94
import org.utbot.intellij.plugin.util.IntelliJApiHelper.run
68
95
import org.utbot.intellij.plugin.util.RunConfigurationHelper
69
96
import org.utbot.intellij.plugin.util.extractClassMethodsIncludingNested
70
97
import org.utbot.sarif.Sarif
71
98
import 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
79
99
80
100
object CodeGenerationController {
81
101
private val logger = KotlinLogging .logger {}
@@ -143,14 +163,14 @@ object CodeGenerationController {
143
163
}
144
164
}
145
165
146
- run (THREAD_POOL , indicator) {
166
+ run (THREAD_POOL , indicator, " Waiting for per-class Sarif reports " ) {
147
167
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 " ) {
150
170
createUtilityClassIfNeed(utilClassListener, model, baseTestDirectory, indicator)
151
- run (EDT_LATER , indicator) {
171
+ run (EDT_LATER , indicator, " Proceed test report " ) {
152
172
proceedTestReport(proc, model)
153
- run (THREAD_POOL , indicator) {
173
+ run (THREAD_POOL , indicator, " Generate summary Sarif report " ) {
154
174
val sarifReportsPath =
155
175
model.testModule.getOrCreateSarifReportsPath(model.testSourceRoot)
156
176
UtTestsDialogProcessor .updateIndicator(indicator, UtTestsDialogProcessor .ProgressRange .SARIF , " Merge Sarif reports" , 0.75 )
@@ -160,9 +180,9 @@ object CodeGenerationController {
160
180
RunConfigurationHelper .runTestsWithCoverage(model, testFilesPointers)
161
181
}
162
182
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 )
164
184
165
- invokeLater {
185
+ run ( EDT_LATER , null , " Run sarif-based inspections " ) {
166
186
runInspectionsIfNeeded(model, srcClassPathToSarifReport)
167
187
}
168
188
}
@@ -342,8 +362,8 @@ object CodeGenerationController {
342
362
343
363
val utUtilsText = utilClassKind.getUtilClassText(model.codegenLanguage)
344
364
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 " ) {
347
367
unblockDocument(model.project, utilsClassDocument)
348
368
executeCommand {
349
369
utilsClassDocument.setText(utUtilsText.replace(" jdk.internal.misc" , " sun.misc" ))
@@ -520,7 +540,8 @@ object CodeGenerationController {
520
540
private fun waitForCountDown (latch : CountDownLatch , timeout : Long = 5, timeUnit : TimeUnit = TimeUnit .SECONDS , indicator : ProgressIndicator , action : Runnable ) {
521
541
try {
522
542
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) }
524
545
} else {
525
546
action.run ()
526
547
}
@@ -643,7 +664,7 @@ object CodeGenerationController {
643
664
val editor = CodeInsightUtil .positionCursorAtLBrace(testClass.project, filePointer.containingFile, testClass)
644
665
// TODO: Use PsiDocumentManager.getInstance(model.project).getDocument(file)
645
666
// 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 " ) {
647
668
val (generatedTestsCode, utilClassKind) = try {
648
669
proc.render(
649
670
testSetsId,
@@ -668,8 +689,8 @@ object CodeGenerationController {
668
689
return @run
669
690
}
670
691
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 " ) {
673
694
try {
674
695
unblockDocument(testClass.project, editor.document)
675
696
// TODO: JIRA:1246 - display warnings if we rewrite the file
@@ -689,9 +710,9 @@ object CodeGenerationController {
689
710
690
711
// reformatting before creating reports due to
691
712
// SarifReport requires the final version of the generated tests code
692
- run (THREAD_POOL , indicator) {
713
+ // run(THREAD_POOL, indicator) {
693
714
// IntentionHelper(model.project, editor, filePointer).applyIntentions()
694
- run (EDT_LATER , indicator) {
715
+ run (EDT_LATER , indicator, " Tests reformatting " ) {
695
716
try {
696
717
runWriteCommandAction(filePointer.project, " UtBot tests reformatting" , null , {
697
718
reformat(model, filePointer, testClassUpdated)
@@ -719,7 +740,7 @@ object CodeGenerationController {
719
740
720
741
unblockDocument(testClassUpdated.project, editor.document)
721
742
}
722
- }
743
+ // }
723
744
}
724
745
}
725
746
}
@@ -729,6 +750,16 @@ object CodeGenerationController {
729
750
val project = model.project
730
751
val codeStyleManager = CodeStyleManager .getInstance(project)
731
752
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
+
732
763
DumbService .getInstance(model.project).runWhenSmart {
733
764
codeStyleManager.reformat(file)
734
765
when (model.codegenLanguage) {
0 commit comments