From 375e760e8a46f1d463afd37f51074be0538b5d00 Mon Sep 17 00:00:00 2001 From: jlahoda Date: Thu, 2 Nov 2017 10:09:34 +0100 Subject: [PATCH] 8189595: jshell tool: line redrawn on each completion Reviewed-by: rfield --- .../jshell/tool/ConsoleIOContext.java | 18 ++++++++----- .../jdk/jshell/ToolTabCommandTest.java | 4 --- .../jdk/jshell/ToolTabSnippetTest.java | 27 ++++++++++++++++++- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java index 8d152d4678..9de6bab752 100644 --- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java +++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java @@ -237,7 +237,11 @@ class ConsoleIOContext extends IOContext { .distinct() .count() == 2; boolean tooManyItems = suggestions.size() > in.getAutoprintThreshold(); - CompletionTask ordinaryCompletion = new OrdinaryCompletionTask(suggestions, anchor[0], !command && !doc.isEmpty(), hasSmart); + CompletionTask ordinaryCompletion = + new OrdinaryCompletionTask(suggestions, + anchor[0], + !command && !doc.isEmpty(), + hasBoth); CompletionTask allCompletion = new AllSuggestionsCompletionTask(suggestions, anchor[0]); todo = new ArrayList<>(); @@ -439,16 +443,16 @@ class ConsoleIOContext extends IOContext { private final List suggestions; private final int anchor; private final boolean cont; - private final boolean smart; + private final boolean showSmart; public OrdinaryCompletionTask(List suggestions, int anchor, boolean cont, - boolean smart) { + boolean showSmart) { this.suggestions = suggestions; this.anchor = anchor; this.cont = cont; - this.smart = smart; + this.showSmart = showSmart; } @Override @@ -460,7 +464,7 @@ class ConsoleIOContext extends IOContext { public Result perform(String text, int cursor) throws IOException { List toShow; - if (smart) { + if (showSmart) { toShow = suggestions.stream() .filter(Suggestion::matchesType) @@ -487,7 +491,7 @@ class ConsoleIOContext extends IOContext { String prefixStr = prefix.orElse("").substring(cursor - anchor); in.putString(prefixStr); - boolean showItems = toShow.size() > 1 || smart; + boolean showItems = toShow.size() > 1 || showSmart; if (showItems) { in.println(); @@ -495,7 +499,7 @@ class ConsoleIOContext extends IOContext { } if (!prefixStr.isEmpty()) - return showItems ? Result.SKIP : Result.SKIP_NOREPAINT; + return showItems ? Result.FINISH : Result.SKIP_NOREPAINT; return cont ? Result.CONTINUE : Result.FINISH; } diff --git a/test/langtools/jdk/jshell/ToolTabCommandTest.java b/test/langtools/jdk/jshell/ToolTabCommandTest.java index aea35c8fd9..36caa77672 100644 --- a/test/langtools/jdk/jshell/ToolTabCommandTest.java +++ b/test/langtools/jdk/jshell/ToolTabCommandTest.java @@ -84,10 +84,6 @@ public class ToolTabCommandTest extends UITesting { inputSink.write("\u0003/env \011"); waitOutput(out, "\u0005/env -\n" + "-add-exports -add-modules -class-path -module-path \n" + - "\r\u0005/env -"); - - inputSink.write("\011"); - waitOutput(out, "-add-exports -add-modules -class-path -module-path \n" + "\n" + Pattern.quote(getResource("jshell.console.see.synopsis")) + "\n" + "\r\u0005/env -"); diff --git a/test/langtools/jdk/jshell/ToolTabSnippetTest.java b/test/langtools/jdk/jshell/ToolTabSnippetTest.java index be916b6b6d..996d121705 100644 --- a/test/langtools/jdk/jshell/ToolTabSnippetTest.java +++ b/test/langtools/jdk/jshell/ToolTabSnippetTest.java @@ -23,7 +23,7 @@ /** * @test - * @bug 8177076 8185426 + * @bug 8177076 8185426 8189595 * @modules * jdk.compiler/com.sun.tools.javac.api * jdk.compiler/com.sun.tools.javac.main @@ -227,6 +227,31 @@ public class ToolTabSnippetTest extends UITesting { }); } + public void testNoRepeat() throws Exception { + doRunTest((inputSink, out) -> { + inputSink.write("String xyzAA;\n"); + waitOutput(out, "\u0005"); + + //xyz + inputSink.write("String s = xyz\011"); + waitOutput(out, "^String s = xyzAA"); + inputSink.write("."); + waitOutput(out, "^\\."); + + inputSink.write("\u0003"); + waitOutput(out, "\u0005"); + + inputSink.write("double xyzAB;\n"); + waitOutput(out, "\u0005"); + + //xyz + inputSink.write("String s = xyz\011"); + String allCompletions = + Pattern.quote(getResource("jshell.console.completion.all.completions")); + waitOutput(out, ".*xyzAA.*" + allCompletions + ".*\u0005String s = xyzA"); + }); + } + private Path prepareZip() { String clazz1 = "package jshelltest;\n" + -- GitLab