From fa324d52625721668eca8ab0fc236adec6d0378d Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Wed, 6 Apr 2022 16:28:07 +0200
Subject: [PATCH] Use covariant return types in clone method tempates

---
 src/main/java/org/sablecc/sablecc/node/AAlt.java            | 2 +-
 src/main/java/org/sablecc/sablecc/node/AAltTransform.java   | 2 +-
 src/main/java/org/sablecc/sablecc/node/AAst.java            | 2 +-
 src/main/java/org/sablecc/sablecc/node/AAstAlt.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/AAstProd.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/ACharBasic.java      | 2 +-
 src/main/java/org/sablecc/sablecc/node/ACharChar.java       | 2 +-
 src/main/java/org/sablecc/sablecc/node/AConcat.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/ADecChar.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/AElem.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/AGrammar.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/AHelperDef.java      | 2 +-
 src/main/java/org/sablecc/sablecc/node/AHelpers.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/AHexChar.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/AIdBasic.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/AIgnTokens.java      | 2 +-
 src/main/java/org/sablecc/sablecc/node/AIntervalSet.java    | 2 +-
 src/main/java/org/sablecc/sablecc/node/AListTerm.java       | 2 +-
 src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java     | 2 +-
 src/main/java/org/sablecc/sablecc/node/ANewListTerm.java    | 2 +-
 src/main/java/org/sablecc/sablecc/node/ANewTerm.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/ANullTerm.java       | 2 +-
 src/main/java/org/sablecc/sablecc/node/AOperationSet.java   | 2 +-
 src/main/java/org/sablecc/sablecc/node/APlusBinOp.java      | 2 +-
 src/main/java/org/sablecc/sablecc/node/APlusUnOp.java       | 2 +-
 src/main/java/org/sablecc/sablecc/node/AProd.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/AProdName.java       | 2 +-
 .../java/org/sablecc/sablecc/node/AProductionSpecifier.java | 2 +-
 src/main/java/org/sablecc/sablecc/node/AProductions.java    | 2 +-
 src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java      | 2 +-
 src/main/java/org/sablecc/sablecc/node/ARegExp.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java    | 2 +-
 src/main/java/org/sablecc/sablecc/node/ASetBasic.java       | 2 +-
 src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java | 2 +-
 src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java     | 2 +-
 src/main/java/org/sablecc/sablecc/node/AStarUnOp.java       | 2 +-
 src/main/java/org/sablecc/sablecc/node/AStateList.java      | 2 +-
 src/main/java/org/sablecc/sablecc/node/AStateListTail.java  | 2 +-
 src/main/java/org/sablecc/sablecc/node/AStates.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/AStringBasic.java    | 2 +-
 src/main/java/org/sablecc/sablecc/node/ATokenDef.java       | 2 +-
 src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java | 2 +-
 src/main/java/org/sablecc/sablecc/node/ATokens.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/ATransition.java     | 2 +-
 src/main/java/org/sablecc/sablecc/node/AUnExp.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/EOF.java             | 2 +-
 src/main/java/org/sablecc/sablecc/node/Node.java            | 2 +-
 src/main/java/org/sablecc/sablecc/node/Start.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TAbstract.java       | 2 +-
 src/main/java/org/sablecc/sablecc/node/TArrow.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/TBar.java            | 2 +-
 src/main/java/org/sablecc/sablecc/node/TBlank.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/TChar.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TColon.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/TComma.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/TComment.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/TDDot.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TDecChar.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/TDot.java            | 2 +-
 src/main/java/org/sablecc/sablecc/node/TEqual.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/THelpers.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/THexChar.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/TId.java             | 2 +-
 src/main/java/org/sablecc/sablecc/node/TIgnored.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/TLBkt.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TLBrace.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/TLPar.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TMinus.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/TNew.java            | 2 +-
 src/main/java/org/sablecc/sablecc/node/TNull.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TPackage.java        | 2 +-
 src/main/java/org/sablecc/sablecc/node/TPkgId.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/TPlus.java           | 2 +-
 .../java/org/sablecc/sablecc/node/TProductionSpecifier.java | 2 +-
 src/main/java/org/sablecc/sablecc/node/TProductions.java    | 2 +-
 src/main/java/org/sablecc/sablecc/node/TQMark.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/TRBkt.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TRBrace.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/TRPar.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TSemicolon.java      | 2 +-
 src/main/java/org/sablecc/sablecc/node/TSlash.java          | 2 +-
 src/main/java/org/sablecc/sablecc/node/TStar.java           | 2 +-
 src/main/java/org/sablecc/sablecc/node/TStates.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/TString.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/TSyntax.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java | 2 +-
 src/main/java/org/sablecc/sablecc/node/TTokens.java         | 2 +-
 src/main/java/org/sablecc/sablecc/node/TTree.java           | 2 +-
 src/main/resources/org/sablecc/sablecc/alternatives.txt     | 2 +-
 src/main/resources/org/sablecc/sablecc/tokens.txt           | 4 ++--
 src/main/resources/org/sablecc/sablecc/utils.txt            | 6 +++---
 91 files changed, 94 insertions(+), 94 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 7a63577..2d7f69f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -32,7 +32,7 @@ public final class AAlt extends PAlt
     }
 
     @Override
-    public Object clone()
+    public AAlt clone()
     {
         return new AAlt(
             cloneNode(this._altName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 8ad384e..1693eda 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -32,7 +32,7 @@ public final class AAltTransform extends PAltTransform
     }
 
     @Override
-    public Object clone()
+    public AAltTransform clone()
     {
         return new AAltTransform(
             cloneNode(this._lBrace_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index 4617ddb..ae6e7e3 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -24,7 +24,7 @@ public final class AAst extends PAst
     }
 
     @Override
-    public Object clone()
+    public AAst clone()
     {
         return new AAst(
             cloneList(this._prods_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index b75825a..e847561 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -28,7 +28,7 @@ public final class AAstAlt extends PAstAlt
     }
 
     @Override
-    public Object clone()
+    public AAstAlt clone()
     {
         return new AAstAlt(
             cloneNode(this._altName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index 24043f0..a261769f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -28,7 +28,7 @@ public final class AAstProd extends PAstProd
     }
 
     @Override
-    public Object clone()
+    public AAstProd clone()
     {
         return new AAstProd(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
index 86b2053..c4d4d2a 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
@@ -23,7 +23,7 @@ public final class ACharBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public ACharBasic clone()
     {
         return new ACharBasic(
             cloneNode(this._char_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharChar.java b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
index c303eeb..37a29b8 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
@@ -23,7 +23,7 @@ public final class ACharChar extends PChar
     }
 
     @Override
-    public Object clone()
+    public ACharChar clone()
     {
         return new ACharChar(
             cloneNode(this._char_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index 46f81af..9b5977a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -24,7 +24,7 @@ public final class AConcat extends PConcat
     }
 
     @Override
-    public Object clone()
+    public AConcat clone()
     {
         return new AConcat(
             cloneList(this._unExps_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ADecChar.java b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
index 1e5cf11..92025a2 100644
--- a/src/main/java/org/sablecc/sablecc/node/ADecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
@@ -23,7 +23,7 @@ public final class ADecChar extends PChar
     }
 
     @Override
-    public Object clone()
+    public ADecChar clone()
     {
         return new ADecChar(
             cloneNode(this._decChar_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AElem.java b/src/main/java/org/sablecc/sablecc/node/AElem.java
index c41f853..9b1daba 100644
--- a/src/main/java/org/sablecc/sablecc/node/AElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/AElem.java
@@ -35,7 +35,7 @@ public final class AElem extends PElem
     }
 
     @Override
-    public Object clone()
+    public AElem clone()
     {
         return new AElem(
             cloneNode(this._elemName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index 6ad5fd1..9a3c3b4 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -48,7 +48,7 @@ public final class AGrammar extends PGrammar
     }
 
     @Override
-    public Object clone()
+    public AGrammar clone()
     {
         return new AGrammar(
             cloneList(this._package_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
index 62ecf16..9b9a773 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
@@ -27,7 +27,7 @@ public final class AHelperDef extends PHelperDef
     }
 
     @Override
-    public Object clone()
+    public AHelperDef clone()
     {
         return new AHelperDef(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index c338123..2205d2b 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -24,7 +24,7 @@ public final class AHelpers extends PHelpers
     }
 
     @Override
-    public Object clone()
+    public AHelpers clone()
     {
         return new AHelpers(
             cloneList(this._helperDefs_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AHexChar.java b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
index 13e1542..d20a390 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
@@ -23,7 +23,7 @@ public final class AHexChar extends PChar
     }
 
     @Override
-    public Object clone()
+    public AHexChar clone()
     {
         return new AHexChar(
             cloneNode(this._hexChar_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
index 55f3ba4..8b90894 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
@@ -23,7 +23,7 @@ public final class AIdBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public AIdBasic clone()
     {
         return new AIdBasic(
             cloneNode(this._id_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index cb4437e..5fad1bc 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -24,7 +24,7 @@ public final class AIgnTokens extends PIgnTokens
     }
 
     @Override
-    public Object clone()
+    public AIgnTokens clone()
     {
         return new AIgnTokens(
             cloneList(this._listId_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
index 2963e90..4d18203 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
@@ -27,7 +27,7 @@ public final class AIntervalSet extends PSet
     }
 
     @Override
-    public Object clone()
+    public AIntervalSet clone()
     {
         return new AIntervalSet(
             cloneNode(this._left_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index b08c49a..d8ac882 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -28,7 +28,7 @@ public final class AListTerm extends PTerm
     }
 
     @Override
-    public Object clone()
+    public AListTerm clone()
     {
         return new AListTerm(
             cloneNode(this._lBkt_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
index e0f0b7f..835b9ff 100644
--- a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
@@ -14,7 +14,7 @@ public final class AMinusBinOp extends PBinOp
     }
 
     @Override
-    public Object clone()
+    public AMinusBinOp clone()
     {
         return new AMinusBinOp();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
index 855252e..43dd3b2 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -32,7 +32,7 @@ public final class ANewListTerm extends PListTerm
     }
 
     @Override
-    public Object clone()
+    public ANewListTerm clone()
     {
         return new ANewListTerm(
             cloneNode(this._prodName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index a34c71c..be1dc74 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -32,7 +32,7 @@ public final class ANewTerm extends PTerm
     }
 
     @Override
-    public Object clone()
+    public ANewTerm clone()
     {
         return new ANewTerm(
             cloneNode(this._prodName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
index e1b11d4..8a02cd2 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
@@ -14,7 +14,7 @@ public final class ANullTerm extends PTerm
     }
 
     @Override
-    public Object clone()
+    public ANullTerm clone()
     {
         return new ANullTerm();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
index a3085a8..3e89f90 100644
--- a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
@@ -31,7 +31,7 @@ public final class AOperationSet extends PSet
     }
 
     @Override
-    public Object clone()
+    public AOperationSet clone()
     {
         return new AOperationSet(
             cloneNode(this._left_),
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
index 4cc0608..30b4a0c 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
@@ -14,7 +14,7 @@ public final class APlusBinOp extends PBinOp
     }
 
     @Override
-    public Object clone()
+    public APlusBinOp clone()
     {
         return new APlusBinOp();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
index dc08910..9ecf271 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
@@ -23,7 +23,7 @@ public final class APlusUnOp extends PUnOp
     }
 
     @Override
-    public Object clone()
+    public APlusUnOp clone()
     {
         return new APlusUnOp(
             cloneNode(this._plus_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index 0e05aac..829b66b 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -36,7 +36,7 @@ public final class AProd extends PProd
     }
 
     @Override
-    public Object clone()
+    public AProd clone()
     {
         return new AProd(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AProdName.java b/src/main/java/org/sablecc/sablecc/node/AProdName.java
index be2164f..272d4a2 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProdName.java
@@ -27,7 +27,7 @@ public final class AProdName extends PProdName
     }
 
     @Override
-    public Object clone()
+    public AProdName clone()
     {
         return new AProdName(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
index e436ac5..3e958ec 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
@@ -14,7 +14,7 @@ public final class AProductionSpecifier extends PSpecifier
     }
 
     @Override
-    public Object clone()
+    public AProductionSpecifier clone()
     {
         return new AProductionSpecifier();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductions.java b/src/main/java/org/sablecc/sablecc/node/AProductions.java
index bf725ce..3feac8c 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -24,7 +24,7 @@ public final class AProductions extends PProductions
     }
 
     @Override
-    public Object clone()
+    public AProductions clone()
     {
         return new AProductions(
             cloneList(this._prods_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
index 0da6721..aa2b81f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
@@ -23,7 +23,7 @@ public final class AQMarkUnOp extends PUnOp
     }
 
     @Override
-    public Object clone()
+    public AQMarkUnOp clone()
     {
         return new AQMarkUnOp(
             cloneNode(this._qMark_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index a0139a3..18ca2e4 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -24,7 +24,7 @@ public final class ARegExp extends PRegExp
     }
 
     @Override
-    public Object clone()
+    public ARegExp clone()
     {
         return new ARegExp(
             cloneList(this._concats_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
index 089c107..50cec72 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
@@ -23,7 +23,7 @@ public final class ARegExpBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public ARegExpBasic clone()
     {
         return new ARegExpBasic(
             cloneNode(this._regExp_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
index f0e8fe3..1c747e4 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
@@ -23,7 +23,7 @@ public final class ASetBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public ASetBasic clone()
     {
         return new ASetBasic(
             cloneNode(this._set_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
index e0ea0cc..4187c1e 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
@@ -31,7 +31,7 @@ public final class ASimpleListTerm extends PListTerm
     }
 
     @Override
-    public Object clone()
+    public ASimpleListTerm clone()
     {
         return new ASimpleListTerm(
             cloneNode(this._specifier_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
index 4300fa4..7f7cd41 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
@@ -31,7 +31,7 @@ public final class ASimpleTerm extends PTerm
     }
 
     @Override
-    public Object clone()
+    public ASimpleTerm clone()
     {
         return new ASimpleTerm(
             cloneNode(this._specifier_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
index 4245e7e..3d6abe6 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
@@ -23,7 +23,7 @@ public final class AStarUnOp extends PUnOp
     }
 
     @Override
-    public Object clone()
+    public AStarUnOp clone()
     {
         return new AStarUnOp(
             cloneNode(this._star_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index 49ee0be..0f76852 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -32,7 +32,7 @@ public final class AStateList extends PStateList
     }
 
     @Override
-    public Object clone()
+    public AStateList clone()
     {
         return new AStateList(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
index 8119f84..5451020 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
@@ -27,7 +27,7 @@ public final class AStateListTail extends PStateListTail
     }
 
     @Override
-    public Object clone()
+    public AStateListTail clone()
     {
         return new AStateListTail(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index 9abfa79..271b30f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -24,7 +24,7 @@ public final class AStates extends PStates
     }
 
     @Override
-    public Object clone()
+    public AStates clone()
     {
         return new AStates(
             cloneList(this._listId_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
index ef14331..5b96778 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
@@ -23,7 +23,7 @@ public final class AStringBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public AStringBasic clone()
     {
         return new AStringBasic(
             cloneNode(this._string_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
index bef0228..be7cb58 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
@@ -39,7 +39,7 @@ public final class ATokenDef extends PTokenDef
     }
 
     @Override
-    public Object clone()
+    public ATokenDef clone()
     {
         return new ATokenDef(
             cloneNode(this._stateList_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
index 8bec819..716ff3b 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
@@ -14,7 +14,7 @@ public final class ATokenSpecifier extends PSpecifier
     }
 
     @Override
-    public Object clone()
+    public ATokenSpecifier clone()
     {
         return new ATokenSpecifier();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokens.java b/src/main/java/org/sablecc/sablecc/node/ATokens.java
index 495283f..f770883 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -24,7 +24,7 @@ public final class ATokens extends PTokens
     }
 
     @Override
-    public Object clone()
+    public ATokens clone()
     {
         return new ATokens(
             cloneList(this._tokenDefs_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ATransition.java b/src/main/java/org/sablecc/sablecc/node/ATransition.java
index 0eb04cd..f5ea0f3 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATransition.java
@@ -23,7 +23,7 @@ public final class ATransition extends PTransition
     }
 
     @Override
-    public Object clone()
+    public ATransition clone()
     {
         return new ATransition(
             cloneNode(this._id_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AUnExp.java b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
index fb848c9..bcd27d9 100644
--- a/src/main/java/org/sablecc/sablecc/node/AUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
@@ -27,7 +27,7 @@ public final class AUnExp extends PUnExp
     }
 
     @Override
-    public Object clone()
+    public AUnExp clone()
     {
         return new AUnExp(
             cloneNode(this._basic_),
diff --git a/src/main/java/org/sablecc/sablecc/node/EOF.java b/src/main/java/org/sablecc/sablecc/node/EOF.java
index 21bcc0c..20a719f 100644
--- a/src/main/java/org/sablecc/sablecc/node/EOF.java
+++ b/src/main/java/org/sablecc/sablecc/node/EOF.java
@@ -20,7 +20,7 @@ public final class EOF extends Token
     }
 
     @Override
-    public Object clone()
+    public EOF clone()
     {
         return new EOF(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/Node.java b/src/main/java/org/sablecc/sablecc/node/Node.java
index c908386..b4c0c33 100644
--- a/src/main/java/org/sablecc/sablecc/node/Node.java
+++ b/src/main/java/org/sablecc/sablecc/node/Node.java
@@ -11,7 +11,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     private Node parent;
 
     @Override
-    public abstract Object clone();
+    public abstract Node clone();
 
     public Node parent()
     {
diff --git a/src/main/java/org/sablecc/sablecc/node/Start.java b/src/main/java/org/sablecc/sablecc/node/Start.java
index f0e517c..2626e78 100644
--- a/src/main/java/org/sablecc/sablecc/node/Start.java
+++ b/src/main/java/org/sablecc/sablecc/node/Start.java
@@ -23,7 +23,7 @@ public final class Start extends Node
     }
 
     @Override
-    public Object clone()
+    public Start clone()
     {
         return new Start(
             cloneNode(this._pGrammar_),
diff --git a/src/main/java/org/sablecc/sablecc/node/TAbstract.java b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
index f4166be..a942340 100644
--- a/src/main/java/org/sablecc/sablecc/node/TAbstract.java
+++ b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
@@ -20,7 +20,7 @@ public final class TAbstract extends Token
     }
 
     @Override
-    public Object clone()
+    public TAbstract clone()
     {
         return new TAbstract(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TArrow.java b/src/main/java/org/sablecc/sablecc/node/TArrow.java
index fe0a8a6..4817c02 100644
--- a/src/main/java/org/sablecc/sablecc/node/TArrow.java
+++ b/src/main/java/org/sablecc/sablecc/node/TArrow.java
@@ -20,7 +20,7 @@ public final class TArrow extends Token
     }
 
     @Override
-    public Object clone()
+    public TArrow clone()
     {
         return new TArrow(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TBar.java b/src/main/java/org/sablecc/sablecc/node/TBar.java
index bfeded1..ea2cccb 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBar.java
@@ -20,7 +20,7 @@ public final class TBar extends Token
     }
 
     @Override
-    public Object clone()
+    public TBar clone()
     {
         return new TBar(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TBlank.java b/src/main/java/org/sablecc/sablecc/node/TBlank.java
index bfba608..bc36650 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBlank.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBlank.java
@@ -20,7 +20,7 @@ public final class TBlank extends Token
     }
 
     @Override
-    public Object clone()
+    public TBlank clone()
     {
         return new TBlank(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TChar.java b/src/main/java/org/sablecc/sablecc/node/TChar.java
index 7438c67..98b21a2 100644
--- a/src/main/java/org/sablecc/sablecc/node/TChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TChar.java
@@ -20,7 +20,7 @@ public final class TChar extends Token
     }
 
     @Override
-    public Object clone()
+    public TChar clone()
     {
         return new TChar(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TColon.java b/src/main/java/org/sablecc/sablecc/node/TColon.java
index 832682e..65692a4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TColon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TColon.java
@@ -20,7 +20,7 @@ public final class TColon extends Token
     }
 
     @Override
-    public Object clone()
+    public TColon clone()
     {
         return new TColon(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TComma.java b/src/main/java/org/sablecc/sablecc/node/TComma.java
index 98b10b7..8b421b5 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComma.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComma.java
@@ -20,7 +20,7 @@ public final class TComma extends Token
     }
 
     @Override
-    public Object clone()
+    public TComma clone()
     {
         return new TComma(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TComment.java b/src/main/java/org/sablecc/sablecc/node/TComment.java
index 3b56ffc..2834865 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComment.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComment.java
@@ -20,7 +20,7 @@ public final class TComment extends Token
     }
 
     @Override
-    public Object clone()
+    public TComment clone()
     {
         return new TComment(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDDot.java b/src/main/java/org/sablecc/sablecc/node/TDDot.java
index dcd4d66..fd34621 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDDot.java
@@ -20,7 +20,7 @@ public final class TDDot extends Token
     }
 
     @Override
-    public Object clone()
+    public TDDot clone()
     {
         return new TDDot(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDecChar.java b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
index ffc4d98..9511c49 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
@@ -20,7 +20,7 @@ public final class TDecChar extends Token
     }
 
     @Override
-    public Object clone()
+    public TDecChar clone()
     {
         return new TDecChar(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDot.java b/src/main/java/org/sablecc/sablecc/node/TDot.java
index 8c168fc..ff56837 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDot.java
@@ -20,7 +20,7 @@ public final class TDot extends Token
     }
 
     @Override
-    public Object clone()
+    public TDot clone()
     {
         return new TDot(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TEqual.java b/src/main/java/org/sablecc/sablecc/node/TEqual.java
index eefa278..015aba3 100644
--- a/src/main/java/org/sablecc/sablecc/node/TEqual.java
+++ b/src/main/java/org/sablecc/sablecc/node/TEqual.java
@@ -20,7 +20,7 @@ public final class TEqual extends Token
     }
 
     @Override
-    public Object clone()
+    public TEqual clone()
     {
         return new TEqual(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/THelpers.java b/src/main/java/org/sablecc/sablecc/node/THelpers.java
index 2c78e2c..4c843ba 100644
--- a/src/main/java/org/sablecc/sablecc/node/THelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/THelpers.java
@@ -20,7 +20,7 @@ public final class THelpers extends Token
     }
 
     @Override
-    public Object clone()
+    public THelpers clone()
     {
         return new THelpers(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/THexChar.java b/src/main/java/org/sablecc/sablecc/node/THexChar.java
index 4f58cc4..852b578 100644
--- a/src/main/java/org/sablecc/sablecc/node/THexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/THexChar.java
@@ -20,7 +20,7 @@ public final class THexChar extends Token
     }
 
     @Override
-    public Object clone()
+    public THexChar clone()
     {
         return new THexChar(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TId.java b/src/main/java/org/sablecc/sablecc/node/TId.java
index 4a4fdc4..fc64875 100644
--- a/src/main/java/org/sablecc/sablecc/node/TId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TId.java
@@ -20,7 +20,7 @@ public final class TId extends Token
     }
 
     @Override
-    public Object clone()
+    public TId clone()
     {
         return new TId(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TIgnored.java b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
index f930778..55a4e7c 100644
--- a/src/main/java/org/sablecc/sablecc/node/TIgnored.java
+++ b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
@@ -20,7 +20,7 @@ public final class TIgnored extends Token
     }
 
     @Override
-    public Object clone()
+    public TIgnored clone()
     {
         return new TIgnored(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBkt.java b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
index 1c28b3f..6060037 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
@@ -20,7 +20,7 @@ public final class TLBkt extends Token
     }
 
     @Override
-    public Object clone()
+    public TLBkt clone()
     {
         return new TLBkt(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBrace.java b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
index 39e376c..c7c8c11 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
@@ -20,7 +20,7 @@ public final class TLBrace extends Token
     }
 
     @Override
-    public Object clone()
+    public TLBrace clone()
     {
         return new TLBrace(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLPar.java b/src/main/java/org/sablecc/sablecc/node/TLPar.java
index a9d0163..06b5aa9 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLPar.java
@@ -20,7 +20,7 @@ public final class TLPar extends Token
     }
 
     @Override
-    public Object clone()
+    public TLPar clone()
     {
         return new TLPar(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TMinus.java b/src/main/java/org/sablecc/sablecc/node/TMinus.java
index 2b0d4a1..1d59154 100644
--- a/src/main/java/org/sablecc/sablecc/node/TMinus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TMinus.java
@@ -20,7 +20,7 @@ public final class TMinus extends Token
     }
 
     @Override
-    public Object clone()
+    public TMinus clone()
     {
         return new TMinus(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TNew.java b/src/main/java/org/sablecc/sablecc/node/TNew.java
index 530a364..39bcc55 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNew.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNew.java
@@ -20,7 +20,7 @@ public final class TNew extends Token
     }
 
     @Override
-    public Object clone()
+    public TNew clone()
     {
         return new TNew(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TNull.java b/src/main/java/org/sablecc/sablecc/node/TNull.java
index 0d1effb..0e718da 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNull.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNull.java
@@ -20,7 +20,7 @@ public final class TNull extends Token
     }
 
     @Override
-    public Object clone()
+    public TNull clone()
     {
         return new TNull(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPackage.java b/src/main/java/org/sablecc/sablecc/node/TPackage.java
index 3ac6738..2e6ff4f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPackage.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPackage.java
@@ -20,7 +20,7 @@ public final class TPackage extends Token
     }
 
     @Override
-    public Object clone()
+    public TPackage clone()
     {
         return new TPackage(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPkgId.java b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
index a1c3950..3913ccd 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPkgId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
@@ -20,7 +20,7 @@ public final class TPkgId extends Token
     }
 
     @Override
-    public Object clone()
+    public TPkgId clone()
     {
         return new TPkgId(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPlus.java b/src/main/java/org/sablecc/sablecc/node/TPlus.java
index 134d2fc..d3fd88d 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPlus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPlus.java
@@ -20,7 +20,7 @@ public final class TPlus extends Token
     }
 
     @Override
-    public Object clone()
+    public TPlus clone()
     {
         return new TPlus(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
index 3fa2e64..b73250d 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
@@ -20,7 +20,7 @@ public final class TProductionSpecifier extends Token
     }
 
     @Override
-    public Object clone()
+    public TProductionSpecifier clone()
     {
         return new TProductionSpecifier(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductions.java b/src/main/java/org/sablecc/sablecc/node/TProductions.java
index 00ca67b..bbcf9d4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductions.java
@@ -20,7 +20,7 @@ public final class TProductions extends Token
     }
 
     @Override
-    public Object clone()
+    public TProductions clone()
     {
         return new TProductions(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TQMark.java b/src/main/java/org/sablecc/sablecc/node/TQMark.java
index 756908f..5b77234 100644
--- a/src/main/java/org/sablecc/sablecc/node/TQMark.java
+++ b/src/main/java/org/sablecc/sablecc/node/TQMark.java
@@ -20,7 +20,7 @@ public final class TQMark extends Token
     }
 
     @Override
-    public Object clone()
+    public TQMark clone()
     {
         return new TQMark(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBkt.java b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
index 75d12c4..a64429b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
@@ -20,7 +20,7 @@ public final class TRBkt extends Token
     }
 
     @Override
-    public Object clone()
+    public TRBkt clone()
     {
         return new TRBkt(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBrace.java b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
index d4b42c7..7a8a97b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
@@ -20,7 +20,7 @@ public final class TRBrace extends Token
     }
 
     @Override
-    public Object clone()
+    public TRBrace clone()
     {
         return new TRBrace(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRPar.java b/src/main/java/org/sablecc/sablecc/node/TRPar.java
index 320de81..b186f71 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRPar.java
@@ -20,7 +20,7 @@ public final class TRPar extends Token
     }
 
     @Override
-    public Object clone()
+    public TRPar clone()
     {
         return new TRPar(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
index 6d05993..65561a5 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
@@ -20,7 +20,7 @@ public final class TSemicolon extends Token
     }
 
     @Override
-    public Object clone()
+    public TSemicolon clone()
     {
         return new TSemicolon(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSlash.java b/src/main/java/org/sablecc/sablecc/node/TSlash.java
index 577eb00..68eae04 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSlash.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSlash.java
@@ -20,7 +20,7 @@ public final class TSlash extends Token
     }
 
     @Override
-    public Object clone()
+    public TSlash clone()
     {
         return new TSlash(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TStar.java b/src/main/java/org/sablecc/sablecc/node/TStar.java
index c2acc15..37ff65d 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStar.java
@@ -20,7 +20,7 @@ public final class TStar extends Token
     }
 
     @Override
-    public Object clone()
+    public TStar clone()
     {
         return new TStar(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TStates.java b/src/main/java/org/sablecc/sablecc/node/TStates.java
index e01448a..6f4dd26 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStates.java
@@ -20,7 +20,7 @@ public final class TStates extends Token
     }
 
     @Override
-    public Object clone()
+    public TStates clone()
     {
         return new TStates(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TString.java b/src/main/java/org/sablecc/sablecc/node/TString.java
index 9b606f1..f04e798 100644
--- a/src/main/java/org/sablecc/sablecc/node/TString.java
+++ b/src/main/java/org/sablecc/sablecc/node/TString.java
@@ -20,7 +20,7 @@ public final class TString extends Token
     }
 
     @Override
-    public Object clone()
+    public TString clone()
     {
         return new TString(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSyntax.java b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
index 68392c8..699ec81 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSyntax.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
@@ -20,7 +20,7 @@ public final class TSyntax extends Token
     }
 
     @Override
-    public Object clone()
+    public TSyntax clone()
     {
         return new TSyntax(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
index 288515d..98bc334 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
@@ -20,7 +20,7 @@ public final class TTokenSpecifier extends Token
     }
 
     @Override
-    public Object clone()
+    public TTokenSpecifier clone()
     {
         return new TTokenSpecifier(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokens.java b/src/main/java/org/sablecc/sablecc/node/TTokens.java
index 6f993c1..0274048 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokens.java
@@ -20,7 +20,7 @@ public final class TTokens extends Token
     }
 
     @Override
-    public Object clone()
+    public TTokens clone()
     {
         return new TTokens(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTree.java b/src/main/java/org/sablecc/sablecc/node/TTree.java
index a259bc2..4fb7688 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTree.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTree.java
@@ -20,7 +20,7 @@ public final class TTree extends Token
     }
 
     @Override
-    public Object clone()
+    public TTree clone()
     {
         return new TTree(getLine(), getPos());
     }
diff --git a/src/main/resources/org/sablecc/sablecc/alternatives.txt b/src/main/resources/org/sablecc/sablecc/alternatives.txt
index 60c4395..ef3c2d4 100644
--- a/src/main/resources/org/sablecc/sablecc/alternatives.txt
+++ b/src/main/resources/org/sablecc/sablecc/alternatives.txt
@@ -79,7 +79,7 @@ $
 Macro:CloneHeader
 
     @Override
-    public Object clone()
+    public $0$ clone()
     {
         return new $0$(
 $
diff --git a/src/main/resources/org/sablecc/sablecc/tokens.txt b/src/main/resources/org/sablecc/sablecc/tokens.txt
index 63c37c7..f93224c 100644
--- a/src/main/resources/org/sablecc/sablecc/tokens.txt
+++ b/src/main/resources/org/sablecc/sablecc/tokens.txt
@@ -31,7 +31,7 @@ public final class $2$ extends Token
     }
 
     @Override
-    public Object clone()
+    public $2$ clone()
     {
         return new $2$(getText(), getLine(), getPos());
     }
@@ -72,7 +72,7 @@ public final class $2$ extends Token
     }
 
     @Override
-    public Object clone()
+    public $2$ clone()
     {
         return new $2$(getLine(), getPos());
     }
diff --git a/src/main/resources/org/sablecc/sablecc/utils.txt b/src/main/resources/org/sablecc/sablecc/utils.txt
index 79dfaa4..983fc3e 100644
--- a/src/main/resources/org/sablecc/sablecc/utils.txt
+++ b/src/main/resources/org/sablecc/sablecc/utils.txt
@@ -31,7 +31,7 @@ public final class Start extends Node
     }
 
     @Override
-    public Object clone()
+    public Start clone()
     {
         return new Start(
             cloneNode(this._$3$_),
@@ -164,7 +164,7 @@ public final class EOF extends Token
     }
 
     @Override
-    public Object clone()
+    public EOF clone()
     {
         return new EOF(getLine(), getPos());
     }
@@ -264,7 +264,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     private Node parent;
 
     @Override
-    public abstract Object clone();
+    public abstract Node clone();
 
     public Node parent()
     {
-- 
GitLab