From 3fc3c58a5cbea076d85e6c9083b66d5be97929e1 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Mon, 25 Apr 2022 16:13:47 +0200
Subject: [PATCH] Replace uses of StringBuffer in non-generated code

And also expand string concatenations in arguments of
StringBuilder.append, to avoid javac creating unnecessary intermediate
StringBuilders.
---
 .../java/org/sablecc/sablecc/CharSet.java     |  8 ++-
 src/main/java/org/sablecc/sablecc/DFA.java    | 14 ++--
 .../java/org/sablecc/sablecc/GenAlts.java     |  2 +-
 .../java/org/sablecc/sablecc/GenParser.java   | 71 +++++++++++++------
 .../java/org/sablecc/sablecc/GenTokens.java   |  2 +-
 .../java/org/sablecc/sablecc/Grammar.java     | 52 ++++++++------
 src/main/java/org/sablecc/sablecc/IntSet.java |  2 +-
 .../org/sablecc/sablecc/LR0Collection.java    |  9 ++-
 .../java/org/sablecc/sablecc/LR0Item.java     |  2 +-
 .../java/org/sablecc/sablecc/LR0ItemSet.java  |  2 +-
 .../org/sablecc/sablecc/LR1Collection.java    | 15 ++--
 .../java/org/sablecc/sablecc/LR1ItemSet.java  | 15 ++--
 .../org/sablecc/sablecc/MacroExpander.java    |  2 +-
 src/main/java/org/sablecc/sablecc/NFA.java    | 19 +++--
 .../java/org/sablecc/sablecc/Production.java  |  2 +-
 .../org/sablecc/sablecc/ResolveAltIds.java    |  2 +-
 .../org/sablecc/sablecc/ResolveAstIds.java    |  2 +-
 .../java/org/sablecc/sablecc/ResolveIds.java  |  6 +-
 .../sablecc/sablecc/ResolveTransformIds.java  |  2 +-
 .../java/org/sablecc/sablecc/SymbolSet.java   |  2 +-
 20 files changed, 146 insertions(+), 85 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/CharSet.java b/src/main/java/org/sablecc/sablecc/CharSet.java
index c1bec22..f6ae0cb 100644
--- a/src/main/java/org/sablecc/sablecc/CharSet.java
+++ b/src/main/java/org/sablecc/sablecc/CharSet.java
@@ -162,14 +162,16 @@ public class CharSet implements Cloneable
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
 
     for(Interval i : intervals)
     {
-      result.append("[" + i + "] ");
+      result.append("[");
+      result.append(i);
+      result.append("] ");
     }
 
-    return "" + result;
+    return result.toString();
   }
 
   public static class Interval implements Cloneable
diff --git a/src/main/java/org/sablecc/sablecc/DFA.java b/src/main/java/org/sablecc/sablecc/DFA.java
index 7b53279..5d5d1ee 100644
--- a/src/main/java/org/sablecc/sablecc/DFA.java
+++ b/src/main/java/org/sablecc/sablecc/DFA.java
@@ -312,11 +312,14 @@ public class DFA
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
 
     for(int i = 0; i < states.size(); i++)
     {
-      result.append(i + ": " + states.get(i) + System.getProperty("line.separator"));
+      result.append(i);
+      result.append(": ");
+      result.append(states.get(i));
+      result.append(System.getProperty("line.separator"));
     }
 
     return result.toString();
@@ -336,7 +339,7 @@ public class DFA
     @Override
     public String toString()
     {
-      StringBuffer result = new StringBuffer();
+      StringBuilder result = new StringBuilder();
 
       /*            for(int i = 0; i < nfaStates.size(); i++)
                   {
@@ -351,10 +354,11 @@ public class DFA
 
       for(DFA.Transition transition : transitions)
       {
-        result.append(transition + ",");
+        result.append(transition);
+        result.append(",");
       }
 
-      return result /*+ " " + nfaStates*/ + "";
+      return result.toString() /*+ " " + nfaStates*/;
     }
   }
 
diff --git a/src/main/java/org/sablecc/sablecc/GenAlts.java b/src/main/java/org/sablecc/sablecc/GenAlts.java
index 26e5f2c..5c670d7 100644
--- a/src/main/java/org/sablecc/sablecc/GenAlts.java
+++ b/src/main/java/org/sablecc/sablecc/GenAlts.java
@@ -358,7 +358,7 @@ public class GenAlts extends DepthFirstAdapter
 
   public static String nodeName(String s)
   {
-    StringBuffer result = new StringBuffer(s);
+    StringBuilder result = new StringBuilder(s);
 
     if(result.length() > 0)
     {
diff --git a/src/main/java/org/sablecc/sablecc/GenParser.java b/src/main/java/org/sablecc/sablecc/GenParser.java
index 44fbe33..06a6770 100644
--- a/src/main/java/org/sablecc/sablecc/GenParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenParser.java
@@ -445,7 +445,7 @@ public class GenParser extends DepthFirstAdapter
 
       macros.apply(file, "ParserActionHeader");
 
-      StringBuffer table = new StringBuffer();
+      StringBuilder table = new StringBuilder();
 
       DataOutputStream out = new DataOutputStream(
                                new BufferedOutputStream(
@@ -484,9 +484,11 @@ public class GenParser extends DepthFirstAdapter
         }
         table.append("            {");
 
-        table.append("{" + -1 + ", " +
-                     mostFrequentAction + ", " +
-                     mostFrequentDestination + "}, ");
+        table.append("{-1, ");
+        table.append(mostFrequentAction);
+        table.append(", ");
+        table.append(mostFrequentDestination);
+        table.append("}, ");
         innerArray.add(
           new int[] {-1,
                      mostFrequentAction.equals("ERROR") ? 3 : 1,
@@ -499,29 +501,40 @@ public class GenParser extends DepthFirstAdapter
             switch(Grammar.action_[i][j][0])
             {
             case 0:
-              table.append("{" + j + ", SHIFT, " + Grammar.action_[i][j][1] + "}, ");
+              table.append("{");
+              table.append(j);
+              table.append(", SHIFT, ");
+              table.append(Grammar.action_[i][j][1]);
+              table.append("}, ");
               innerArray.add(new int[] {j, 0, Grammar.action_[i][j][1]});
               break;
             case 1:
               if(Grammar.action_[i][j][1] != mostFrequentDestination)
               {
-                table.append("{" + j + ", REDUCE, " + Grammar.action_[i][j][1] + "}, ");
+                table.append("{");
+                table.append(j);
+                table.append(", REDUCE, ");
+                table.append(Grammar.action_[i][j][1]);
+                table.append("}, ");
                 innerArray.add(new int[] {j, 1, Grammar.action_[i][j][1]});
               }
               break;
             case 2:
-              table.append("{" + j + ", ACCEPT, -1}, ");
+              table.append("{");
+              table.append(j);
+              table.append(", ACCEPT, -1}, ");
               innerArray.add(new int[] {j, 2, -1});
               break;
             }
           }
         }
 
-        table.append("}," + System.getProperty("line.separator"));
+        table.append("},");
+        table.append(System.getProperty("line.separator"));
         outerArray.add(innerArray);
       }
 
-      file.write("" + table);
+      file.write(table.toString());
 
       out.writeInt(outerArray.size());
       for(List<int[]> innerArray : outerArray)
@@ -540,7 +553,7 @@ public class GenParser extends DepthFirstAdapter
 
       macros.apply(file, "ParserGotoHeader");
 
-      table = new StringBuffer();
+      table = new StringBuilder();
       outerArray = new ArrayList<>();
 
       for(int j = 0; j < nonterminals.length - 1; j++)
@@ -569,7 +582,9 @@ public class GenParser extends DepthFirstAdapter
 
         table.append("            {");
 
-        table.append("{" + (-1) + ", " + mostFrequent + "}, ");
+        table.append("{-1, ");
+        table.append(mostFrequent);
+        table.append("}, ");
         innerArray.add(new int[] {-1, mostFrequent});
 
         for(int i = 0; i < Grammar.goto_.length; i++)
@@ -577,17 +592,22 @@ public class GenParser extends DepthFirstAdapter
           if((Grammar.goto_[i][j] != -1) &&
               (Grammar.goto_[i][j] != mostFrequent))
           {
-            table.append("{" + i + ", " + Grammar.goto_[i][j] + "}, ");
+            table.append("{");
+            table.append(i);
+            table.append(", ");
+            table.append(Grammar.goto_[i][j]);
+            table.append("}, ");
             innerArray.add(new int[] {i, Grammar.goto_[i][j]});
           }
         }
 
-        table.append("}," + System.getProperty("line.separator"));
+        table.append("},");
+        table.append(System.getProperty("line.separator"));
 
         outerArray.add(innerArray);
       }
 
-      file.write("" + table);
+      file.write(table.toString());
 
       out.writeInt(outerArray.size());
       for(List<int[]> innerArray : outerArray)
@@ -606,8 +626,8 @@ public class GenParser extends DepthFirstAdapter
 
       macros.apply(file, "ParserErrorsHeader");
 
-      table = new StringBuffer();
-      StringBuffer index = new StringBuffer();
+      table = new StringBuilder();
+      StringBuilder index = new StringBuilder();
       int nextIndex = 0;
 
       Map<String, Integer> errorIndex = new TreeMap<>();
@@ -618,7 +638,7 @@ public class GenParser extends DepthFirstAdapter
       index.append("            ");
       for(int i = 0; i < Grammar.action_.length; i++)
       {
-        StringBuffer s = new StringBuffer();
+        StringBuilder s = new StringBuilder();
         s.append("expecting: ");
 
         boolean comma = false;
@@ -641,20 +661,25 @@ public class GenParser extends DepthFirstAdapter
 
         if(errorIndex.containsKey(s.toString()))
         {
-          index.append(errorIndex.get(s.toString()) + ", ");
+          index.append(errorIndex.get(s.toString()));
+          index.append(", ");
           indexArray.add(errorIndex.get(s.toString()));
         }
         else
         {
-          table.append("            \"" + s + "\"," + System.getProperty("line.separator"));
+          table.append("            \"");
+          table.append(s);
+          table.append("\",");
+          table.append(System.getProperty("line.separator"));
           outerArray2.add(s.toString());
           errorIndex.put(s.toString(), nextIndex);
           indexArray.add(nextIndex);
-          index.append(nextIndex++ + ", ");
+          index.append(nextIndex++);
+          index.append(", ");
         }
       }
 
-      file.write("" + table);
+      file.write(table.toString());
 
       out.writeInt(outerArray2.size());
       for(String s : outerArray2)
@@ -678,7 +703,7 @@ public class GenParser extends DepthFirstAdapter
       macros.apply(file, "ParserErrorsTail");
 
       macros.apply(file, "ParserErrorIndexHeader");
-      file.write("" + index);
+      file.write(index.toString());
       macros.apply(file, "ParserErrorIndexTail");
 
       macros.apply(file, "ParserTail");
@@ -748,7 +773,7 @@ public class GenParser extends DepthFirstAdapter
       return 0;
     }
 
-    StringBuffer s = new StringBuffer();
+    StringBuilder s = new StringBuilder();
     int i = 1;
 
     while((i < name.length()) &&
diff --git a/src/main/java/org/sablecc/sablecc/GenTokens.java b/src/main/java/org/sablecc/sablecc/GenTokens.java
index 513aa6a..4e863b7 100644
--- a/src/main/java/org/sablecc/sablecc/GenTokens.java
+++ b/src/main/java/org/sablecc/sablecc/GenTokens.java
@@ -120,7 +120,7 @@ public class GenTokens extends DepthFirstAdapter
 
   private String processText(String s)
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
 
     for(int i = 0; i < s.length(); i++)
     {
diff --git a/src/main/java/org/sablecc/sablecc/Grammar.java b/src/main/java/org/sablecc/sablecc/Grammar.java
index ea93cde..8ee609f 100644
--- a/src/main/java/org/sablecc/sablecc/Grammar.java
+++ b/src/main/java/org/sablecc/sablecc/Grammar.java
@@ -99,7 +99,7 @@ public final class Grammar
     goto_ = new int[sets.length][nonterminals.length - 1];
 
     Set<String> listOfConflictualProds = new HashSet<>();
-    StringBuffer conflictMessage = new StringBuffer();
+    StringBuilder conflictMessage = new StringBuilder();
 
     for(int i = 0; i < sets.length; i++)
     {
@@ -159,28 +159,34 @@ public final class Grammar
                   switch(action[0])
                   {
                   case 0:
-                    conflictMessage.append(
-                      "\n\nshift/reduce conflict in state [stack:" +
-                      collection.collection.names.get(i) + "*] on " +
-                      terminals[j] + " in " + state.toString(terminals[j]));
+                    conflictMessage.append("\n\nshift/reduce conflict in state [stack:");
+                    conflictMessage.append(collection.collection.names.get(i));
+                    conflictMessage.append("*] on ");
+                    conflictMessage.append(terminals[j]);
+                    conflictMessage.append(" in ");
+                    conflictMessage.append(state.toString(terminals[j]));
 
                     /* nothing else to do */
                     break;
 
                   case 1:
-                    conflictMessage.append(
-                      "\n\nreduce/reduce conflict in state [stack:" +
-                      collection.collection.names.get(i) + "*] on " +
-                      terminals[j] + " in " + state.toString(terminals[j]));
+                    conflictMessage.append("\n\nreduce/reduce conflict in state [stack:");
+                    conflictMessage.append(collection.collection.names.get(i));
+                    conflictMessage.append("*] on ");
+                    conflictMessage.append(terminals[j]);
+                    conflictMessage.append(" in ");
+                    conflictMessage.append(state.toString(terminals[j]));
 
                     listOfConflictualProds.add(Symbol.symbol(Production.production(action[1]).leftside, false).toString());
                     break;
 
                   case 2:
-                    conflictMessage.append(
-                      "\n\nreduce/accept conflict in state [stack:" +
-                      collection.collection.names.get(i) + "*] on " +
-                      terminals[j] + " in " + state.toString(terminals[j]));
+                    conflictMessage.append("\n\nreduce/accept conflict in state [stack:");
+                    conflictMessage.append(collection.collection.names.get(i));
+                    conflictMessage.append("*] on ");
+                    conflictMessage.append(terminals[j]);
+                    conflictMessage.append(" in ");
+                    conflictMessage.append(state.toString(terminals[j]));
 
                     listOfConflictualProds.add(Symbol.symbol(Production.production(action[1]).leftside, false).toString());
                     break;
@@ -208,19 +214,23 @@ public final class Grammar
                   switch(action[0])
                   {
                   case 0:
-                    conflictMessage.append(
-                      "shift/accept conflict in state [stack:" +
-                      collection.collection.names.get(i) + "*] on " +
-                      terminals[j] + " in " + state);
+                    conflictMessage.append("shift/accept conflict in state [stack:");
+                    conflictMessage.append(collection.collection.names.get(i));
+                    conflictMessage.append("*] on ");
+                    conflictMessage.append(terminals[j]);
+                    conflictMessage.append(" in ");
+                    conflictMessage.append(state);
 
                     /* nothing else to do */
                     break;
 
                   case 1:
-                    conflictMessage.append(
-                      "reduce/accept conflict in state [stack:" +
-                      collection.collection.names.get(i) + "*] on " +
-                      terminals[j] + " in " + state);
+                    conflictMessage.append("reduce/accept conflict in state [stack:");
+                    conflictMessage.append(collection.collection.names.get(i));
+                    conflictMessage.append("*] on ");
+                    conflictMessage.append(terminals[j]);
+                    conflictMessage.append(" in ");
+                    conflictMessage.append(state);
 
                     listOfConflictualProds.add(Symbol.symbol(Production.production(action[1]).leftside, false).toString());
 
diff --git a/src/main/java/org/sablecc/sablecc/IntSet.java b/src/main/java/org/sablecc/sablecc/IntSet.java
index c7daf53..7fe71d8 100644
--- a/src/main/java/org/sablecc/sablecc/IntSet.java
+++ b/src/main/java/org/sablecc/sablecc/IntSet.java
@@ -301,7 +301,7 @@ public class IntSet
   @Override
   public String toString()
   {
-    StringBuffer s = new StringBuffer();
+    StringBuilder s = new StringBuilder();
 
     s.append("{");
 
diff --git a/src/main/java/org/sablecc/sablecc/LR0Collection.java b/src/main/java/org/sablecc/sablecc/LR0Collection.java
index c241223..86afd73 100644
--- a/src/main/java/org/sablecc/sablecc/LR0Collection.java
+++ b/src/main/java/org/sablecc/sablecc/LR0Collection.java
@@ -108,15 +108,18 @@ final class LR0Collection
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
 
-    result.append("{[LR0ItemCollection]" + System.getProperty("line.separator"));
+    result.append("{[LR0ItemCollection]");
+    result.append(System.getProperty("line.separator"));
     LR0ItemSet[] sets = sets();
     Symbol[] symbols = Symbol.symbols();
 
     for(int i = 0; i < sets.length; i++)
     {
-      result.append(i + ":" + Grammar.CLOSURE(sets[i]));
+      result.append(i);
+      result.append(":");
+      result.append(Grammar.CLOSURE(sets[i]));
       result.append(System.getProperty("line.separator"));
 
       for(int j = 0; j < symbols.length; j++)
diff --git a/src/main/java/org/sablecc/sablecc/LR0Item.java b/src/main/java/org/sablecc/sablecc/LR0Item.java
index 104702e..b9bf3bd 100644
--- a/src/main/java/org/sablecc/sablecc/LR0Item.java
+++ b/src/main/java/org/sablecc/sablecc/LR0Item.java
@@ -63,7 +63,7 @@ final class LR0Item implements Cloneable, Comparable<LR0Item>
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
     String prodStr = (Production.production(production)).toString();
     int pos = 0;
 
diff --git a/src/main/java/org/sablecc/sablecc/LR0ItemSet.java b/src/main/java/org/sablecc/sablecc/LR0ItemSet.java
index beb9bdc..a8765d9 100644
--- a/src/main/java/org/sablecc/sablecc/LR0ItemSet.java
+++ b/src/main/java/org/sablecc/sablecc/LR0ItemSet.java
@@ -63,7 +63,7 @@ final class LR0ItemSet implements Cloneable, Comparable<LR0ItemSet>
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
     result.append("{");
 
     Production[] productions = Production.productions();
diff --git a/src/main/java/org/sablecc/sablecc/LR1Collection.java b/src/main/java/org/sablecc/sablecc/LR1Collection.java
index a40eb3f..ddd6200 100644
--- a/src/main/java/org/sablecc/sablecc/LR1Collection.java
+++ b/src/main/java/org/sablecc/sablecc/LR1Collection.java
@@ -153,23 +153,28 @@ final class LR1Collection
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
 
     result.append(collection);
     result.append(System.getProperty("line.separator"));
 
-    result.append("Lookaheads" + System.getProperty("line.separator"));
+    result.append("Lookaheads");
+    result.append(System.getProperty("line.separator"));
     LR0ItemSet[] sets = collection.sets();
 
     for(int i = 0; i < sets.length; i++)
     {
-      result.append(i + ":" + System.getProperty("line.separator"));
+      result.append(i);
+      result.append(":");
+      result.append(System.getProperty("line.separator"));
       LR0Item[] items = sets[i].items();
 
       for(int j = 0; j < items.length; j++)
       {
-        result.append(items[j] + ":" + lookaheads[i].get(items[j]) +
-                      System.getProperty("line.separator"));
+        result.append(items[j]);
+        result.append(":");
+        result.append(lookaheads[i].get(items[j]));
+        result.append(System.getProperty("line.separator"));
       }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/LR1ItemSet.java b/src/main/java/org/sablecc/sablecc/LR1ItemSet.java
index c45a751..1155356 100644
--- a/src/main/java/org/sablecc/sablecc/LR1ItemSet.java
+++ b/src/main/java/org/sablecc/sablecc/LR1ItemSet.java
@@ -66,8 +66,10 @@ final class LR1ItemSet implements Cloneable, Comparable<LR1ItemSet>
   {
     String nl = System.getProperty("line.separator");
 
-    StringBuffer result = new StringBuffer();
-    result.append("{" + nl + "\t");
+    StringBuilder result = new StringBuilder();
+    result.append("{");
+    result.append(nl);
+    result.append("\t");
 
     Production[] productions = Production.productions();
     Symbol[] terminals = Symbol.terminals();
@@ -88,7 +90,9 @@ final class LR1ItemSet implements Cloneable, Comparable<LR1ItemSet>
           {
             if(comma)
             {
-              result.append("," + nl + "\t");
+              result.append(",");
+              result.append(nl);
+              result.append("\t");
             }
             else
             {
@@ -101,7 +105,8 @@ final class LR1ItemSet implements Cloneable, Comparable<LR1ItemSet>
       }
     }
 
-    result.append(nl + "}");
+    result.append(nl);
+    result.append("}");
     return result.toString();
   }
 
@@ -125,7 +130,7 @@ final class LR1ItemSet implements Cloneable, Comparable<LR1ItemSet>
       }
     }
 
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
     result.append("{");
 
     boolean colon = false;
diff --git a/src/main/java/org/sablecc/sablecc/MacroExpander.java b/src/main/java/org/sablecc/sablecc/MacroExpander.java
index 72a05a3..5ff476f 100644
--- a/src/main/java/org/sablecc/sablecc/MacroExpander.java
+++ b/src/main/java/org/sablecc/sablecc/MacroExpander.java
@@ -83,7 +83,7 @@ public class MacroExpander
       {
         if((c = line.charAt(i)) == '$')
         {
-          StringBuffer index = new StringBuffer();
+          StringBuilder index = new StringBuilder();
 
           while((c = line.charAt(++i)) != '$')
           {
diff --git a/src/main/java/org/sablecc/sablecc/NFA.java b/src/main/java/org/sablecc/sablecc/NFA.java
index ba1475b..7ae0231 100644
--- a/src/main/java/org/sablecc/sablecc/NFA.java
+++ b/src/main/java/org/sablecc/sablecc/NFA.java
@@ -278,10 +278,13 @@ public class NFA implements Cloneable
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
     for(int i = 0; i < states.length; i++)
     {
-      result.append(i + ":" + states[i] + System.getProperty("line.separator"));
+      result.append(i);
+      result.append(":");
+      result.append(states[i]);
+      result.append(System.getProperty("line.separator"));
     }
     return result.toString();
   }
@@ -316,18 +319,22 @@ public class NFA implements Cloneable
     @Override
     public String toString()
     {
-      StringBuffer result = new StringBuffer();
+      StringBuilder result = new StringBuilder();
       if(accept != null)
       {
-        result.append("(" + accept + ") ");
+        result.append("(");
+        result.append(accept);
+        result.append(") ");
       }
       if(transitions[0] != null)
       {
-        result.append(" " + transitions[0]);
+        result.append(" ");
+        result.append(transitions[0]);
       }
       if(transitions[1] != null)
       {
-        result.append(" " + transitions[1]);
+        result.append(" ");
+        result.append(transitions[1]);
       }
       return result.toString();
     }
diff --git a/src/main/java/org/sablecc/sablecc/Production.java b/src/main/java/org/sablecc/sablecc/Production.java
index 50d9017..9fd864c 100644
--- a/src/main/java/org/sablecc/sablecc/Production.java
+++ b/src/main/java/org/sablecc/sablecc/Production.java
@@ -124,7 +124,7 @@ final class Production
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
 
     result.append(Symbol.symbol(leftside, false));
 
diff --git a/src/main/java/org/sablecc/sablecc/ResolveAltIds.java b/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
index a8930ad..7f9df74 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
@@ -135,7 +135,7 @@ public class ResolveAltIds extends DepthFirstAdapter
   @Override
   public String toString()
   {
-    StringBuffer s = new StringBuffer();
+    StringBuilder s = new StringBuilder();
     String nl = System.getProperty("line.separator");
 
     s.append("Alternative elements : ");
diff --git a/src/main/java/org/sablecc/sablecc/ResolveAstIds.java b/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
index 98c4863..d3116a2 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
@@ -321,7 +321,7 @@ public class ResolveAstIds extends DepthFirstAdapter
   @Override
   public String toString()
   {
-    StringBuffer s = new StringBuffer();
+    StringBuilder s = new StringBuilder();
     String nl = System.getProperty("line.separator");
 
     s.append("Productions:");
diff --git a/src/main/java/org/sablecc/sablecc/ResolveIds.java b/src/main/java/org/sablecc/sablecc/ResolveIds.java
index 13480bf..4e7ea9c 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveIds.java
@@ -503,7 +503,7 @@ public class ResolveIds extends DepthFirstAdapter
 
   public static String name(String s)
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
     boolean upcase = true;
     int length = s.length();
     char c;
@@ -539,7 +539,7 @@ public class ResolveIds extends DepthFirstAdapter
 
   public static String errorName(String s)
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
     int length = s.length();
     char c;
 
@@ -615,7 +615,7 @@ public class ResolveIds extends DepthFirstAdapter
   @Override
   public String toString()
   {
-    StringBuffer s = new StringBuffer();
+    StringBuilder s = new StringBuilder();
     String nl = System.getProperty("line.separator");
 
     s.append("Helpers:");
diff --git a/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java b/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
index 75f90f7..cd2f224 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
@@ -1035,7 +1035,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
   @Override
   public String toString()
   {
-    StringBuffer s = new StringBuffer();
+    StringBuilder s = new StringBuilder();
     String nl = System.getProperty("line.separator");
 
     s.append("ast_elems");
diff --git a/src/main/java/org/sablecc/sablecc/SymbolSet.java b/src/main/java/org/sablecc/sablecc/SymbolSet.java
index e1371eb..cf08444 100644
--- a/src/main/java/org/sablecc/sablecc/SymbolSet.java
+++ b/src/main/java/org/sablecc/sablecc/SymbolSet.java
@@ -163,7 +163,7 @@ final class SymbolSet implements Cloneable
   @Override
   public String toString()
   {
-    StringBuffer result = new StringBuffer();
+    StringBuilder result = new StringBuilder();
     result.append("{");
 
     Symbol[] symbols = getSymbols();
-- 
GitLab