This is an automated email from the ASF dual-hosted git repository.

vieiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 3ef615af7c RustLanguageLexer: do not throw exceptions.
     new 1e494096b5 Merge pull request #6414 from vieiro/hotfix/lexer
3ef615af7c is described below

commit 3ef615af7c9d97322e2c3f68034badf787be33c6
Author: Antonio <[email protected]>
AuthorDate: Wed Sep 6 20:41:41 2023 +0200

    RustLanguageLexer: do not throw exceptions.
    
    Antlr ErrorListener was throwing exceptions interferring with the EDT.
---
 .../modules/rust/grammar/RustLanguageLexer.java    | 52 +++++++++++++++-------
 .../modules/rust/grammar/antlr4/RustLexerTest.java |  2 -
 .../rust/grammar/antlr4/RustParserTest.java        |  9 ----
 .../modules/rust/grammar/ast/RustASTTest.java      |  2 -
 4 files changed, 36 insertions(+), 29 deletions(-)

diff --git 
a/rust/rust.grammar/src/org/netbeans/modules/rust/grammar/RustLanguageLexer.java
 
b/rust/rust.grammar/src/org/netbeans/modules/rust/grammar/RustLanguageLexer.java
index 80f365b70d..6f812ef5fe 100644
--- 
a/rust/rust.grammar/src/org/netbeans/modules/rust/grammar/RustLanguageLexer.java
+++ 
b/rust/rust.grammar/src/org/netbeans/modules/rust/grammar/RustLanguageLexer.java
@@ -28,7 +28,6 @@ import org.antlr.v4.runtime.RecognitionException;
 import org.antlr.v4.runtime.Recognizer;
 import org.antlr.v4.runtime.atn.ATNConfigSet;
 import org.antlr.v4.runtime.dfa.DFA;
-import org.antlr.v4.runtime.misc.ParseCancellationException;
 import org.netbeans.api.lexer.Token;
 import org.netbeans.modules.rust.grammar.antlr4.RustLexer;
 import org.netbeans.spi.lexer.LexerRestartInfo;
@@ -41,35 +40,55 @@ public class RustLanguageLexer extends 
AbstractAntlrLexerBridge<RustLexer, RustT
 
     private static final Logger LOG = 
Logger.getLogger(RustLanguageLexer.class.getName());
 
-    private static String formatMessage(String kind, Recognizer<?, ?> 
recognizer, Object o, int line, int charPositionInLine, String message, 
RecognitionException ex) {
-        return String.format("%s @%3d:%-3d %s", kind, line, 
charPositionInLine, message);
-    }
-
+    /**
+     * A BaseErrorListener that listens for errors in the lexer. We avoid
+     * throuing exceptions, since AbstractAntlrLexerBridge doesn't know how to
+     * handle them and this may interfere with the EDT. We enable logginf of
+     * errors instead, for debugging and enhancement purposes.
+     */
     private static final class RustLanguageLexerErrorListener extends 
BaseErrorListener {
 
+        private static final Level LEVEL = Level.FINE;
+
+        private static String formatMessage(String kind, Recognizer<?, ?> 
recognizer, Object o, int line, int charPositionInLine, String message, 
RecognitionException ex) {
+            return String.format("%s @%3d:%-3d %s", kind, line, 
charPositionInLine, message);
+        }
+
         @Override
         public void syntaxError(Recognizer<?, ?> recognizer, Object 
offendingSymbol, int line, int charPositionInLine, String msg, 
RecognitionException e) {
-            String errorMessage = formatMessage("RUST: Syntax error: ", 
recognizer, offendingSymbol, line, charPositionInLine, msg, e);
-            LOG.log(Level.SEVERE, errorMessage);
-            throw new ParseCancellationException(e);
+            if (LOG.isLoggable(LEVEL)) {
+                String errorMessage = formatMessage("RUST: Syntax error: ", 
recognizer, offendingSymbol, line, charPositionInLine, msg, e);
+                LOG.log(LEVEL, errorMessage);
+            }
         }
 
         @Override
         public void reportAmbiguity(Parser parser, DFA dfa, int line, int 
charPositionInLine, boolean bln, BitSet bitset, ATNConfigSet atncs) {
-            String errorMessage = formatMessage("RUST: Ambiguity: ", null, 
null, line, charPositionInLine, "Ambiguity error", null);
-            LOG.log(Level.WARNING, errorMessage);
+            if (LOG.isLoggable(LEVEL)) {
+                String errorMessage = formatMessage("RUST: Ambiguity: ", null, 
null, line, charPositionInLine, "Ambiguity error", null);
+                LOG.log(LEVEL, errorMessage);
+            }
         }
 
         @Override
-        public void reportAttemptingFullContext(Parser parser, DFA dfa, int 
line, int charPositionInLine, BitSet bitset, ATNConfigSet atncs) {
-            String errorMessage = formatMessage("RUST: AttemptingFullContext: 
", null, null, line, charPositionInLine, "Ambiguity error", null);
-            LOG.log(Level.WARNING, errorMessage);
+        public void reportAttemptingFullContext(Parser parser, DFA dfa,
+                int line, int charPositionInLine, BitSet bitset,
+                ATNConfigSet atncs
+        ) {
+            if (LOG.isLoggable(LEVEL)) {
+                String errorMessage = formatMessage("RUST: 
AttemptingFullContext: ", null, null, line, charPositionInLine, "Ambiguity 
error", null);
+                LOG.log(LEVEL, errorMessage);
+            }
         }
 
         @Override
-        public void reportContextSensitivity(Parser parser, DFA dfa, int line, 
int charPositionInLine, int line2, ATNConfigSet atncs) {
-            String errorMessage = formatMessage("RUST: ContextSensitivity", 
null, null, line, charPositionInLine, "Ambiguity error", null);
-            LOG.log(Level.WARNING, errorMessage);
+        public void reportContextSensitivity(Parser parser, DFA dfa,
+                int line, int charPositionInLine, int line2, ATNConfigSet atncs
+        ) {
+            if (LOG.isLoggable(LEVEL)) {
+                String errorMessage = formatMessage("RUST: 
ContextSensitivity", null, null, line, charPositionInLine, "Ambiguity error", 
null);
+                LOG.log(LEVEL, errorMessage);
+            }
         }
 
     }
@@ -96,6 +115,7 @@ public class RustLanguageLexer extends 
AbstractAntlrLexerBridge<RustLexer, RustT
     }
 
     private static final class LexerState extends 
AbstractAntlrLexerBridge.LexerState<RustLexer> {
+
         final Integer lt1;
         final Integer lt2;
 
diff --git 
a/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/antlr4/RustLexerTest.java
 
b/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/antlr4/RustLexerTest.java
index 161ae541ab..2b46f0e546 100644
--- 
a/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/antlr4/RustLexerTest.java
+++ 
b/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/antlr4/RustLexerTest.java
@@ -18,8 +18,6 @@
  */
 package org.netbeans.modules.rust.grammar.antlr4;
 
-import org.antlr.v4.runtime.CharStreams;
-import org.antlr.v4.runtime.Token;
 import org.junit.Assert;
 import org.junit.Test;
 import org.netbeans.junit.NbTestCase;
diff --git 
a/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/antlr4/RustParserTest.java
 
b/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/antlr4/RustParserTest.java
index 8d9f643aa4..674de09e27 100644
--- 
a/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/antlr4/RustParserTest.java
+++ 
b/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/antlr4/RustParserTest.java
@@ -18,17 +18,8 @@
  */
 package org.netbeans.modules.rust.grammar.antlr4;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import org.antlr.v4.runtime.CharStreams;
-import org.antlr.v4.runtime.CommonTokenStream;
 import org.junit.Test;
 import org.netbeans.junit.NbTestCase;
-import org.netbeans.modules.rust.grammar.antlr4.RustParser.CrateContext;
 
 /**
  *
diff --git 
a/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/ast/RustASTTest.java
 
b/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/ast/RustASTTest.java
index 3b559bba4a..2b8bd644d1 100644
--- 
a/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/ast/RustASTTest.java
+++ 
b/rust/rust.grammar/test/unit/src/org/netbeans/modules/rust/grammar/ast/RustASTTest.java
@@ -19,8 +19,6 @@
 package org.netbeans.modules.rust.grammar.ast;
 
 import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.function.Consumer;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to