From fc208853a438d74dcff9b3c50c11bcf5f14a6cdb Mon Sep 17 00:00:00 2001 From: Max Weber Date: Fri, 16 Jul 2021 19:07:34 -0600 Subject: [PATCH] jshell: better unresolved symbol handling --- .../java/net/runelite/jshell/ShellPanel.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/runelite-jshell/src/main/java/net/runelite/jshell/ShellPanel.java b/runelite-jshell/src/main/java/net/runelite/jshell/ShellPanel.java index d439db5de9..8a5c07c1d1 100644 --- a/runelite-jshell/src/main/java/net/runelite/jshell/ShellPanel.java +++ b/runelite-jshell/src/main/java/net/runelite/jshell/ShellPanel.java @@ -55,6 +55,7 @@ import javax.swing.JTextArea; import javax.swing.SwingUtilities; import javax.swing.text.BadLocationException; import javax.swing.text.Segment; +import jdk.jshell.DeclarationSnippet; import jdk.jshell.Diag; import jdk.jshell.JShell; import jdk.jshell.Snippet; @@ -315,11 +316,13 @@ public abstract class ShellPanel extends JPanel { Snippet snip = ev.snippet(); offsets.put("#" + snip.id(), thisOffset); - if (ev.status() != Snippet.Status.VALID && ev.status() != Snippet.Status.RECOVERABLE_DEFINED) + if (ev.status() != Snippet.Status.VALID) { + boolean handled = false; var diags = shell.diagnostics(snip).collect(Collectors.toList()); for (var diag : diags) { + handled = true; String msg = toStringDiagnostic(src, thisOffset, diag); if (isUserCode) { @@ -331,11 +334,23 @@ public abstract class ShellPanel extends JPanel throw new RuntimeException("prelude error: " + msg); } } - if (diags.isEmpty()) + if (snip instanceof DeclarationSnippet) + { + var unresolved = shell.unresolvedDependencies((DeclarationSnippet) snip).collect(Collectors.toList()); + for (var ident : unresolved) + { + handled = true; + logToConsole("Unresolved symbol: " + ident); + } + } + if (!handled) { logToConsole("bad snippet" + ev.status()); } - break evaluation; + if (ev.status() != Snippet.Status.RECOVERABLE_DEFINED) + { + break evaluation; + } } if (ev.exception() != null) {