CPD Results

The following document contains the results of PMD's CPD 7.14.0.

Duplications

File Line
org/forgerock/util/encode/Base64.java 336
org/forgerock/util/encode/Base64.java 414
while (eIx > 0 && IA[sArr[eIx] & 0xff] < 0) {
            eIx--;
        }

        // get the padding count (=) (0, 1 or 2)
        final int pad = sArr[eIx] == '=' ? sArr[eIx - 1] == '=' ? 2 : 1 : 0; // Count '=' at end.
        final int cCnt = eIx - sIx + 1; // Content count including possible separators
        final int sepCnt = sLen > 76 ? (sArr[76] == '\r' ? cCnt / 78 : 0) << 1 : 0;

        final int len = ((cCnt - sepCnt) * 6 >> 3) - pad; // The number of decoded bytes
        final byte[] dArr = new byte[len]; // Preallocate byte[] of exact length

        // Decode all but the last 0 - 2 bytes.
        int d = 0;
        for (int cc = 0, eLen = len / 3 * 3; d < eLen;) {
            // Assemble three bytes into an int from four "valid" characters.
            final int i =
                    IA[sArr[sIx++]] << 18 | IA[sArr[sIx++]] << 12 | IA[sArr[sIx++]] << 6
                            | IA[sArr[sIx++]];

            // Add the bytes
            dArr[d++] = (byte) (i >> 16);
            dArr[d++] = (byte) (i >> 8);
            dArr[d++] = (byte) i;

            // If line separator, jump over it.
            if (sepCnt > 0 && ++cc == 19) {
                sIx += 2;
                cc = 0;
            }
        }

        if (d < len) {
            // Decode last 1-3 bytes (incl '=') into 1-3 bytes
            int i = 0;
            for (int j = 0; sIx <= eIx - pad; j++) {
                i |= IA[sArr[sIx++]] << 18 - j * 6;
            }

            for (int r = 16; d < len; r -= 8) {
                dArr[d++] = (byte) (i >> r);
            }
        }

        return dArr;
    }

    /**
     * Decodes a BASE64 encoded char array that is known to be resonably well
     * formatted. The method is about twice as fast as {@link #decode(char[])}.
     * The preconditions are:<br>
     * + The array must have a line length of 76 chars OR no line separators at
     * all (one line).<br>
     * + Line separator must be "\r\n", as specified in RFC 2045 + The array
     * must not contain illegal characters within the encoded string<br>
     * + The array CAN have illegal characters at the beginning and end, those
     * will be dealt with appropriately.<br>
     *
     * @param sArr
     *            The source array. Length 0 will return an empty array.
     *            <code>null</code> will throw an exception.
     * @return The decoded array of bytes. May be of length 0.
     */
    public static byte[] decodeFast(final char[] sArr) {
File Line
org/forgerock/util/promise/PromiseImpl.java 364
org/forgerock/util/promise/Promises.java 164
public <EOUT extends Exception> Promise<V, EOUT> thenCatch(final Function<? super E, V, EOUT> onException) {
        return then(Promises.<V, EOUT>resultIdempotentFunction(), onException);
    }

    @Override
    public Promise<V, E> thenCatchRuntimeException(
            Function<? super RuntimeException, V, E> onRuntimeException) {
        return then(Promises.<V, E>resultIdempotentFunction(), Promises.<V, E>exceptionIdempotentFunction(),
                onRuntimeException);
    }

    @Override
    public final <VOUT, EOUT extends Exception> Promise<VOUT, EOUT> then(
            final Function<? super V, VOUT, EOUT> onResult, final Function<? super E, VOUT, EOUT> onException) {
        return then(onResult, onException, Promises.<VOUT, EOUT>runtimeExceptionIdempotentFunction());
    }

    @Override
    @SuppressWarnings("unchecked")
    public final <VOUT, EOUT extends Exception> Promise<VOUT, EOUT> then(
            final Function<? super V, VOUT, EOUT> onResult, final Function<? super E, VOUT, EOUT> onException,
            final Function<? super RuntimeException, VOUT, EOUT> onRuntimeException) {
File Line
org/forgerock/util/promise/PromiseImpl.java 458
org/forgerock/util/promise/Promises.java 233
public final Promise<V, E> thenCatchRuntimeExceptionAsync(
            AsyncFunction<? super RuntimeException, V, E> onRuntimeException) {
        return thenAsync(Promises.<V, E>resultIdempotentAsyncFunction(),
                Promises.<V, E>exceptionIdempotentAsyncFunction(), onRuntimeException);
    }

    @Override
    public final <VOUT, EOUT extends Exception> Promise<VOUT, EOUT> thenAsync(
            final AsyncFunction<? super V, VOUT, EOUT> onResult,
            final AsyncFunction<? super E, VOUT, EOUT> onException) {
        return thenAsync(onResult, onException, Promises.<VOUT, EOUT>runtimeExceptionIdempotentAsyncFunction());
    }

    @Override