diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchExecutor.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchExecutor.kt index df100aecd46..8bf95528530 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchExecutor.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchExecutor.kt @@ -187,6 +187,8 @@ abstract class SequentialScratchExecutor(file: ScratchFile) : ScratchExecutor(fi stopExecution { lock.release() } - lock.tryAcquire(2, TimeUnit.SECONDS) + check(lock.tryAcquire(2, TimeUnit.SECONDS)) { + "Couldn't stop REPL process in 2 seconds" + } } } \ No newline at end of file diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/repl/KtScratchReplExecutor.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/repl/KtScratchReplExecutor.kt index dddb8709631..87c2490d521 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/repl/KtScratchReplExecutor.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/repl/KtScratchReplExecutor.kt @@ -52,11 +52,15 @@ class KtScratchReplExecutor(file: ScratchFile) : SequentialScratchExecutor(file) } override fun stopExecution(callback: (() -> Unit)?) { - val osProcessHandler = osProcessHandler ?: return + val processHandler = osProcessHandler + if (processHandler == null) { + callback?.invoke() + return + } try { if (callback != null) { - osProcessHandler.addProcessListener(object : ProcessAdapter() { + processHandler.addProcessListener(object : ProcessAdapter() { override fun processTerminated(event: ProcessEvent) { callback() } @@ -66,7 +70,7 @@ class KtScratchReplExecutor(file: ScratchFile) : SequentialScratchExecutor(file) } catch (e: Exception) { errorOccurs("Couldn't stop REPL process", e, false) - osProcessHandler.destroyProcess() + processHandler.destroyProcess() clearState() } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/scratch/AbstractScratchRunActionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/scratch/AbstractScratchRunActionTest.kt index 1b1ec12870b..2a609e7d82f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/scratch/AbstractScratchRunActionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/scratch/AbstractScratchRunActionTest.kt @@ -144,7 +144,7 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() { if (!KotlinHighlightingUtil.shouldHighlight(myFixture.file)) error("Highlighting for scratch file is switched off") launchScratch() - waitUntilScratchFinishes() + waitUntilScratchFinishes(isRepl) } private fun getExpectedFile(fileName: String, isRepl: Boolean, suffix: String): File { diff --git a/idea/tests/org/jetbrains/kotlin/idea/scratch/CustomScratchRunActionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/scratch/CustomScratchRunActionTest.kt index 022019376ee..27525727d5c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/scratch/CustomScratchRunActionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/scratch/CustomScratchRunActionTest.kt @@ -39,7 +39,7 @@ class CustomScratchRunActionTest : AbstractScratchRunActionTest() { configureScratchByText("scratch_1.kts", fileText) launchScratch() - waitUntilScratchFinishes() + waitUntilScratchFinishes(isRepl) return getFileTextWithInlays() }