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