From e5a40c8c7f8c8f48a528ddaa002e37fc8d5c7269 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Mon, 7 May 2018 14:41:24 +0300 Subject: [PATCH] Scratch: substring output and print it to separate tool window if it is too long ^KT-24016 In Progress --- .../idea/scratch/output/InlayScratchOutputHandler.kt | 8 +++++++- .../scratch/output/InlayScratchOutputHandler.kt.172 | 8 +++++++- .../kotlin/idea/scratch/ui/ScratchToolWindowFactory.kt | 2 +- idea/testData/scratch/unresolvedMultiline.comp.after | 2 +- idea/testData/scratch/veryLongOutput.comp.after | 2 ++ idea/testData/scratch/veryLongOutput.kts | 2 ++ idea/testData/scratch/veryLongOutput.repl.after | 2 ++ .../idea/scratch/ScratchRunActionTestGenerated.java | 10 ++++++++++ 8 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 idea/testData/scratch/veryLongOutput.comp.after create mode 100644 idea/testData/scratch/veryLongOutput.kts create mode 100644 idea/testData/scratch/veryLongOutput.repl.after diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/output/InlayScratchOutputHandler.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/output/InlayScratchOutputHandler.kt index b0236d76812..ce6bfaf96a2 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/output/InlayScratchOutputHandler.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/output/InlayScratchOutputHandler.kt @@ -24,6 +24,7 @@ import com.intellij.openapi.editor.impl.FontInfo import com.intellij.openapi.editor.markup.TextAttributes import com.intellij.openapi.fileEditor.TextEditor import com.intellij.openapi.util.Disposer +import com.intellij.openapi.util.text.StringUtil import com.intellij.ui.Colors import com.intellij.ui.JBColor import com.intellij.util.ui.UIUtil @@ -44,7 +45,12 @@ object InlayScratchOutputHandler : ScratchOutputHandler { } override fun handle(file: ScratchFile, expression: ScratchExpression, output: ScratchOutput) { - createInlay(file, expression.lineStart, output.text.substringBefore("\n"), output.type) + val inlayText = StringUtil.shortenTextWithEllipsis(output.text.substringBefore("\n"), 50, 0) + if (inlayText != output.text) { + ScratchToolWindow.addMessageToToolWindow(file.project, output.text, ConsoleViewContentType.NORMAL_OUTPUT) + } + + createInlay(file, expression.lineStart, inlayText, output.type) if (output.type == ScratchOutputType.ERROR) { error(file, output.text) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/output/InlayScratchOutputHandler.kt.172 b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/output/InlayScratchOutputHandler.kt.172 index 56e60e99b20..d2c4c437532 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/output/InlayScratchOutputHandler.kt.172 +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/output/InlayScratchOutputHandler.kt.172 @@ -24,6 +24,7 @@ import com.intellij.openapi.editor.impl.FontInfo import com.intellij.openapi.editor.markup.TextAttributes import com.intellij.openapi.fileEditor.TextEditor import com.intellij.openapi.util.Disposer +import com.intellij.openapi.util.text.StringUtil import com.intellij.ui.Colors import com.intellij.ui.JBColor import com.intellij.util.ui.UIUtil @@ -44,7 +45,12 @@ object InlayScratchOutputHandler : ScratchOutputHandler { } override fun handle(file: ScratchFile, expression: ScratchExpression, output: ScratchOutput) { - createInlay(file, expression.lineStart, output.text.substringBefore("\n"), output.type) + val inlayText = StringUtil.shortenTextWithEllipsis(output.text.substringBefore("\n"), 50, 0) + if (inlayText != output.text) { + ScratchToolWindow.addMessageToToolWindow(file.project, output.text, ConsoleViewContentType.NORMAL_OUTPUT) + } + + createInlay(file, expression.lineStart, inlayText, output.type) if (output.type == ScratchOutputType.ERROR) { error(file, output.text) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ui/ScratchToolWindowFactory.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ui/ScratchToolWindowFactory.kt index 102d21dc9d4..5a1d01afd6d 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ui/ScratchToolWindowFactory.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ui/ScratchToolWindowFactory.kt @@ -33,7 +33,7 @@ import com.intellij.openapi.wm.ToolWindowManager class ScratchToolWindowFactory : ToolWindowFactory { companion object { - val ID = "Scratch error output" + val ID = "Scratch Output" } override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) { diff --git a/idea/testData/scratch/unresolvedMultiline.comp.after b/idea/testData/scratch/unresolvedMultiline.comp.after index 2dac17a1d44..5cef0489a83 100644 --- a/idea/testData/scratch/unresolvedMultiline.comp.after +++ b/idea/testData/scratch/unresolvedMultiline.comp.after @@ -1,3 +1,3 @@ -foo.forEach { // ERROR: Unresolved reference: foo; Cannot choose among the following candidates without completing type inference: +foo.forEach { // ERROR: Unresolved reference: foo; Cannot choose among the following candidates wi... 1 + 1 } \ No newline at end of file diff --git a/idea/testData/scratch/veryLongOutput.comp.after b/idea/testData/scratch/veryLongOutput.comp.after new file mode 100644 index 00000000000..929c9cf2682 --- /dev/null +++ b/idea/testData/scratch/veryLongOutput.comp.after @@ -0,0 +1,2 @@ +val a = "a".repeat(100) // RESULT: val a: String +a // RESULT: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... diff --git a/idea/testData/scratch/veryLongOutput.kts b/idea/testData/scratch/veryLongOutput.kts new file mode 100644 index 00000000000..08488e2dfc5 --- /dev/null +++ b/idea/testData/scratch/veryLongOutput.kts @@ -0,0 +1,2 @@ +val a = "a".repeat(100) +a \ No newline at end of file diff --git a/idea/testData/scratch/veryLongOutput.repl.after b/idea/testData/scratch/veryLongOutput.repl.after new file mode 100644 index 00000000000..9de292f046c --- /dev/null +++ b/idea/testData/scratch/veryLongOutput.repl.after @@ -0,0 +1,2 @@ +val a = "a".repeat(100) +a // RESULT: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... diff --git a/idea/tests/org/jetbrains/kotlin/idea/scratch/ScratchRunActionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/scratch/ScratchRunActionTestGenerated.java index 93c1917d50a..5615433d819 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/scratch/ScratchRunActionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/scratch/ScratchRunActionTestGenerated.java @@ -81,6 +81,11 @@ public class ScratchRunActionTestGenerated extends AbstractScratchRunActionTest runTest("idea/testData/scratch/var.kts"); } + @TestMetadata("veryLongOutput.kts") + public void testVeryLongOutput() throws Exception { + runTest("idea/testData/scratch/veryLongOutput.kts"); + } + @TestMetadata("when.kts") public void testWhen() throws Exception { runTest("idea/testData/scratch/when.kts"); @@ -149,6 +154,11 @@ public class ScratchRunActionTestGenerated extends AbstractScratchRunActionTest runTest("idea/testData/scratch/var.kts"); } + @TestMetadata("veryLongOutput.kts") + public void testVeryLongOutput() throws Exception { + runTest("idea/testData/scratch/veryLongOutput.kts"); + } + @TestMetadata("when.kts") public void testWhen() throws Exception { runTest("idea/testData/scratch/when.kts");