8247932: JShell crashes when typing text block
Setting up Log before running javac's scanner, so that errors reported from the scanner are properly ignored. Reviewed-by: rfield
This commit is contained in:
parent
eb758d53f1
commit
61e44cdb6a
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -34,6 +34,7 @@ import java.io.InputStream;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.Charset;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
@ -50,6 +51,9 @@ import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
import javax.tools.DiagnosticListener;
|
||||
import javax.tools.JavaFileObject;
|
||||
import javax.tools.SimpleJavaFileObject;
|
||||
|
||||
import jdk.internal.shellsupport.doc.JavadocFormatter;
|
||||
import jdk.internal.jshell.tool.StopDetectingInputStream.State;
|
||||
@ -974,6 +978,15 @@ class ConsoleIOContext extends IOContext {
|
||||
int pendingBraces = 0;
|
||||
com.sun.tools.javac.util.Context ctx =
|
||||
new com.sun.tools.javac.util.Context();
|
||||
SimpleJavaFileObject source = new SimpleJavaFileObject(URI.create("mem://snippet"),
|
||||
JavaFileObject.Kind.SOURCE) {
|
||||
@Override
|
||||
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
|
||||
return code;
|
||||
}
|
||||
};
|
||||
ctx.put(DiagnosticListener.class, d -> {});
|
||||
com.sun.tools.javac.util.Log.instance(ctx).useSource(source);
|
||||
com.sun.tools.javac.parser.ScannerFactory scannerFactory =
|
||||
com.sun.tools.javac.parser.ScannerFactory.instance(ctx);
|
||||
com.sun.tools.javac.parser.Scanner scanner =
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8241950
|
||||
* @bug 8241950 8247932
|
||||
* @summary Check the UI behavior of indentation
|
||||
* @library /tools/lib
|
||||
* @modules
|
||||
@ -70,6 +70,11 @@ public class IndentUITest extends UITesting {
|
||||
waitOutput(out, "^void test2\\(\\) \\{\n" +
|
||||
CONTINUATION_PROMPT + " System.err.println\\(1\\);\n" +
|
||||
CONTINUATION_PROMPT + "\\}");
|
||||
inputSink.write(INTERRUPT);
|
||||
waitOutput(out, "\u001B\\[\\?2004h" + PROMPT);
|
||||
inputSink.write("\"\"\"\n");
|
||||
waitOutput(out, "^\"\"\"\n" +
|
||||
CONTINUATION_PROMPT);
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user