Eliminate shift variable
[mdsal.git] / model / ietf / ietf-type-util / src / main / java / org / opendaylight / mdsal / model / ietf / util / Ipv6Utils.java
index 5f2757083bddcb05070018d14b2199d5803ee157..c5e94e829257385af5b9785dd6a64aaa36db9a21 100644 (file)
@@ -7,10 +7,11 @@
  */
 package org.opendaylight.mdsal.model.ietf.util;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Verify;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Verify.verify;
+
 import java.util.Arrays;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 
 /**
  * IPv6 address parsing for ietf-inet-types ipv6-address and ipv6-prefix. This is an internal implementation
@@ -48,91 +49,96 @@ final class Ipv6Utils {
     private static final int INT16SZ = Short.BYTES;
 
     private Ipv6Utils() {
-        throw new UnsupportedOperationException();
+
     }
 
     /**
-     * Convert Ipv6Address object to a valid Canonical v6 address in byte format
+     * Convert Ipv6Address object to a valid Canonical v6 address in byte format.
      *
      * @param bytes Byte array for output
      * @param str String representation
      * @param strLimit String offset which should not be processed
      * @throws NullPointerException if ipv6address is null
      */
-    static void fillIpv6Bytes(final @Nonnull byte[] bytes, final String str, final int strLimit) {
-       // Leading :: requires some special handling.
-       int i = 0;
-       if (str.charAt(i) == ':') {
-           // Note ++i side-effect in check
-           Preconditions.checkArgument(str.charAt(++i) == ':', "Invalid v6 address '%s'", str);
-       }
+    @SuppressWarnings("checkstyle:localVariableName")
+    static void fillIpv6Bytes(final byte @NonNull[] bytes, final String str, final int strLimit) {
+        // Leading :: requires some special handling.
+        int i = 0;
+        if (str.charAt(i) == ':') {
+            // Note ++i side-effect in check
+            checkArgument(str.charAt(++i) == ':', "Invalid v6 address '%s'", str);
+        }
 
-       boolean haveVal = false;
-       int val = 0;
-       int colonp = -1;
-       int j = 0;
-       int curtok = i;
-       while (i < strLimit) {
-           final char ch = str.charAt(i++);
+        boolean haveVal = false;
+        int val = 0;
+        int colonp = -1;
+        int j = 0;
+        int curtok = i;
+        while (i < strLimit) {
+            final char ch = str.charAt(i++);
 
-           // v6 separator
-           if (ch == ':') {
-               curtok = i;
-               if (haveVal) {
-                   // removed overrun check - the regexp checks for valid data
-                   bytes[j++] = (byte) ((val >>> 8) & 0xff);
-                   bytes[j++] = (byte) (val & 0xff);
-                   haveVal = false;
-                   val = 0;
-               } else {
-                   // no need to check separator position validity - regexp does that
-                   colonp = j;
-               }
+            // v6 separator
+            if (ch == ':') {
+                curtok = i;
+                if (haveVal) {
+                    // removed overrun check - the regexp checks for valid data
+                    bytes[j++] = (byte) (val >>> 8 & 0xff);
+                    bytes[j++] = (byte) (val & 0xff);
+                    haveVal = false;
+                    val = 0;
+                } else {
+                    // no need to check separator position validity - regexp does that
+                    colonp = j;
+                }
 
-               continue;
-           }
+                continue;
+            }
 
-           // frankenstein - v4 attached to v6, mixed notation
-           if (ch == '.' && ((j + INADDR4SZ) <= INADDR6SZ)) {
-               /*
-                * This has passed the regexp so it is fairly safe to parse it
-                * straight away. Use the Ipv4Utils for that.
-                */
-               Ipv4Utils.fillIpv4Bytes(bytes, j, str, curtok, strLimit);
-               j += INADDR4SZ;
-               haveVal = false;
-               break;
-           }
+            // frankenstein - v4 attached to v6, mixed notation
+            if (ch == '.' && j + INADDR4SZ <= INADDR6SZ) {
+                /*
+                 * This has passed the regexp so it is fairly safe to parse it
+                 * straight away. Use the Ipv4Utils for that.
+                 */
+                Ipv4Utils.fillIpv4Bytes(bytes, j, str, curtok, strLimit);
+                j += INADDR4SZ;
+                haveVal = false;
+                break;
+            }
 
-           /*
-            * Business as usual - ipv6 address digit.
-            * We can remove all checks from the original BSD code because
-            * the regexp has already verified that we are not being fed
-            * anything bigger than 0xffff between the separators.
-            */
-           final int chval = AbstractIetfYangUtil.hexValue(ch);
-           val = (val << 4) | chval;
-           haveVal = true;
-       }
+            /*
+             * Business as usual - ipv6 address digit.
+             * We can remove all checks from the original BSD code because
+             * the regexp has already verified that we are not being fed
+             * anything bigger than 0xffff between the separators.
+             */
+            final int chval = AbstractIetfYangUtil.hexValue(ch);
+            val = val << 4 | chval;
+            haveVal = true;
+        }
 
-       if (haveVal) {
-           Verify.verify(j + INT16SZ <= INADDR6SZ, "Overrun in parsing of '%s', should not occur", str);
-           bytes[j++] = (byte) ((val >> 8) & 0xff);
-           bytes[j++] = (byte) (val & 0xff);
-       }
+        if (haveVal) {
+            verifySize(j + INT16SZ <= INADDR6SZ, str);
+            bytes[j++] = (byte) (val >> 8 & 0xff);
+            bytes[j++] = (byte) (val & 0xff);
+        }
 
-       if (colonp != -1) {
-           Verify.verify(j != INADDR6SZ, "Overrun in parsing of '%s', should not occur", str);
-           expandZeros(bytes, colonp, j);
-       } else {
-           Verify.verify(j == INADDR6SZ, "Overrun in parsing of '%s', should not occur", str);
-       }
-   }
+        if (colonp != -1) {
+            verifySize(j != INADDR6SZ, str);
+            expandZeros(bytes, colonp, j);
+        } else {
+            verifySize(j == INADDR6SZ, str);
+        }
+    }
+
+    private static void verifySize(final boolean expression, final String str) {
+        verify(expression, "Overrun in parsing of '%s', should not occur", str);
+    }
 
-   private static void expandZeros(final byte[] bytes, final int where, final int filledBytes) {
-       final int tailLength = filledBytes - where;
-       final int tailOffset = INADDR6SZ - tailLength;
-       System.arraycopy(bytes, where, bytes, tailOffset, tailLength);
-       Arrays.fill(bytes, where, tailOffset, (byte)0);
+    private static void expandZeros(final byte[] bytes, final int where, final int filledBytes) {
+        final int tailLength = filledBytes - where;
+        final int tailOffset = INADDR6SZ - tailLength;
+        System.arraycopy(bytes, where, bytes, tailOffset, tailLength);
+        Arrays.fill(bytes, where, tailOffset, (byte)0);
     }
 }