JDK-8215490 : Remove String::align
  • Type: CSR
  • Component: core-libs
  • Sub-Component: java.lang
  • Priority: P2
  • Status: Closed
  • Resolution: Approved
  • Fix Versions: 12
  • Submitted: 2018-12-17
  • Updated: 2019-01-09
  • Resolved: 2019-01-09
Related Reports
CSR :  
Relates :  
Relates :  
Description
 Summary
-------
String::align is no longer required with the withdrawal of JEP 326: Raw String Literals (Preview).

Problem
------
String::align was created specifically for incidental space removal in Raw String Literals.

Solution
--------
Remove String::align

Specification
-------------
```

    diff -r 4c539cb11633 src/java.base/share/classes/java/lang/String.java
    --- a/src/java.base/share/classes/java/lang/String.java	Wed Dec 19 18:21:38 2018 +0000
    +++ b/src/java.base/share/classes/java/lang/String.java	Wed Dec 19 15:17:53 2018 -0400
    @@ -2869,116 +2869,6 @@
         }
 
         /**
    -     * Removes vertical and horizontal white space margins from around the
    -     * essential body of a multi-line string, while preserving relative
    -     * indentation.
    -     * <p>
    -     * This string is first conceptually separated into lines as if by
    -     * {@link String#lines()}.
    -     * <p>
    -     * Then, the <i>minimum indentation</i> (min) is determined as follows. For
    -     * each non-blank line (as defined by {@link String#isBlank()}), the
    -     * leading {@link Character#isWhitespace(int) white space} characters are
    -     * counted. The <i>min</i> value is the smallest of these counts.
    -     * <p>
    -     * For each non-blank line, <i>min</i> leading white space characters are
    -     * removed. Each white space character is treated as a single character. In
    -     * particular, the tab character {@code "\t"} (U+0009) is considered a
    -     * single character; it is not expanded.
    -     * <p>
    -     * Leading and trailing blank lines, if any, are removed. Trailing spaces are
    -     * preserved.
    -     * <p>
    -     * Each line is suffixed with a line feed character {@code "\n"} (U+000A).
    -     * <p>
    -     * Finally, the lines are concatenated into a single string and returned.
    -     *
    -     * @apiNote
    -     * This method's primary purpose is to shift a block of lines as far as
    -     * possible to the left, while preserving relative indentation. Lines
    -     * that were indented the least will thus have no leading white space.
    -     *
    -     * Example:
    -     * <blockquote><pre>
    -     * `
    -     *      This is the first line
    -     *          This is the second line
    -     * `.align();
    -     *
    -     * returns
    -     * This is the first line
    -     *     This is the second line
    -     * </pre></blockquote>
    -     *
    -     * @return string with margins removed and line terminators normalized
    -     *
    -     * @see String#lines()
    -     * @see String#isBlank()
    -     * @see String#indent(int)
    -     * @see Character#isWhitespace(int)
    -     *
    -     * @since 12
    -     */
    -    public String align() {
    -        return align(0);
    -    }
    -
    -    /**
    -     * Removes vertical and horizontal white space margins from around the
    -     * essential body of a multi-line string, while preserving relative
    -     * indentation and with optional indentation adjustment.
    -     * <p>
    -     * Invoking this method is equivalent to:
    -     * <blockquote>
    -     *  {@code this.align().indent(n)}
    -     * </blockquote>
    -     *
    -     * @apiNote
    -     * Examples:
    -     * <blockquote><pre>
    -     * `
    -     *      This is the first line
    -     *          This is the second line
    -     * `.align(0);
    -     *
    -     * returns
    -     * This is the first line
    -     *     This is the second line
    -     *
    -     *
    -     * `
    -     *    This is the first line
    -     *       This is the second line
    -     * `.align(4);
    -     * returns
    -     *     This is the first line
    -     *         This is the second line
    -     * </pre></blockquote>
    -     *
    -     * @param n  number of leading white space characters
    -     *           to add or remove
    -     *
    -     * @return string with margins removed, indentation adjusted and
    -     *         line terminators normalized
    -     *
    -     * @see String#align()
    -     *
    -     * @since 12
    -     */
    -    public String align(int n) {
    -        if (isEmpty()) {
    -            return "";
    -        }
    -        int outdent = lines().filter(not(String::isBlank))
    -                             .mapToInt(String::indexOfNonWhitespace)
    -                             .min()
    -                             .orElse(0);
    -        // overflow-conscious code
    -        int indent = n - outdent;
    -        return indent(indent > n ? Integer.MIN_VALUE : indent, true);
    -    }
    -
    -    /**
          * This method allows the application of a function to {@code this}
          * string. The function should expect a single String argument
          * and produce an {@code R} result.

```

Comments
Is String::indent, added alongside String::align, staying? Moving to Approved.
09-01-2019

Moving to Provisional.
20-12-2018