From 8462cee3cb096437499ade52a6e5379f33b28fed Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Mon, 25 Apr 2022 15:53:48 +0200 Subject: [PATCH] Replace uses of StringBuffer in lexer/parser templates StringBuffer is synchronized for thread safety, but Lexer is already not thread-safe anyway, so this is unnecessary overhead. The other uses of StringBuffer were local in a single method and so can also be safely replaced. --- src/main/java/org/sablecc/sablecc/lexer/Lexer.java | 10 ++-------- src/main/java/org/sablecc/sablecc/parser/Parser.java | 2 +- src/main/resources/org/sablecc/sablecc/lexer.txt | 10 ++-------- src/main/resources/org/sablecc/sablecc/parser.txt | 2 +- 4 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java index d053187..3eafaec 100644 --- a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java +++ b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java @@ -19,7 +19,7 @@ public class Lexer implements ITokenListContainer protected int pos; private boolean cr; private boolean eof; - private final StringBuffer text = new StringBuffer(); + private final StringBuilder text = new StringBuilder(); private List<IToken> tokenList; private final Queue<IToken> nextList = new LinkedBlockingQueue<IToken>(); @@ -722,13 +722,7 @@ public class Lexer implements ITokenListContainer private String getText(int acceptLength) { - StringBuffer s = new StringBuffer(acceptLength); - for(int i = 0; i < acceptLength; i++) - { - s.append(this.text.charAt(i)); - } - - return s.toString(); + return this.text.substring(0, acceptLength); } private static int[][][][] gotoTable; diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java index f76e51c..aadf743 100644 --- a/src/main/java/org/sablecc/sablecc/parser/Parser.java +++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java @@ -10688,7 +10688,7 @@ public class Parser implements IParser for(int i = 0; i < errorMessages.length; i++) { length = s.readInt(); - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); for(int j = 0; j < length; j++) { diff --git a/src/main/resources/org/sablecc/sablecc/lexer.txt b/src/main/resources/org/sablecc/sablecc/lexer.txt index 2922cf1..f9ccfb2 100644 --- a/src/main/resources/org/sablecc/sablecc/lexer.txt +++ b/src/main/resources/org/sablecc/sablecc/lexer.txt @@ -43,7 +43,7 @@ public class Lexer implements ITokenListContainer protected int pos; private boolean cr; private boolean eof; - private final StringBuffer text = new StringBuffer(); + private final StringBuilder text = new StringBuilder(); private List<IToken> tokenList; private final Queue<IToken> nextList = new LinkedBlockingQueue<IToken>(); @@ -350,13 +350,7 @@ Macro:LexerBody2 private String getText(int acceptLength) { - StringBuffer s = new StringBuffer(acceptLength); - for(int i = 0; i < acceptLength; i++) - { - s.append(this.text.charAt(i)); - } - - return s.toString(); + return this.text.substring(0, acceptLength); } private static int[][][][] gotoTable; diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt index 862ac91..d6d876b 100644 --- a/src/main/resources/org/sablecc/sablecc/parser.txt +++ b/src/main/resources/org/sablecc/sablecc/parser.txt @@ -550,7 +550,7 @@ Macro:ParserTail for(int i = 0; i < errorMessages.length; i++) { length = s.readInt(); - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); for(int j = 0; j < length; j++) { -- GitLab