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