On Thu, Nov 17, 2016 at 12:13 PM, Martijn Dashorst < martijn.dasho...@gmail.com> wrote:
> We could also opt to rename map(...) to to(...) > > Model.of(account).to(Account::getPerson).to(Person:: > getLastName).to(String::toUppercase) > #map() is more widely used in JVM langs > > Martijn > > > On Thu, Nov 17, 2016 at 11:09 AM, Emond Papegaaij > <emond.papega...@topicus.nl> wrote: > > 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 <mgrigo...@apache.org> > 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 <s...@meiers.net> 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 < > mgrigo...@apache.org> > >>>> wrote: > >>>> > >>>>> On Tue, Nov 15, 2016 at 2:51 PM, Emond Papegaaij < > >>>>> emond.papega...@topicus.nl > >>>>> > >>>>>> 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 build...@apache.org 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 > >>>>>> > >>>>>>> <papega...@apache.org> > >>>>>>> > >>>>>>> BUILD FAILED: failed compile > >>>>>>> > >>>>>>> Sincerely, > >>>>>>> -The Buildbot > >>>>>>> > >>>>>> > >>>>>> > >>>>>> > >>> > > > > -- > Become a Wicket expert, learn from the best: http://wicketinaction.com >