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