[bv-dev] Node#isInIterable() for arrays

Gunnar Morling gunnar at hibernate.org
Fri Jun 16 06:48:35 EDT 2017


2017-06-16 11:35 GMT+02:00 Emmanuel Bernard <emmanuel at hibernate.org>:
> I looked at the spec and especially with the method inContainer
>
> Is the pattern supposed to always be inContainer(…).inIterable()?
> I suppose no because the spec did not have inContainer before.

inIterable() could also follow to addContainerElementNode().

> So what does it mean, when inIterable() is used, then a inContainer call is implied?

It is recommended to not call inIterable() without calling
inContainer() or addContainerElementNode() before, as otherwise
containerClass and typeArgumentIndex will be missing from the
resulting path node.

>
> Back to the core subject, I can’t quite remember why I added Map to the list of isIterable() elements.
> I suppose that if we follow that path, any container that returns multiple elements should return isIterable == true (i.e. containers that call iterableValue, indexedValue or keyedValue.
> So I’d add arrays and any multi-valued container to the definition of isIterable()

Ok, cool. I'll add arrays then.

For other containers, I'd add this when adding more built-in
containers to the spec in the future.

>
> Emmanuel
>
>> On 15 Jun 2017, at 13:16, Gunnar Morling <gunnar at hibernate.org> wrote:
>>
>> Hi all,
>>
>> On our road to the Proposed Final Draft (more on that in a separate
>> mail a bit), we've almost closed out all the relevant issues.
>>
>> One remaining issue is https://hibernate.atlassian.net/browse/BVAL-552
>> which is about inconsistent behaviour of Node#isInIterable() when it
>> comes to arrays. The spec says this:
>>
>>    "isInIterable() returns true if the node represents an object
>> contained in an Iterable or in a Map, false otherwise."
>>
>> Whereas the TCK has a test case which expects true to be returned for
>> arrays, too [1]. Naturally, that's how the RI (and any other
>> TCK-compliant implementation) implements this.
>>
>> Now my question is, should we simply change the spec and say
>>
>>        "isInIterable() returns true if the node represents an object
>> contained in an Iterable, Map or an array, false otherwise."
>>
>> Given that maps are considered already, the method has to be about
>> "things that are iterable" and not java.lang.Iterable (which j.u.Map
>> doesn't extend). So considering arrays there seems consistent.
>>
>> Or do you, Emmanuel, remember a reason for the current specification
>> and it's actually a bug in the TCK?
>>
>> Thanks,
>>
>> --Gunnar
>>
>> [1] https://github.com/beanvalidation/beanvalidation-tck/blob/master/tests/src/main/java/org/hibernate/beanvalidation/tck/tests/validation/PropertyPathTest.java#L196
>> _______________________________________________
>> beanvalidation-dev mailing list
>> beanvalidation-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/beanvalidation-dev
>
>
> _______________________________________________
> beanvalidation-dev mailing list
> beanvalidation-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/beanvalidation-dev



More information about the beanvalidation-dev mailing list