I also think 'chained' better covers the intent. 'map' normally isn't
a read/write transformation.

Emond

On Thu, Nov 17, 2016 at 12:38 AM, Martin Grigorov <[email protected]> wrote:
> +1 for #chained() .
>
> Martin Grigorov
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
>
> On Tue, Nov 15, 2016 at 10:07 PM, Sven Meier <[email protected]> wrote:
>
>> Hi,
>>
>> >We could rename the methods taking an IModel as first parameter to
>> >"chained" or "from".
>>
>> or "map":
>>
>>     LambdaModel.map(IModel, SerializableFunction, SerializableBiConsumer)
>>
>>     LambdaModel.map(IModel, SerializableFunction)
>>
>> Sven
>>
>>
>>
>> Am 15.11.2016 um 20:52 schrieb Emond Papegaaij:
>>
>>> IModel.map(Function) indeed is functionally equivalent to
>>> LambdaModel.of(IModel, Function), but its memory footprint is
>>> significantly larger (120 vs 80 bytes). Also, there's no equivalent
>>> method for of(IModel, Function, BiConsumer). Naturally, we can add the
>>> corresponding method, but it will remain much less efficient. These
>>> chained models require an additional object.
>>>
>>> We've ran into similar problems many times at Topicus. Javac still is
>>> very buggy when it comes to lambda type inference. IMHO the best
>>> solution is to simply rename the methods to prevent the collisions.
>>>
>>> We could rename the methods taking an IModel as first parameter to
>>> "chained" or "from". Another solution would be a builder API, but I
>>> doubt that would make the code more readable.
>>>
>>> Best regards,
>>> Emond
>>>
>>> On Tue, Nov 15, 2016 at 8:06 PM, Martin Grigorov <[email protected]>
>>> wrote:
>>>
>>>> On Tue, Nov 15, 2016 at 2:51 PM, Emond Papegaaij <
>>>> [email protected]
>>>>
>>>>> wrote:
>>>>> It seems I've hit a bug in javac:
>>>>> LambdaModelTest[46,61] reference to of is ambiguous:
>>>>> <T>   of(SerializableSupplier<T>, SerializableConsumer<T>)
>>>>> <X,T> of(IModel<X>,               SerializableFunction<X,T>)
>>>>>
>>>>> This clearly is wrong:
>>>>> IModel<String> personNameModel = LambdaModel.of(
>>>>>      () -> person.getName(),
>>>>>      (name) -> person.setName(name));
>>>>>
>>>>> The first parameter could match both SerializableSupplier<T> and
>>>>> IModel<X>,
>>>>> but the second parameter only matches SerializableConsumer<T>. Eclipse
>>>>> has
>>>>> no
>>>>> problem with this and compiles the code just fine.
>>>>>
>>>>> I guess it confuses it with SerializableFunction<String, Void>.
>>>> Although, I
>>>> agree it should return null to actually match.
>>>>
>>>> IMO we don't
>>>> need org.apache.wicket.model.LambdaModel#of(org.apache.wicket.
>>>> model.IModel<X>,
>>>> org.danekja.java.util.function.serializable.SerializableFunction<X,T>)
>>>> It gives the same
>>>> as org.apache.wicket.model.IModel#map(SerializableFunction<? super T, R>
>>>> mapper).
>>>>
>>>>
>>>> This now surfaces due to the change in the constructor. This testcase
>>>>> used
>>>>> to
>>>>> call new LambdaModel(...), which had the same signature as the first
>>>>> 'of'.
>>>>> I
>>>>> had to change it to use the overloaded factory method.
>>>>>
>>>>> I see two possible solutions:
>>>>>   - Change the name of the factory methodes, so they are no longer
>>>>> overloaded
>>>>> (suggestions for the names are welcome)
>>>>>   - Add a cast to the calling code to circumvent the bug.
>>>>>
>>>>> IMHO both are ugly.
>>>>>
>>>>> Best regards,
>>>>> Emond
>>>>>
>>>>> On dinsdag 15 november 2016 13:36:56 CET [email protected] wrote:
>>>>>
>>>>>> The Buildbot has detected a new failure on builder wicket-master while
>>>>>> building wicket. Full details are available at:
>>>>>> https://ci.apache.org/builders/wicket-master/builds/550
>>>>>>
>>>>>> Buildbot URL: https://ci.apache.org/
>>>>>>
>>>>>> Buildslave for this Build: bb_slave1_ubuntu
>>>>>>
>>>>>> Build Reason: The SingleBranchScheduler scheduler named
>>>>>> 'on-wicket-master-commit' triggered this build Build Source Stamp:
>>>>>>
>>>>> [branch
>>>>>
>>>>>> master] b40e9e1cd9ad7a9ffc63ab6c329c8d9c8b78b924 Blamelist: Emond
>>>>>>
>>>>> Papegaaij
>>>>>
>>>>>> <[email protected]>
>>>>>>
>>>>>> BUILD FAILED: failed compile
>>>>>>
>>>>>> Sincerely,
>>>>>>   -The Buildbot
>>>>>>
>>>>>
>>>>>
>>>>>
>>

Reply via email to