RFR: JDK-8293776 : Adds CSS 4 and 8 digits hex coded Color [v4]

ScientificWare duke at openjdk.org
Sun Sep 25 00:31:28 UTC 2022


On Sat, 24 Sep 2022 12:29:18 GMT, ScientificWare <duke at openjdk.org> wrote:

>> src/java.desktop/share/classes/javax/swing/text/html/CSS.java line 1404:
>> 
>>> 1402:         } else if (n != 8 || !hex.matcher(digits).matches()) {
>>> 1403:             return null;
>>> 1404:         }
>> 
>> Using `charAt` avoids creating temporary strings of length `1`.
>> 
>> Also, using the `%[argument_index$]conversion` format specifier form allows halving the lengths of the vararg arrays.
>> Suggestion:
>> 
>>         if (n == 3 && hex.matcher(digits).matches()) {
>>             final char r = digits.charAt(0);
>>             final char g = digits.charAt(1);
>>             final char b = digits.charAt(2);
>>             digits = String.format("%1$s%1$s%2$s%2$s%3$s%3$sff", r, g, b);
>>         } else if (n == 4 && hex.matcher(digits).matches()) {
>>             final char r = digits.charAt(0);
>>             final char g = digits.charAt(1);
>>             final char b = digits.charAt(2);
>>             final char a = digits.charAt(3);
>>             digits = String.format("%1$s%1$s%2$s%2$s%3$s%3$s%4$s%4$s", r, g, b, a);
>>         } else if (n == 6 && hex.matcher(digits).matches()) {
>>             digits += "ff";
>>         } else if (n != 8 || !hex.matcher(digits).matches()) {
>>             return null;
>>         }
>
> @ExE-Boss After a quick performance test, I note that `%1$s%1$s%2$s%2$s%3$s%3$s%4$s%4$s` usage multiplies time execution at least by 4.
> 
> I'm going to test if there is other solutions than %n$s or %s. First of all by using a simple concatenation.

If allowed `digits = "" + r + r + g + g + b + b + a + a` would be a good candidate.

-------------

PR: https://git.openjdk.org/jdk/pull/10317



More information about the client-libs-dev mailing list