RFR 8071479: Stream and lamdification improvements to j.u.regex.Matcher
Stuart Marks
stuart.marks at oracle.com
Fri Feb 13 00:20:53 UTC 2015
On 2/12/15 3:15 AM, Paul Sandoz wrote:
> http://cr.openjdk.java.net/~psandoz/jdk9/JDK-8071479--Matcher-stream-results/webrev/
OK, overall looks pretty good. Two minor comments on Matcher.java:
1202 if (expectedCount >= 0 && expectedCount != matchOrResetCount)
1203 return true;
This is a concurrent modification check, so other cases that test this condition
will throw CME. Should this also throw CME or should it indeed return true?
1224 // Perform a first find if required
1225 if (s < 1 && !find())
1226 return;
If I understand this correctly, the state field can have values -1, 0, or 1; and
's' is a local variable that's initialized from the state field.
I was confused by this code because it ends up calling find() when s == 0, which
means "not found" ... so why is find() being called again in this case?
However, the s == 0 case is dispensed with earlier, so it actually cannot occur
here. I think it would be clearer, and have the same behavior, if the condition
were changed to
if (s < 0 && !find())
s'marks
>
>
>>>>> Regarding the disparity between MatchResult and Matcher. I think that would require a new sub-interface of MatchResult from which Matcher extends from and returns. If we think it important we should do that for 9 otherwise we will be stuck for the stream-based methods.
>>>>
>>>> Why do you think we need a new sub-interface? Wouldn't it be sufficient to add default methods?
>>>
>>> What would the defaults do? Throwing an exception seems a poor solution to me.
>>>
>>> My guess it will be possible to evolve Matcher in binary and source compatible way to use the sub-type.
>>
>> OK, I filed an RFE to cover this, then immediately closed it as a duplicate :-) because I failed to search for the existing RFE that covers this:
>>
>> https://bugs.openjdk.java.net/browse/JDK-8065554
>>
>> Either we add some default methods that throw exceptions (gross) or we add a sub-interface (also gross). It might be a matter of taste, or bike shed painting.
>
> Or a matter of how much the grossness is contained. In that respect the latter is more self-contained, the latter spreads out to all independent consumers of MatchResult.
>
> Paul.
>
More information about the core-libs-dev
mailing list