From 635744bad1243e39d6e0ca705c3bb3002b2a46bc Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Thu, 7 Apr 2022 15:29:14 +0200
Subject: [PATCH] Use generics in many simple cases

---
 .../sablecc/sablecc/AddAstProductions.java    |  7 +-
 ...ntualEmptyTransformationToProductions.java | 10 +--
 .../AddProdTransformAndAltTransform.java      | 17 +++--
 .../sablecc/AlternativeElementTypes.java      | 12 ++--
 .../sablecc/ComputeCGNomenclature.java        |  8 +--
 .../org/sablecc/sablecc/In_Production.java    | 10 +--
 .../java/org/sablecc/sablecc/Inlining.java    | 14 ++--
 .../InternalTransformationsToGrammar.java     | 18 ++---
 .../org/sablecc/sablecc/LR0Collection.java    | 20 +++---
 .../org/sablecc/sablecc/PrettyPrinter.java    | 67 +++++++++----------
 .../java/org/sablecc/sablecc/Production.java  | 15 ++---
 .../RecursiveProductionsDetections.java       | 12 ++--
 .../org/sablecc/sablecc/ResolveAltIds.java    | 14 ++--
 .../org/sablecc/sablecc/ResolveAstIds.java    |  4 +-
 .../java/org/sablecc/sablecc/ResolveIds.java  | 54 +++++++--------
 .../sablecc/ResolveProdTransformIds.java      |  7 +-
 .../sablecc/sablecc/ResolveTransformIds.java  | 35 +++++-----
 .../java/org/sablecc/sablecc/SableCC.java     |  4 +-
 .../java/org/sablecc/sablecc/Transitions.java |  6 +-
 19 files changed, 159 insertions(+), 175 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/AddAstProductions.java b/src/main/java/org/sablecc/sablecc/AddAstProductions.java
index 7ad1e10..3215085 100644
--- a/src/main/java/org/sablecc/sablecc/AddAstProductions.java
+++ b/src/main/java/org/sablecc/sablecc/AddAstProductions.java
@@ -47,10 +47,9 @@ public class AddAstProductions extends DepthFirstAdapter
       error(node.getArrow());
     }
 
-    Object []list_alt = (Object[]) node.getAlts().toArray();
-    for(int i=0; i<list_alt.length; i++)
-    {
-      ((PAlt)list_alt[i]).apply(this);
+    PAlt[] list_alt = node.getAlts().toArray(new PAlt[0]);
+    for (PAlt alt : list_alt) {
+      alt.apply(this);
     }
 
     AAstProd astProd = new AAstProd(new TId(node.getId().getText()), listOfAstAlts);
diff --git a/src/main/java/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java b/src/main/java/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java
index 3612052..74641a9 100644
--- a/src/main/java/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java
+++ b/src/main/java/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java
@@ -50,13 +50,13 @@ public class AddEventualEmptyTransformationToProductions extends DepthFirstAdapt
     if(node.getArrow() == null && ast_ids.ast_prods.get(currentProd) == null )
     {
       node.setArrow(new TArrow(node.getId().getLine(), node.getId().getPos()+node.getId().getText().length() ));
-      node.setProdTransform(new LinkedList());
+      node.setProdTransform(new LinkedList<PElem>());
 
-      AAlt []alts = (AAlt[]) node.getAlts().toArray(new AAlt[0]);
+      PAlt[] alts = node.getAlts().toArray(new PAlt[0]);
 
-      for(int i=0; i<alts.length; i++)
+      for(PAlt alt : alts)
       {
-        alts[i].apply( new DepthFirstAdapter()
+        alt.apply( new DepthFirstAdapter()
                        {
                          @Override
                          public void inAAlt(AAlt node)
@@ -65,7 +65,7 @@ public class AddEventualEmptyTransformationToProductions extends DepthFirstAdapt
                            {
                              error(((AAltTransform)node.getAltTransform()).getLBrace());
                            }
-                           node.setAltTransform( new AAltTransform(new TLBrace(), new LinkedList(), new TRBrace()) );
+                           node.setAltTransform( new AAltTransform(new TLBrace(), new LinkedList<PTerm>(), new TRBrace()) );
                          }
                        }
                      );
diff --git a/src/main/java/org/sablecc/sablecc/AddProdTransformAndAltTransform.java b/src/main/java/org/sablecc/sablecc/AddProdTransformAndAltTransform.java
index 9ec3746..0b533ce 100644
--- a/src/main/java/org/sablecc/sablecc/AddProdTransformAndAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/AddProdTransformAndAltTransform.java
@@ -38,15 +38,14 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
     if(production.getArrow() == null)
     {
       AElem elem = new AElem(null, new AProductionSpecifier(), new TId(currentProdId), null);
-      LinkedList listOfProdTransformElem = new LinkedList();
+      List<PElem> listOfProdTransformElem = new LinkedList<>();
       listOfProdTransformElem.add(elem);
       production.setProdTransform(listOfProdTransformElem);
       production.setArrow(new TArrow());
     }
   }
 
-  private int i;
-  private LinkedList list;
+  private List<PTerm> list;
 
   @Override
   public void inAAlt(AAlt alt)
@@ -54,7 +53,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
     if(alt.getAltTransform() == null)
     {
       currentAlt = currentProdId;
-      list = new LinkedList();
+      list = new LinkedList<>();
       AProdName aProdName = new AProdName(new TId(currentProdId), null);
 
       if(alt.getAltName() != null)
@@ -64,11 +63,11 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
 
       if( alt.getElems().size() > 0 )
       {
-        Object temp[] = alt.getElems().toArray();
+        PElem[] temp = alt.getElems().toArray(new PElem[0]);
 
-        for(i = 0; i < temp.length; i++)
+        for(PElem e : temp)
         {
-          ((PElem) temp[i]).apply(new DepthFirstAdapter()
+          e.apply(new DepthFirstAdapter()
                                   {
                                     @Override
                                     public void caseAElem(AElem elem)
@@ -90,7 +89,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
                                       if( (elem.getUnOp() != null) &&
                                           ( (elem.getUnOp() instanceof AStarUnOp) || (elem.getUnOp() instanceof APlusUnOp) ) )
                                       {
-                                        LinkedList listP = new LinkedList();
+                                        List<PListTerm> listP = new LinkedList<>();
                                         if( !elemNameExplicitelySpecified && (elem.getSpecifier()!= null) )
                                         {
                                           if(elem.getSpecifier() instanceof ATokenSpecifier)
@@ -138,7 +137,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
       }
 
       ANewTerm newTerm = new ANewTerm(aProdName, new TLPar(), list);
-      LinkedList lst = new LinkedList();
+      List<PTerm> lst = new LinkedList<>();
       lst.add(newTerm);
 
       alt.setAltTransform(new AAltTransform(new TLBrace(), lst, new TRBrace()));
diff --git a/src/main/java/org/sablecc/sablecc/AlternativeElementTypes.java b/src/main/java/org/sablecc/sablecc/AlternativeElementTypes.java
index d275aba..209be94 100644
--- a/src/main/java/org/sablecc/sablecc/AlternativeElementTypes.java
+++ b/src/main/java/org/sablecc/sablecc/AlternativeElementTypes.java
@@ -36,10 +36,10 @@ public class AlternativeElementTypes extends DepthFirstAdapter
   @Override
   public void caseAProd(final AProd production)
   {
-    Object []temp = production.getAlts().toArray();
-    for(int i = 0; i<temp.length; i++)
+    PAlt[] temp = production.getAlts().toArray(new PAlt[0]);
+    for(PAlt alt : temp)
     {
-      ((PAlt)temp[i]).apply(this);
+      alt.apply(this);
     }
   }
 
@@ -47,10 +47,10 @@ public class AlternativeElementTypes extends DepthFirstAdapter
   public void caseAAlt(AAlt node)
   {
     currentAlt = ids.names.get(node);
-    Object []temp = node.getElems().toArray();
-    for(int i = 0; i<temp.length; i++)
+    PElem[] temp = node.getElems().toArray(new PElem[0]);
+    for(PElem elem : temp)
     {
-      ((PElem)temp[i]).apply(this);
+      elem.apply(this);
     }
   }
 
diff --git a/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java b/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
index d135374..06218a9 100644
--- a/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
+++ b/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
@@ -62,10 +62,10 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
   public void caseAProd(final AProd production)
   {
     currentProd = "P" + ResolveIds.name(production.getId().getText());
-    Object []temp = production.getAlts().toArray();
-    for(int i = 0; i<temp.length; i++)
+    PAlt[] temp = production.getAlts().toArray(new PAlt[0]);
+    for(PAlt alt : temp)
     {
-      ((PAlt)temp[i]).apply(this);
+      alt.apply(this);
     }
   }
 
@@ -128,7 +128,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
   {
     if( node.getListTerms().size() > 0 )
     {
-      Object[] temp = node.getListTerms().toArray();
+      PListTerm[] temp = node.getListTerms().toArray(new PListTerm[0]);
 
       String firstTermType = altTransformElemTypes.get(temp[0]);
 
diff --git a/src/main/java/org/sablecc/sablecc/In_Production.java b/src/main/java/org/sablecc/sablecc/In_Production.java
index bbb4a6e..844dc51 100644
--- a/src/main/java/org/sablecc/sablecc/In_Production.java
+++ b/src/main/java/org/sablecc/sablecc/In_Production.java
@@ -22,7 +22,7 @@ public class In_Production
   {
     setName(prod.getId().getText());
 
-    AElem[] prodTransforms = (AElem [])prod.getProdTransform().toArray(new AElem[0]);
+    AElem[] prodTransforms = prod.getProdTransform().toArray(new AElem[0]);
     prodTransformElems = new String[prodTransforms.length];
 
     for(int i=0; i<prodTransforms.length; i++)
@@ -43,7 +43,7 @@ public class In_Production
       prodTransformElems[0] = new String("  ");
     }
 
-    AAlt[] alts = (AAlt[])prod.getAlts().toArray(new AAlt[0]);
+    AAlt[] alts = prod.getAlts().toArray(new AAlt[0]);
     alternatives = new In_Alternative[alts.length];
 
     for(int i=0; i<alts.length; i++)
@@ -91,7 +91,7 @@ public class In_Production
       setName(alt.getAltName() != null ? alt.getAltName().getText() : "");
 
       elements = new AElem[alt.getElems().size()];
-      AElem[] listOfElems = (AElem[]) alt.getElems().toArray(new AElem[0]);
+      AElem[] listOfElems = alt.getElems().toArray(new AElem[0]);
 
       final String newElemName = (name.equals("") ? prodName : prodName + "#" + name );
 
@@ -115,10 +115,10 @@ public class In_Production
 
       prodTransform_altTransform = new HashMap<>(prodTransformElems.length);
 
-      LinkedList list = ((AAltTransform)alt.getAltTransform()).getTerms();
+      List<PTerm> list = ((AAltTransform)alt.getAltTransform()).getTerms();
       for(int i=0; i<list.size(); i++)
       {
-        PTerm tmpTerm = (PTerm)list.get(i);
+        PTerm tmpTerm = list.get(i);
         tmpTerm.apply(new DepthFirstAdapter()
                       {
                         @Override
diff --git a/src/main/java/org/sablecc/sablecc/Inlining.java b/src/main/java/org/sablecc/sablecc/Inlining.java
index 185316b..35a4fa9 100644
--- a/src/main/java/org/sablecc/sablecc/Inlining.java
+++ b/src/main/java/org/sablecc/sablecc/Inlining.java
@@ -42,16 +42,16 @@ public class Inlining
   */
   public boolean inlineProduction()
   {
-    AAlt[] alts = (AAlt[])current_production.getAlts().toArray(new AAlt[0]);
+    PAlt[] alts = current_production.getAlts().toArray(new PAlt[0]);
     final BooleanEx prodMustBeInlined = new BooleanEx(false);
 
     /*
       We're trying to detect if the current production must be inlined.
       ie one of its alternatives contains production to inline
     */
-    for(int i=0; i<alts.length; i++)
+    for(PAlt alt : alts)
     {
-      ((PAlt)alts[i]).apply( new DepthFirstAdapter()
+      alt.apply( new DepthFirstAdapter()
                              {
                                @Override
                                public void caseAElem(AElem node)
@@ -83,7 +83,7 @@ public class Inlining
       List<PAlt> listOfAlts = new LinkedList<>();
       for(int i=0; i<alts.length; i++)
       {
-        listOfAlts.addAll( inlineAlternative(alts[i]) );
+        listOfAlts.addAll( inlineAlternative((AAlt)alts[i]) );
       }
       /*
       if( !containsDoubloons(listOfAlts) )
@@ -117,8 +117,8 @@ public class Inlining
 
     for(int i=0; i<alts.length; i++)
     {
-      LinkedList elems = alts[i].getElems();
-      AElem[] arrayOfElems = (AElem []) elems.toArray(new AElem[0]);
+      List<PElem> elems = alts[i].getElems();
+      AElem[] arrayOfElems = elems.toArray(new AElem[0]);
       List<String> listOfElems = new LinkedList<>();
       for(int j=0; j<arrayOfElems.length; j++)
       {
@@ -186,7 +186,7 @@ public class Inlining
    */
   public List<AAlt> inlineAlternative(AAlt alt)
   {
-    AElem[] elems = (AElem[])alt.getElems().toArray(new AElem[0]);
+    AElem[] elems = alt.getElems().toArray(new AElem[0]);
     String elem_name ;
 
     // This list contains the names of elements to inline within an alternative
diff --git a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
index 856307c..cf2fb0f 100644
--- a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
@@ -48,7 +48,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
   private Map<String, String> isElementIsAlist = new TreeMap<>();
 
-  private LinkedList listProd;
+  private List<PProd> listProd;
 
   public InternalTransformationsToGrammar(ResolveIds ids, ResolveAltIds altIds,
                                           ResolveTransformIds transformIds,
@@ -72,7 +72,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
     listProd = node.getProds();
   }
 
-  private LinkedList listOfAlts;
+  private List<PAlt> listOfAlts;
 
   @Override
   public void inAAst(AAst node)
@@ -90,18 +90,18 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
   public void caseAProd(AProd node)
   {
     currentProd = ids.names.get(node);
-    listOfAlts = new LinkedList();
+    listOfAlts = new LinkedList<>();
 
-    Object[] list_alt = (Object[])node.getAlts().toArray();
-    for(int i=0; i<list_alt.length; i++)
+    PAlt[] list_alt = node.getAlts().toArray(new PAlt[0]);
+    for(PAlt alt : list_alt)
     {
-      ((PAlt) list_alt[i]).apply(this);
+      alt.apply(this);
     }
 
     node.setAlts(listOfAlts);
   }
 
-  private LinkedList listElems;
+  private List<PElem> listElems;
   private AAlt aParsedAlt;
   private LinkedList listElemsAltTransform;
   private String currentNewAltName;
@@ -152,7 +152,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
     if(count == 1)
     {
-      listElems = new LinkedList();
+      listElems = new LinkedList<>();
       listElemsAltTransform = new LinkedList();
 
       countElementNecessary = false;
@@ -213,7 +213,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
       for(count = 0; count < max; count++)
       {
-        listElems = new LinkedList();
+        listElems = new LinkedList<>();
         listElemsAltTransform = new LinkedList();
 
         elem = 0;
diff --git a/src/main/java/org/sablecc/sablecc/LR0Collection.java b/src/main/java/org/sablecc/sablecc/LR0Collection.java
index f2d6634..69ce858 100644
--- a/src/main/java/org/sablecc/sablecc/LR0Collection.java
+++ b/src/main/java/org/sablecc/sablecc/LR0Collection.java
@@ -12,10 +12,10 @@ import java.util.Vector;
 
 final class LR0Collection
 {
-  private final Vector sets = new Vector(0);
-  private final TreeMap setIndices = new TreeMap();
-  private final Vector GOTO = new Vector(0);
-  final Vector names = new Vector(0);
+  private final Vector<LR0ItemSet> sets = new Vector<>(0);
+  private final TreeMap<LR0ItemSet, Integer> setIndices = new TreeMap<>();
+  private final Vector<TreeMap<Symbol, Integer>> GOTO = new Vector<>(0);
+  final Vector<String> names = new Vector<>(0);
 
   LR0Collection(LR0ItemSet set
                  )
@@ -54,7 +54,7 @@ final class LR0Collection
                        , result);
         sets.addElement(set
                        );
-        GOTO.addElement(new TreeMap());
+        GOTO.addElement(new TreeMap<Symbol, Integer>());
         if(from == -1)
         {
           names.addElement(" ");
@@ -79,7 +79,7 @@ final class LR0Collection
   {
     if(!to.equals(empty))
     {
-      ((TreeMap) GOTO.elementAt(from)).put(symbol, add(to, from, symbol));
+      GOTO.elementAt(from).put(symbol, add(to, from, symbol));
     }
   }
 
@@ -87,14 +87,13 @@ final class LR0Collection
     (LR0ItemSet set
       )
     {
-      return (Integer) setIndices.get(set
-                                     );
+      return setIndices.get(set);
     }
 
   private LR0ItemSet set
     (int index)
   {
-    return (LR0ItemSet) sets.elementAt(index);
+    return sets.elementAt(index);
   }
 
   LR0ItemSet[] sets()
@@ -108,8 +107,7 @@ final class LR0Collection
   Integer GOTO(int set
                  , Symbol symbol)
   {
-    return (Integer) ((TreeMap) GOTO.elementAt(set
-                                              )).get(symbol);
+    return GOTO.elementAt(set).get(symbol);
   }
 
   @Override
diff --git a/src/main/java/org/sablecc/sablecc/PrettyPrinter.java b/src/main/java/org/sablecc/sablecc/PrettyPrinter.java
index 4c24e5e..362b160 100644
--- a/src/main/java/org/sablecc/sablecc/PrettyPrinter.java
+++ b/src/main/java/org/sablecc/sablecc/PrettyPrinter.java
@@ -22,11 +22,10 @@ public class PrettyPrinter extends DepthFirstAdapter
   public void caseAProductions(AProductions node)
   {
     System.err.println("Productions \n");
-    AProd [] prods =
-      (AProd [])node.getProds().toArray(new AProd[0]);
-    for(int i = 0; i < prods.length; i++)
+    PProd[] prods = node.getProds().toArray(new PProd[0]);
+    for(PProd prod : prods)
     {
-      prods[i].apply(this);
+      prod.apply(this);
     }
   }
 
@@ -42,29 +41,28 @@ public class PrettyPrinter extends DepthFirstAdapter
     }
     System.err.println();
 
-    AElem[] elems = (AElem [])node.getProdTransform().toArray(new AElem[0]);
+    PElem[] elems = node.getProdTransform().toArray(new PElem[0]);
 
     //if(node.getArrow() != null)
     if(elems.length > 0)
     {
       System.err.print(prod_transform_INDENT + "{-> ");
 
-      for(int i=0; i<elems.length; i++)
+      for(PElem elem : elems)
       {
-        //System.err.print(elems[i] + " ");
-        elems[i].apply(this);
+        elem.apply(this);
         System.err.print(" ");
       }
       System.err.println(" } " + hasProdTransform);
     }
 
-    Object[] alts = (Object[])node.getAlts().toArray();
+    PAlt[] alts = node.getAlts().toArray(new PAlt[0]);
     for(int i=0; i<alts.length-1; i++)
     {
-      ((PAlt)alts[i]).apply(this);
+      alts[i].apply(this);
       System.err.println( " |");
     }
-    ((PAlt)alts[alts.length-1]).apply(this);
+    alts[alts.length-1].apply(this);
 
     System.err.println("\n" + alternative_INDENT + ";\n");
   }
@@ -79,11 +77,10 @@ public class PrettyPrinter extends DepthFirstAdapter
       System.err.print("{" + node.getAltName().getText()+"} ");
     }
 
-    AElem[] listElems = (AElem[])node.getElems().toArray(new AElem[0]);
-    for(int i=0; i<listElems.length; i++)
+    PElem[] listElems = node.getElems().toArray(new PElem[0]);
+    for(PElem elem : listElems)
     {
-      //System.err.print(listElems[i]);
-      listElems[i].apply(this);
+      elem.apply(this);
       System.err.print(" ");
     }
 
@@ -98,10 +95,10 @@ public class PrettyPrinter extends DepthFirstAdapter
   {
     System.err.print("\n" + alt_transform_INDENT + "{-> ");
 
-    Object []terms = (Object[]) node.getTerms().toArray();
-    for(int i=0; i<terms.length; i++)
+    PTerm[] terms = node.getTerms().toArray(new PTerm[0]);
+    for(PTerm term : terms)
     {
-      ((PTerm)terms[i]).apply(this);
+      term.apply(this);
       System.err.print(" ");
     }
 
@@ -125,15 +122,15 @@ public class PrettyPrinter extends DepthFirstAdapter
     node.getProdName().apply(this);
     System.err.print(" (" );
 
-    Object []params = node.getParams().toArray();
+    PTerm[] params = node.getParams().toArray(new PTerm[0]);
     if(params.length > 0)
     {
       for(int i=0; i<params.length-1; i++)
       {
-        ((PTerm)params[i]).apply(this);
+        params[i].apply(this);
         System.err.print(", ");
       }
-      ((PTerm)params[params.length-1]).apply(this);
+      params[params.length-1].apply(this);
     }
     System.err.print(" )");
   }
@@ -142,11 +139,11 @@ public class PrettyPrinter extends DepthFirstAdapter
   public void caseAListTerm(AListTerm node)
   {
     System.err.print("[ ");
-    Object []list_terms = node.getListTerms().toArray();
+    PListTerm[] list_terms = node.getListTerms().toArray(new PListTerm[0]);
 
-    for(int i=0; i<list_terms.length; i++)
+    for(PListTerm listTerm : list_terms)
     {
-      ((PListTerm)list_terms[i]).apply(this);
+      listTerm.apply(this);
     }
     System.err.print(" ]");
   }
@@ -186,15 +183,15 @@ public class PrettyPrinter extends DepthFirstAdapter
     node.getProdName().apply(this);
     System.err.print(" (" );
 
-    Object []params = node.getParams().toArray();
+    PTerm[] params = node.getParams().toArray(new PTerm[0]);
     if(params.length > 0)
     {
       for(int i=0; i<params.length-1; i++)
       {
-        ((PTerm)params[i]).apply(this);
+        params[i].apply(this);
         System.err.print(", ");
       }
-      ((PTerm)params[params.length-1]).apply(this);
+      params[params.length-1].apply(this);
     }
     System.err.print(" )");
   }
@@ -226,11 +223,10 @@ public class PrettyPrinter extends DepthFirstAdapter
   {
     System.err.print("Abstract Syntax Tree\n");
 
-    AAstProd [] prods =
-      (AAstProd [])node.getProds().toArray(new AAstProd[0]);
-    for(int i = 0; i < prods.length; i++)
+    PAstProd[] prods = node.getProds().toArray(new PAstProd[0]);
+    for(PAstProd prod : prods)
     {
-      prods[i].apply(this);
+      prod.apply(this);
     }
   }
 
@@ -239,7 +235,7 @@ public class PrettyPrinter extends DepthFirstAdapter
   {
     System.err.println(production_INDENT + node.getId().getText() + " =");
 
-    AAstAlt[] alts = (AAstAlt[])node.getAlts().toArray(new AAstAlt[0]);
+    PAstAlt[] alts = node.getAlts().toArray(new PAstAlt[0]);
     for(int i=0; i<alts.length-1; i++)
     {
       alts[i].apply(this);
@@ -260,11 +256,10 @@ public class PrettyPrinter extends DepthFirstAdapter
       System.err.print("{" + node.getAltName().getText()+"} ");
     }
 
-    AElem[] listElems = (AElem[])node.getElems().toArray(new AElem[0]);
-    for(int i=0; i<listElems.length; i++)
+    PElem[] listElems = node.getElems().toArray(new PElem[0]);
+    for(PElem elem : listElems)
     {
-      //System.err.print(listElems[i]);
-      listElems[i].apply(this);
+      elem.apply(this);
       System.err.print(" ");
     }
   }
diff --git a/src/main/java/org/sablecc/sablecc/Production.java b/src/main/java/org/sablecc/sablecc/Production.java
index f2901da..808c8f4 100644
--- a/src/main/java/org/sablecc/sablecc/Production.java
+++ b/src/main/java/org/sablecc/sablecc/Production.java
@@ -9,7 +9,6 @@ package org.sablecc.sablecc;
 
 import java.util.*;
 import java.util.Vector;
-import java.util.Enumeration;
 
 final class Production
 {
@@ -17,8 +16,8 @@ final class Production
   final int index;
   final String name;
 
-  private final Vector rightside = new Vector();
-  private static final Vector productions = new Vector(0);
+  private final Vector<Symbol> rightside = new Vector<>();
+  private static final Vector<Production> productions = new Vector<>(0);
   private static TreeMap<Integer, Production[]> alternatives_ = new TreeMap<>();
   private static boolean modified_ = true;
   private static Production[] productions_;
@@ -78,12 +77,12 @@ final class Production
 
   Symbol rightside(int index)
   {
-    return (Symbol) rightside.elementAt(index);
+    return rightside.elementAt(index);
   }
 
   static Production production(int index)
   {
-    return (Production) productions.elementAt(index);
+    return productions.elementAt(index);
   }
 
   static Production[] alternatives(int nonterminal)
@@ -97,12 +96,10 @@ final class Production
 
     if(result == null)
     {
-      Vector alternatives = new Vector(0);
+      Vector<Production> alternatives = new Vector<>(0);
 
-      for(Enumeration e = productions.elements(); e.hasMoreElements();)
+      for(Production production : productions)
       {
-        Production production = (Production) e.nextElement();
-
         if(production.leftside == nonterminal)
         {
           alternatives.addElement(production);
diff --git a/src/main/java/org/sablecc/sablecc/RecursiveProductionsDetections.java b/src/main/java/org/sablecc/sablecc/RecursiveProductionsDetections.java
index 71a9409..942c318 100644
--- a/src/main/java/org/sablecc/sablecc/RecursiveProductionsDetections.java
+++ b/src/main/java/org/sablecc/sablecc/RecursiveProductionsDetections.java
@@ -22,11 +22,11 @@ public class RecursiveProductionsDetections extends DepthFirstAdapter
     currentProd = node.getId().getText();
     if(!node.getId().getText().startsWith("$"))
     {
-      Object []alts = node.getAlts().toArray();
+      PAlt[] alts = node.getAlts().toArray(new PAlt[0]);
 
-      for(int i=0; i<alts.length; i++)
+      for(PAlt alt : alts)
       {
-        ((PAlt)alts[i]).apply(this);
+        alt.apply(this);
       }
     }
     else
@@ -38,10 +38,10 @@ public class RecursiveProductionsDetections extends DepthFirstAdapter
   @Override
   public void caseAAlt(AAlt node)
   {
-    Object temp[] = node.getElems().toArray();
-    for(int i = 0; i < temp.length; i++)
+    PElem[] temp = node.getElems().toArray(new PElem[0]);
+    for(PElem elem : temp)
     {
-      ((PElem) temp[i]).apply(this);
+      elem.apply(this);
     }
   }
   /*
diff --git a/src/main/java/org/sablecc/sablecc/ResolveAltIds.java b/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
index fffb94f..26a52e5 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
@@ -69,12 +69,10 @@ public class ResolveAltIds extends DepthFirstAdapter
   @Override
   public void caseAProd(AProd node)
   {
-    AElem []temp = (AElem[]) node.getProdTransform().toArray(new AElem[0]);
-
-    Object []list_alts = node.getAlts().toArray();
-    for(int j=0; j<list_alts.length; j++)
+    PAlt[] list_alts = node.getAlts().toArray(new PAlt[0]);
+    for(PAlt alt : list_alts)
     {
-      ((PAlt)list_alts[j]).apply(this);
+      alt.apply(this);
     }
   }
 
@@ -96,10 +94,10 @@ public class ResolveAltIds extends DepthFirstAdapter
 
     currentAlt = ids.names.get(alt);
 
-    AElem[] list_elems = (AElem[])alt.getElems().toArray(new AElem[0]);
-    for(int i=0; i<list_elems.length; i++)
+    PElem[] list_elems = alt.getElems().toArray(new PElem[0]);
+    for(PElem elem : list_elems)
     {
-      list_elems[i].apply(this);
+      elem.apply(this);
     }
 
     alts_elemsGlobal.put(currentAlt, listElemsGlobal);
diff --git a/src/main/java/org/sablecc/sablecc/ResolveAstIds.java b/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
index 616844a..8964d39 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
@@ -65,10 +65,10 @@ public class ResolveAstIds extends DepthFirstAdapter
   @Override
   public void inAAst(AAst node)
   {
-    LinkedList listProds = node.getProds();
+    List<PAstProd> listProds = node.getProds();
     if(listProds.size() > 0)
     {
-      AAstProd firstAstProd = (AAstProd)listProds.getFirst();
+      AAstProd firstAstProd = (AAstProd)listProds.get(0);
       firstAstProduction = "P" + ResolveIds.name(firstAstProd.getId().getText());
     }
   }
diff --git a/src/main/java/org/sablecc/sablecc/ResolveIds.java b/src/main/java/org/sablecc/sablecc/ResolveIds.java
index 4f05c70..e41992a 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveIds.java
@@ -58,7 +58,7 @@ public class ResolveIds extends DepthFirstAdapter
   @Override
   public void inAGrammar(AGrammar node)
   {
-    TPkgId[] temp = (TPkgId []) node.getPackage().toArray(new TPkgId[0]);
+    TPkgId[] temp = node.getPackage().toArray(new TPkgId[0]);
     if(temp.length > 0)
     {
       pkgName = temp[0].getText();
@@ -95,10 +95,10 @@ public class ResolveIds extends DepthFirstAdapter
     names.put(node, name);
 
     //list of inAAlt code.
-    Object []list_alt = (Object [])node.getAlts().toArray();
-    for(int i = 0; i< list_alt.length; i++)
+    PAlt[] list_alt = node.getAlts().toArray(new PAlt[0]);
+    for(PAlt alt : list_alt)
     {
-      ((PAlt)list_alt[i]).apply(this);
+      alt.apply(this);
     }
   }
 
@@ -147,7 +147,7 @@ public class ResolveIds extends DepthFirstAdapter
 
     if(node.getLookAhead() != null)
     {
-      Token token = (Token) node.getSlash();
+      Token token = node.getSlash();
       throw new RuntimeException(
         "[" + token.getLine() + "," + token.getPos() + "] " +
         "Look ahead not yet supported.");
@@ -157,19 +157,19 @@ public class ResolveIds extends DepthFirstAdapter
   @Override
   public void inAStates(AStates node)
   {
-    Object [] list_id = (Object[]) node.getListId().toArray();
+    TId[] list_id = node.getListId().toArray(new TId[0]);
     String name;
 
-    for(int i=0; i<list_id.length; i++)
+    for(TId id : list_id)
     {
-      name = ((TId)list_id[i]).getText().toUpperCase();
+      name = id.getText().toUpperCase();
 
-      if(states.put(name, (Node)list_id[i]) != null)
+      if(states.put(name, id) != null)
       {
-        error((TId)list_id[i], name);
+        error(id, name);
       }
 
-      names.put((Node)list_id[i], name);
+      names.put(id, name);
       stateList.add(name);
     }
   }
@@ -177,23 +177,23 @@ public class ResolveIds extends DepthFirstAdapter
   @Override
   public void inAIgnTokens(AIgnTokens node)
   {
-    Object [] list_id = (Object[]) node.getListId().toArray();
+    TId[] list_id = node.getListId().toArray(new TId[0]);
     String name;
 
-    for(int i=0; i<list_id.length; i++)
+    for(TId id : list_id)
     {
-      name = "T" + name(((TId)list_id[i]).getText());
+      name = "T" + name(id.getText());
 
       if(tokens.get(name) == null)
       {
-        error2((TId)list_id[i], name);
+        error2(id, name);
       }
 
-      if(ignTokens.put(name, (Node)list_id[i]) != null)
+      if(ignTokens.put(name, id) != null)
       {
-        error((TId)list_id[i], name);
+        error(id, name);
       }
-      names.put((Node)list_id[i], name);
+      names.put(id, name);
     }
   }
 
@@ -279,10 +279,10 @@ public class ResolveIds extends DepthFirstAdapter
       names.put(alt, currentAlt);
     }
 
-    AElem list_elem[] = (AElem[]) alt.getElems().toArray(new AElem[0]);
-    for(int i=0; i<list_elem.length;i++)
+    PElem[] list_elem = alt.getElems().toArray(new PElem[0]);
+    for(PElem elem : list_elem)
     {
-      list_elem[i].apply(this);
+      elem.apply(this);
     }
 
   }
@@ -352,10 +352,10 @@ public class ResolveIds extends DepthFirstAdapter
                    currentProd = name(node.getId().getText());
 
                    //list of inAAlt code.
-                   Object []list_alt = (Object [])node.getAlts().toArray();
-                   for(int i = 0; i< list_alt.length; i++)
+                   PAlt[] list_alt = node.getAlts().toArray(new PAlt[0]);
+                   for(PAlt alt : list_alt)
                    {
-                     ((PAlt)list_alt[i]).apply(this);
+                     alt.apply(this);
                    }
                  }
 
@@ -371,10 +371,10 @@ public class ResolveIds extends DepthFirstAdapter
                      currentAlt = "A" + currentProd;
                    }
 
-                   AElem[] list_elem = (AElem[]) alt.getElems().toArray(new AElem[0]);
-                   for(int i=0; i<list_elem.length;i++)
+                   PElem[] list_elem = alt.getElems().toArray(new PElem[0]);
+                   for(PElem elem : list_elem)
                    {
-                     list_elem[i].apply(this);
+                     elem.apply(this);
                    }
                  }
 
diff --git a/src/main/java/org/sablecc/sablecc/ResolveProdTransformIds.java b/src/main/java/org/sablecc/sablecc/ResolveProdTransformIds.java
index 3f3bba2..064041b 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveProdTransformIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveProdTransformIds.java
@@ -56,8 +56,7 @@ public class ResolveProdTransformIds extends DepthFirstAdapter
   {
     prod_name = transformIds.astIds.names.get(production);
 
-    AElem temp[] =
-      (AElem [])production.getProdTransform().toArray(new AElem[0]);
+    PElem[] temp = production.getProdTransform().toArray(new PElem[0]);
 
     listProdTransformContainsList = new LinkedList();
 
@@ -68,9 +67,9 @@ public class ResolveProdTransformIds extends DepthFirstAdapter
       listProdTransformList.add(prod_name);
     }
 
-    for(int i=0; i<temp.length; i++)
+    for(PElem elem : temp)
     {
-      ((PElem) temp[i]).apply(new DepthFirstAdapter()
+      elem.apply(new DepthFirstAdapter()
                               {
                                 @Override
                                 public void caseAElem(AElem node)
diff --git a/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java b/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
index 5af4b26..8f19905 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
@@ -184,8 +184,8 @@ public class ResolveTransformIds extends DepthFirstAdapter
 
     if(node.getParams().size() > 0 && astAlt.getElems().size() > 0)
     {
-      Object elemsTable[] = astAlt.getElems().toArray();
-      Object paramsTable[] = node.getParams().toArray();
+      PElem[] elemsTable = astAlt.getElems().toArray(new PElem[0]);
+      PTerm[] paramsTable = node.getParams().toArray(new PTerm[0]);
 
       String termType, elemType;
 
@@ -274,8 +274,8 @@ public class ResolveTransformIds extends DepthFirstAdapter
 
     if(node.getParams().size() > 0 && astAlt.getElems().size() > 0)
     {
-      Object elemsTable[] = astAlt.getElems().toArray();
-      Object paramsTable[] = node.getParams().toArray();
+      PElem[] elemsTable = astAlt.getElems().toArray(new PElem[0]);
+      PTerm[] paramsTable = node.getParams().toArray(new PTerm[0]);
 
       String termType, elemType;
 
@@ -304,7 +304,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
   {
     if( (node.getListTerms() != null) && (node.getListTerms().size() != 0) )
     {
-      Object temp[] = node.getListTerms().toArray();
+      PListTerm[] temp = node.getListTerms().toArray(new PListTerm[0]);
       String firstTermType = altTransformElemTypes.get(temp[0]);
       if(firstTermType.endsWith("?"))
       {
@@ -797,15 +797,15 @@ public class ResolveTransformIds extends DepthFirstAdapter
     }
   }
 
-  private Object curr_prodTransformElems[];
+  private Object[] curr_prodTransformElems;
   private boolean curr_prod_has_prodTransform;
   private boolean firstProduction = false;
 
   @Override
   public void outAProductions(AProductions node)
   {
-    LinkedList list = node.getProds();
-    AProd prod = (AProd)list.getFirst();
+    List<PProd> list = node.getProds();
+    AProd prod = (AProd)list.get(0);
     firstProduction = true;
 
     if( prodTransformIds.listProdTransformList.contains("P"+ ResolveIds.name( prod.getId().getText()) ) )
@@ -813,16 +813,15 @@ public class ResolveTransformIds extends DepthFirstAdapter
       error_0(prod.getId());
     }
 
-    Object temp[] = node.getProds().toArray();
-    for(int i = 0; i < temp.length; i++)
+    PProd[] temp = node.getProds().toArray(new PProd[0]);
+    for(PProd p : temp)
     {
-
-      ((PProd) temp[i]).apply(new DepthFirstAdapter()
+      p.apply(new DepthFirstAdapter()
                               {
                                 @Override
                                 public void inAProd(AProd production)
                                 {
-                                  LinkedList prodTransform = production.getProdTransform();
+                                  List<PElem> prodTransform = production.getProdTransform();
                                   String prodTransformElemType = "";
                                   curr_prodTransformElems = null;
                                   curr_prod_has_prodTransform = false;
@@ -836,17 +835,17 @@ public class ResolveTransformIds extends DepthFirstAdapter
                                   else if(production.getArrow() == null)
                                   {
                                     curr_prod_has_prodTransform = false;
-                                    String []tab = new String[1];
+                                    String[] tab = new String[1];
                                     tab[0] = "P" + ResolveIds.name(production.getId().getText());
-                                    curr_prodTransformElems = (Object[])tab;
+                                    curr_prodTransformElems = tab;
                                     prodTransformElemType = (String)curr_prodTransformElems[0];
                                   }
                                   else
                                   {
                                     curr_prod_has_prodTransform = false;
-                                    String []tab = new String[1];
+                                    String[] tab = new String[1];
                                     tab[0] = "nothing";
-                                    curr_prodTransformElems = (Object[])tab;
+                                    curr_prodTransformElems = tab;
                                     prodTransformIds.prodTransformElemTypes.put(prodTransform, "nothing");
                                     prodTransformElemType = (String)curr_prodTransformElems[0];
                                   }
@@ -864,7 +863,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
                                 @Override
                                 public void inAAltTransform(AAltTransform node)
                                 {
-                                  Object curr_altTransformTerms[] = node.getTerms().toArray();
+                                  PTerm[] curr_altTransformTerms = node.getTerms().toArray(new PTerm[0]);
 
                                   for(int k = 0; k < curr_altTransformTerms.length; k++)
                                   {
diff --git a/src/main/java/org/sablecc/sablecc/SableCC.java b/src/main/java/org/sablecc/sablecc/SableCC.java
index 3c80cb6..88445db 100644
--- a/src/main/java/org/sablecc/sablecc/SableCC.java
+++ b/src/main/java/org/sablecc/sablecc/SableCC.java
@@ -55,7 +55,7 @@ public class SableCC {
 
 	public static void main(String[] arguments) {
 		String d_option = null;
-		Vector filename = new Vector();
+		Vector<String> filename = new Vector<>();
 
 		if (arguments.length == 0) {
 			displayCopyright();
@@ -115,7 +115,7 @@ public class SableCC {
 
 		try {
 			for (int i = 0; i < filename.size(); i++) {
-				processGrammar((String) filename.elementAt(i), d_option);
+				processGrammar(filename.elementAt(i), d_option);
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
diff --git a/src/main/java/org/sablecc/sablecc/Transitions.java b/src/main/java/org/sablecc/sablecc/Transitions.java
index 4720756..59b3d52 100644
--- a/src/main/java/org/sablecc/sablecc/Transitions.java
+++ b/src/main/java/org/sablecc/sablecc/Transitions.java
@@ -35,10 +35,10 @@ public class Transitions extends DepthFirstAdapter
     outAStateList(node);  // We moved this...
 
     {
-      Object temp[] = node.getStateLists().toArray();
-      for(int i = 0; i < temp.length; i++)
+      PStateListTail[] temp = node.getStateLists().toArray(new PStateListTail[0]);
+      for(PStateListTail tail : temp)
       {
-        ((PStateListTail) temp[i]).apply(this);
+        tail.apply(this);
       }
     }
   }
-- 
GitLab