From 912e29f8af574d21b1ad1fc3bc9860e00c86362e Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 2 Jan 2013 13:13:35 +0000
Subject: [PATCH]    - Remove unused equals() methods for I2CP message classes,
      most did not have hashCode() implementations.      These are never used
 as keys in a Set or Map or checked for equality.      Fixes findbugs issues
 (ticket #379)

---
 .../i2p/data/i2cp/BandwidthLimitsMessage.java | 10 ------
 .../i2p/data/i2cp/CreateLeaseSetMessage.java  | 14 ---------
 .../i2p/data/i2cp/CreateSessionMessage.java   | 11 -------
 .../net/i2p/data/i2cp/DestLookupMessage.java  | 10 ------
 .../net/i2p/data/i2cp/DestReplyMessage.java   | 11 -------
 .../i2p/data/i2cp/DestroySessionMessage.java  | 17 ----------
 .../net/i2p/data/i2cp/DisconnectMessage.java  | 11 -------
 .../data/i2cp/GetBandwidthLimitsMessage.java  | 10 ------
 .../src/net/i2p/data/i2cp/GetDateMessage.java | 14 ---------
 .../i2p/data/i2cp/MessagePayloadMessage.java  | 13 --------
 .../i2p/data/i2cp/MessageStatusMessage.java   | 31 ++++++++++---------
 .../data/i2cp/ReceiveMessageBeginMessage.java | 12 -------
 .../data/i2cp/ReceiveMessageEndMessage.java   | 12 -------
 .../data/i2cp/ReconfigureSessionMessage.java  | 12 -------
 .../net/i2p/data/i2cp/ReportAbuseMessage.java | 12 -------
 .../i2p/data/i2cp/RequestLeaseSetMessage.java | 16 ----------
 .../data/i2cp/SendMessageExpiresMessage.java  | 12 -------
 .../net/i2p/data/i2cp/SendMessageMessage.java | 13 --------
 .../i2p/data/i2cp/SessionStatusMessage.java   | 11 -------
 .../src/net/i2p/data/i2cp/SetDateMessage.java | 15 ---------
 20 files changed, 17 insertions(+), 250 deletions(-)

diff --git a/core/java/src/net/i2p/data/i2cp/BandwidthLimitsMessage.java b/core/java/src/net/i2p/data/i2cp/BandwidthLimitsMessage.java
index bd8a2ff0e6..cd0d0f6d3a 100644
--- a/core/java/src/net/i2p/data/i2cp/BandwidthLimitsMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/BandwidthLimitsMessage.java
@@ -78,16 +78,6 @@ public class BandwidthLimitsMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof BandwidthLimitsMessage)) {
-            BandwidthLimitsMessage msg = (BandwidthLimitsMessage) object;
-            return DataHelper.eq(data, msg.getLimits());
-        }
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/CreateLeaseSetMessage.java b/core/java/src/net/i2p/data/i2cp/CreateLeaseSetMessage.java
index 4425a8d005..cfed39f180 100644
--- a/core/java/src/net/i2p/data/i2cp/CreateLeaseSetMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/CreateLeaseSetMessage.java
@@ -107,20 +107,6 @@ public class CreateLeaseSetMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof CreateLeaseSetMessage)) {
-            CreateLeaseSetMessage msg = (CreateLeaseSetMessage) object;
-            return DataHelper.eq(getSessionId(), msg.getSessionId())
-                   && DataHelper.eq(getSigningPrivateKey(), msg.getSigningPrivateKey())
-                   && DataHelper.eq(getPrivateKey(), msg.getPrivateKey())
-                   && DataHelper.eq(getLeaseSet(), msg.getLeaseSet());
-        }
-        
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/CreateSessionMessage.java b/core/java/src/net/i2p/data/i2cp/CreateSessionMessage.java
index 8590a554c0..e2efacee86 100644
--- a/core/java/src/net/i2p/data/i2cp/CreateSessionMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/CreateSessionMessage.java
@@ -70,17 +70,6 @@ public class CreateSessionMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof CreateSessionMessage)) {
-            CreateSessionMessage msg = (CreateSessionMessage) object;
-            return DataHelper.eq(_sessionConfig, msg.getSessionConfig());
-        }
-            
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/DestLookupMessage.java b/core/java/src/net/i2p/data/i2cp/DestLookupMessage.java
index b635936cd6..f6613bc615 100644
--- a/core/java/src/net/i2p/data/i2cp/DestLookupMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/DestLookupMessage.java
@@ -60,16 +60,6 @@ public class DestLookupMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof DestLookupMessage)) {
-            DestLookupMessage msg = (DestLookupMessage) object;
-            return DataHelper.eq(getHash(), msg.getHash());
-        }
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/DestReplyMessage.java b/core/java/src/net/i2p/data/i2cp/DestReplyMessage.java
index f4d44a3ae3..ee0f1b0d2f 100644
--- a/core/java/src/net/i2p/data/i2cp/DestReplyMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/DestReplyMessage.java
@@ -92,17 +92,6 @@ public class DestReplyMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof DestReplyMessage)) {
-            DestReplyMessage msg = (DestReplyMessage) object;
-            return DataHelper.eq(getDestination(), msg.getDestination()) &&
-                   DataHelper.eq(getHash(), msg.getHash());
-        }
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/DestroySessionMessage.java b/core/java/src/net/i2p/data/i2cp/DestroySessionMessage.java
index edb07ae416..4a12eb2544 100644
--- a/core/java/src/net/i2p/data/i2cp/DestroySessionMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/DestroySessionMessage.java
@@ -65,23 +65,6 @@ public class DestroySessionMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof DestroySessionMessage)) {
-            DestroySessionMessage msg = (DestroySessionMessage) object;
-            return DataHelper.eq(_sessionId, msg.getSessionId());
-        }
-            
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 7;
-        hash = 11 * hash + (this._sessionId != null ? this._sessionId.hashCode() : 0);
-        return hash;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/DisconnectMessage.java b/core/java/src/net/i2p/data/i2cp/DisconnectMessage.java
index 1931fead2f..2139cf21da 100644
--- a/core/java/src/net/i2p/data/i2cp/DisconnectMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/DisconnectMessage.java
@@ -61,17 +61,6 @@ public class DisconnectMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof DisconnectMessage)) {
-            DisconnectMessage msg = (DisconnectMessage) object;
-            return DataHelper.eq(getReason(), msg.getReason());
-        }
- 
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/GetBandwidthLimitsMessage.java b/core/java/src/net/i2p/data/i2cp/GetBandwidthLimitsMessage.java
index 35f44b5222..865f83f9c0 100644
--- a/core/java/src/net/i2p/data/i2cp/GetBandwidthLimitsMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/GetBandwidthLimitsMessage.java
@@ -35,16 +35,6 @@ public class GetBandwidthLimitsMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof GetBandwidthLimitsMessage)) {
-            return true;
-        }
-        
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/GetDateMessage.java b/core/java/src/net/i2p/data/i2cp/GetDateMessage.java
index b5b8367517..f76aaaf256 100644
--- a/core/java/src/net/i2p/data/i2cp/GetDateMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/GetDateMessage.java
@@ -75,20 +75,6 @@ public class GetDateMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    @Override
-    public int hashCode() {
-        return MESSAGE_TYPE ^ DataHelper.hashCode(_version);
-    }
-
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof GetDateMessage)) {
-            return DataHelper.eq(_version, ((GetDateMessage)object)._version);
-        }
-        
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/MessagePayloadMessage.java b/core/java/src/net/i2p/data/i2cp/MessagePayloadMessage.java
index 5b339c265f..afa22de9d2 100644
--- a/core/java/src/net/i2p/data/i2cp/MessagePayloadMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/MessagePayloadMessage.java
@@ -107,19 +107,6 @@ public class MessagePayloadMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof MessagePayloadMessage)) {
-            MessagePayloadMessage msg = (MessagePayloadMessage) object;
-            return _sessionId == msg.getSessionId()
-                   && _messageId == msg.getMessageId()
-                   && DataHelper.eq(_payload, msg.getPayload());
-        }
-            
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/MessageStatusMessage.java b/core/java/src/net/i2p/data/i2cp/MessageStatusMessage.java
index b3c138b4a7..d9122bd778 100644
--- a/core/java/src/net/i2p/data/i2cp/MessageStatusMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/MessageStatusMessage.java
@@ -36,9 +36,13 @@ public class MessageStatusMessage extends I2CPMessageImpl {
      */
     public final static int STATUS_AVAILABLE = 0;
     public final static int STATUS_SEND_ACCEPTED = 1;
+
     /** unused */
     public final static int STATUS_SEND_BEST_EFFORT_SUCCESS = 2;
-    /** unused */
+
+    /**
+     *  A probable failure, but we don't know for sure.
+     */
     public final static int STATUS_SEND_BEST_EFFORT_FAILURE = 3;
 
     /**
@@ -223,10 +227,16 @@ public class MessageStatusMessage extends I2CPMessageImpl {
                status == STATUS_AVAILABLE;
     }
 
+    /**
+     *  This is the router's ID for the message
+     */
     public long getMessageId() {
         return _messageId;
     }
 
+    /**
+     *  This is the router's ID for the message
+     */
     public void setMessageId(long id) {
         _messageId = id;
     }
@@ -239,10 +249,16 @@ public class MessageStatusMessage extends I2CPMessageImpl {
         _size = size;
     }
 
+    /**
+     *  This is the client's ID for the message
+     */
     public long getNonce() {
         return _nonce;
     }
 
+    /**
+     *  This is the client's ID for the message
+     */
     public void setNonce(long nonce) {
         _nonce = nonce;
     }
@@ -312,19 +328,6 @@ public class MessageStatusMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof MessageStatusMessage)) {
-            MessageStatusMessage msg = (MessageStatusMessage) object;
-            return _sessionId == msg.getSessionId()
-                   && _messageId == msg.getMessageId() && _nonce == msg.getNonce()
-                   && _size == msg.getSize() && _status == msg.getStatus();
-        }
-            
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/ReceiveMessageBeginMessage.java b/core/java/src/net/i2p/data/i2cp/ReceiveMessageBeginMessage.java
index 04cd204706..032c1ea8be 100644
--- a/core/java/src/net/i2p/data/i2cp/ReceiveMessageBeginMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/ReceiveMessageBeginMessage.java
@@ -88,18 +88,6 @@ public class ReceiveMessageBeginMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof ReceiveMessageBeginMessage)) {
-            ReceiveMessageBeginMessage msg = (ReceiveMessageBeginMessage) object;
-            return _sessionId == msg.getSessionId()
-                   && _messageId == msg.getMessageId();
-        }
-            
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/ReceiveMessageEndMessage.java b/core/java/src/net/i2p/data/i2cp/ReceiveMessageEndMessage.java
index 028c028b9e..c405b93a30 100644
--- a/core/java/src/net/i2p/data/i2cp/ReceiveMessageEndMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/ReceiveMessageEndMessage.java
@@ -72,18 +72,6 @@ public class ReceiveMessageEndMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof ReceiveMessageEndMessage)) {
-            ReceiveMessageEndMessage msg = (ReceiveMessageEndMessage) object;
-            return _sessionId == msg.getSessionId()
-                   && _messageId == msg.getMessageId();
-        }
-         
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/ReconfigureSessionMessage.java b/core/java/src/net/i2p/data/i2cp/ReconfigureSessionMessage.java
index 336fb3ed5b..dd6558f39d 100644
--- a/core/java/src/net/i2p/data/i2cp/ReconfigureSessionMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/ReconfigureSessionMessage.java
@@ -76,18 +76,6 @@ public class ReconfigureSessionMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof ReconfigureSessionMessage)) {
-            ReconfigureSessionMessage msg = (ReconfigureSessionMessage) object;
-            return DataHelper.eq(_sessionId, msg.getSessionId())
-                   && DataHelper.eq(_sessionConfig, msg.getSessionConfig());
-        }
-            
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/ReportAbuseMessage.java b/core/java/src/net/i2p/data/i2cp/ReportAbuseMessage.java
index 137d364c77..60870621b7 100644
--- a/core/java/src/net/i2p/data/i2cp/ReportAbuseMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/ReportAbuseMessage.java
@@ -104,18 +104,6 @@ public class ReportAbuseMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof ReportAbuseMessage)) {
-            ReportAbuseMessage msg = (ReportAbuseMessage) object;
-            return DataHelper.eq(getSessionId(), msg.getSessionId()) && DataHelper.eq(getSeverity(), msg.getSeverity())
-                   && DataHelper.eq(getReason(), msg.getReason()) && DataHelper.eq(getMessageId(), msg.getMessageId());
-        }
-         
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/RequestLeaseSetMessage.java b/core/java/src/net/i2p/data/i2cp/RequestLeaseSetMessage.java
index 6bf9859b4c..87a819e4f4 100644
--- a/core/java/src/net/i2p/data/i2cp/RequestLeaseSetMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/RequestLeaseSetMessage.java
@@ -124,22 +124,6 @@ public class RequestLeaseSetMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof RequestLeaseSetMessage)) {
-            RequestLeaseSetMessage msg = (RequestLeaseSetMessage) object;
-            if (getEndpoints() != msg.getEndpoints()) return false;
-            for (int i = 0; i < getEndpoints(); i++) {
-                if (!DataHelper.eq(getRouter(i), msg.getRouter(i)) || !DataHelper.eq(getTunnelId(i), msg.getTunnelId(i)))
-                    return false;
-            }
-            return DataHelper.eq(getSessionId(), msg.getSessionId()) && DataHelper.eq(getEndDate(), msg.getEndDate());
-        }
-         
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/SendMessageExpiresMessage.java b/core/java/src/net/i2p/data/i2cp/SendMessageExpiresMessage.java
index b60cce67fa..1a4a5b6120 100644
--- a/core/java/src/net/i2p/data/i2cp/SendMessageExpiresMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/SendMessageExpiresMessage.java
@@ -133,18 +133,6 @@ public class SendMessageExpiresMessage extends SendMessageMessage {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof SendMessageExpiresMessage)) {
-            SendMessageExpiresMessage msg = (SendMessageExpiresMessage) object;
-            return super.equals(object)
-                   && _daf.equals(msg._daf);
-        }
-         
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/SendMessageMessage.java b/core/java/src/net/i2p/data/i2cp/SendMessageMessage.java
index d59fda03ee..c067bdc610 100644
--- a/core/java/src/net/i2p/data/i2cp/SendMessageMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/SendMessageMessage.java
@@ -141,19 +141,6 @@ public class SendMessageMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode() method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof SendMessageMessage)) {
-            SendMessageMessage msg = (SendMessageMessage) object;
-            return DataHelper.eq(getSessionId(), msg.getSessionId())
-                   && DataHelper.eq(getDestination(), msg.getDestination()) && (getNonce() == msg.getNonce())
-                   && DataHelper.eq(getPayload(), msg.getPayload());
-        }
-         
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/SessionStatusMessage.java b/core/java/src/net/i2p/data/i2cp/SessionStatusMessage.java
index b26ec05f0b..8ac95d825c 100644
--- a/core/java/src/net/i2p/data/i2cp/SessionStatusMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/SessionStatusMessage.java
@@ -81,17 +81,6 @@ public class SessionStatusMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    /* FIXME missing hashCode method FIXME */
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof SessionStatusMessage)) {
-            SessionStatusMessage msg = (SessionStatusMessage) object;
-            return DataHelper.eq(getSessionId(), msg.getSessionId()) && _status == msg.getStatus();
-        }
-         
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
diff --git a/core/java/src/net/i2p/data/i2cp/SetDateMessage.java b/core/java/src/net/i2p/data/i2cp/SetDateMessage.java
index 517992d394..0fef292623 100644
--- a/core/java/src/net/i2p/data/i2cp/SetDateMessage.java
+++ b/core/java/src/net/i2p/data/i2cp/SetDateMessage.java
@@ -89,21 +89,6 @@ public class SetDateMessage extends I2CPMessageImpl {
         return MESSAGE_TYPE;
     }
 
-    @Override
-    public int hashCode() {
-        return MESSAGE_TYPE ^ DataHelper.hashCode(_version) ^ DataHelper.hashCode(_date);
-    }
-
-    @Override
-    public boolean equals(Object object) {
-        if ((object != null) && (object instanceof SetDateMessage)) {
-            SetDateMessage msg = (SetDateMessage) object;
-            return DataHelper.eq(_date, msg._date) && DataHelper.eq(_version, msg._version);
-        }
-            
-        return false;
-    }
-
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();
-- 
GitLab