diff --git a/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java b/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java index 4ee629476db..cb4861651e3 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java @@ -66,6 +66,7 @@ import com.sun.tools.javac.parser.Tokens.Token; import com.sun.tools.javac.parser.Tokens.TokenKind; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.Context; +import com.sun.tools.javac.util.Log; import jdk.internal.shellsupport.doc.JavadocHelper; import com.sun.tools.javac.util.Name; import com.sun.tools.javac.util.Names; @@ -139,6 +140,7 @@ import javax.lang.model.type.ExecutableType; import javax.lang.model.type.TypeKind; import javax.lang.model.util.ElementFilter; import javax.lang.model.util.Types; +import javax.tools.DiagnosticListener; import javax.tools.JavaFileManager.Location; import javax.tools.StandardLocation; @@ -654,7 +656,10 @@ class SourceCodeAnalysisImpl extends SourceCodeAnalysis { Trees trees = task.trees(); SourcePositions sp = trees.getSourcePositions(); List tokens = new ArrayList<>(); - Scanner scanner = ScannerFactory.instance(new Context()).newScanner(wrappedCode, false); + Context ctx = new Context(); + ctx.put(DiagnosticListener.class, (DiagnosticListener) d -> {}); + Scanner scanner = ScannerFactory.instance(ctx).newScanner(wrappedCode, false); + Log.instance(ctx).useSource(cut.getSourceFile()); scanner.nextToken(); BiConsumer addKeywordForSpan = (spanStart, spanEnd) -> { int start = codeWrap.wrapIndexToSnippetIndex(spanStart); diff --git a/test/langtools/jdk/jshell/SnippetHighlightTest.java b/test/langtools/jdk/jshell/SnippetHighlightTest.java index 9c59a3d8016..902d4347f74 100644 --- a/test/langtools/jdk/jshell/SnippetHighlightTest.java +++ b/test/langtools/jdk/jshell/SnippetHighlightTest.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8274148 8301580 + * @bug 8274148 8301580 8359497 * @summary Check snippet highlighting * @library /tools/lib * @modules jdk.compiler/com.sun.tools.javac.api @@ -114,6 +114,12 @@ public class SnippetHighlightTest extends KullaTesting { "Highlight[start=32, end=38, attributes=[KEYWORD]]"); } + public void testNoCrashOnLexicalErrors() { //JDK-8359497 + assertHighlights(""" + " + """); + } + private void assertHighlights(String code, String... expected) { List completions = computeHighlights(code); assertEquals(completions, Arrays.asList(expected), "Input: " + code + ", " + completions.toString());