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

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

commit 52409ead93742bbf36a51b00a2148002161b5b2d
Author: Laszlo Kishalmi <laszlo.kisha...@gmail.com>
AuthorDate: Wed Aug 31 21:28:00 2022 -0700

    A slightly better CharStream implementation
---
 .../modules/languages/toml/LexerInputCharStream.java    | 17 +++++++++++------
 .../org/netbeans/modules/languages/toml/TomlLexer.java  |  5 ++++-
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git 
a/ide/languages.toml/src/org/netbeans/modules/languages/toml/LexerInputCharStream.java
 
b/ide/languages.toml/src/org/netbeans/modules/languages/toml/LexerInputCharStream.java
index e830b63e3b..5f359d8485 100644
--- 
a/ide/languages.toml/src/org/netbeans/modules/languages/toml/LexerInputCharStream.java
+++ 
b/ide/languages.toml/src/org/netbeans/modules/languages/toml/LexerInputCharStream.java
@@ -28,8 +28,8 @@ import org.netbeans.spi.lexer.*;
  */
 public class LexerInputCharStream implements CharStream {
     private final LexerInput input;
-    private final StringBuilder readBuffer = new StringBuilder();
 
+    private int tokenMark = Integer.MAX_VALUE;
     private int index = 0;
 
     public LexerInputCharStream(LexerInput input) {
@@ -38,8 +38,12 @@ public class LexerInputCharStream implements CharStream {
 
     @Override
     public String getText(Interval intrvl) {
-        int end = Math.min(intrvl.b + 1, readBuffer.length());
-        return readBuffer.substring(intrvl.a, end);
+        if (intrvl.a < tokenMark) {
+            throw new UnsupportedOperationException("Read before the current 
token start is not supported: " + intrvl.a + " < " + tokenMark);
+        }
+        int start = intrvl.a - tokenMark;
+        int end = intrvl.b - tokenMark + 1;
+        return String.valueOf(input.readText(start, end));
     }
 
     @Override
@@ -97,9 +101,6 @@ public class LexerInputCharStream implements CharStream {
 
     private int read() {
         int ret = input.read();
-        if ((readBuffer.length() == index) && (ret != EOF)) {
-            readBuffer.append((char)ret);
-        }
         index += 1;
         return ret;
     }
@@ -109,6 +110,10 @@ public class LexerInputCharStream implements CharStream {
         input.backup(count);
     }
 
+    public final void markToken() {
+        tokenMark = index;
+    }
+
     @Override
     public int size() {
         throw new UnsupportedOperationException("Stream size is unknown.");
diff --git 
a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLexer.java 
b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLexer.java
index a30199cf5f..dcbced435f 100644
--- a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLexer.java
+++ b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLexer.java
@@ -36,10 +36,12 @@ public final class TomlLexer implements Lexer<TomlTokenId> {
 
     private final TokenFactory<TomlTokenId> tokenFactory;
     private final org.tomlj.internal.TomlLexer lexer;
+    private final LexerInputCharStream input;
 
     public TomlLexer(LexerRestartInfo<TomlTokenId> info) {
         this.tokenFactory = info.tokenFactory();
-        this.lexer = new org.tomlj.internal.TomlLexer(new 
LexerInputCharStream(info.input()));
+        this.input = new LexerInputCharStream(info.input());
+        this.lexer = new org.tomlj.internal.TomlLexer(input);
         if (info.state() != null) {
             ((LexerState) info.state()).restore(lexer);
         }
@@ -130,6 +132,7 @@ public final class TomlLexer implements Lexer<TomlTokenId> {
     }
 
     private Token<TomlTokenId> token(TomlTokenId id) {
+        input.markToken();
         return tokenFactory.createToken(id);
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

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

Reply via email to