RFR 8071479: Stream and lamdification improvements to j.u.regex.Matcher
Xueming Shen
xueming.shen at oracle.com
Sat Feb 28 03:40:46 UTC 2015
On 2/27/15 3:19 PM, Stuart Marks wrote:
> On 2/27/15 12:40 PM, Xueming Shen wrote:
>> On 02/27/2015 11:21 AM, Xueming Shen wrote:
>>> On 02/27/2015 10:55 AM, Paul Sandoz wrote:
>>>>
>>>> What about a light wright immutable MatchResult? is that possible?
>>>
>>> Should be possible. I can give it try.
>>
>> too repetitive?
>>
>> http://cr.openjdk.java.net/~sherman/regex.stream/src/java.base/share/classes/java/util/regex/Matcher.java.sdiff.html
>>
>
> Not too bad. I know I was surprised to see that Matcher itself is the
> only MatchResult implementation, and that there wasn't a lightweight
> immutable MatchResult separate from Matcher. So I'm glad to see this
> added.
>
> (One thing to think about, not part of this particular change, is
> whether named matching groups could be added to or extend MatchResult.
> Doing that would change the implementation of the lightweight
> MatchResult. See JDK-8065554.)
>
> A few comments on the implementation.
>
> At line 302, end(group) calls the groupCount() method instead of
> returning the captured groupCount local.
>
> The MatchResult anonymous class unavoidably captures a reference to
> 'this', which is the enclosing Matcher instance. I don't think it
> needs that, but it does enable methods like groupCount() on the
> enclosing class to be called inadvertently.
>
> For these reasons the lightweight MatchResult might better be
> refactored to be a (named) static nested class (or even a top-level
> class). You'll have to write a constructor and declare fields instead
> of capturing locals though, but I think this makes it a bit more clear
> as to what's actually going on. For example, you could make all the
> fields final to make it clear that the object really is immutable.
>
> s'marks
Updated to a static private class for the toMatchResult(). Added a
private field MatchResult for the anonymous MatchResult
wrapper.
http://cr.openjdk.java.net/~sherman/regex.stream/src/java.base/share/classes/java/util/regex/Matcher.java.sdiff.html
-Sherman
More information about the core-libs-dev
mailing list