The wildcard bounds are checked at compile time though I thought. Plus, despite the type erasure, there's still a bit of info available through reflection, so it's not entirely lost.
On 15 February 2016 at 16:23, Remko Popma <remko.po...@gmail.com> wrote: > The wildcard bounds are no help since they get erased, so we cannot have > separate methods for Supplier<? extends Message> and Supplier<?>. (This is > why I originally introduced MessageSupplier.) > > I don't mind deprecating MessageSupplier, but the point is that in the > implementation of these logging methods we need to be very careful: > > Generally, if log(Supplier<?>) supplies an object of type Message it > doesn't need to be wrapped in an ObjectMessage, where if any other Object > is supplied it _does_ need to be wrapped. > > Similarly for where the Supplier supplies param values: if the supplied > value is a Message you need to _unwrap_ it by calling getFormattedString() > on it. The current impl of traceEntry/Exit does not do this correctly, I > reported this as a bug in LOG4J2-1255. > > Sent from my iPhone > > On 2016/02/16, at 2:21, Gary Gregory <garydgreg...@gmail.com> wrote: > > On Mon, Feb 15, 2016 at 9:17 AM, Gary Gregory <garydgreg...@gmail.com> > wrote: > >> On Mon, Feb 15, 2016 at 9:08 AM, Matt Sicker <boa...@gmail.com> wrote: >> >>> Sounds good. Remko was mentioning how they could be combined by checking >>> if get() returns an instanceof Message, but using the wildcard bounds like >>> you show sounds like a better way (where possible). >>> >> >> Wasn't Remko talking about a different case? >> >> Right now we have: >> >> traceExit(MessageSupplier, R) >> traceExit(Supplier<? extends Message>, R) >> >> Both "MessageSupplier.get()" and "Supplier<? extends Message>" *do* >> return a Message so I think we can remove traceExit(Supplier<? extends >> Message>, R) (which is not even used/tested ATM). >> > > Ah, but we do not have a traceExit(Supplier<R>) > > I'll add that completeness, and also traceExit(EntryMessage). My use cases > only call for traceExit(EntryMessage, R) and traceExit(EntryMessage). > > Gary > > >> Gary >> >>> >>> On 15 February 2016 at 11:06, Gary Gregory <garydgreg...@gmail.com> >>> wrote: >>> >>>> Since 2.4 we have: >>>> >>>> public interface MessageSupplier { >>>> >>>> /** >>>> * Gets a Message. >>>> * >>>> * @return a Message >>>> */ >>>> Message get(); >>>> } >>>> >>>> and >>>> >>>> public interface Supplier<T> { >>>> >>>> /** >>>> * Gets a value. >>>> * >>>> * @return a value >>>> */ >>>> T get(); >>>> } >>>> >>>> Which smells fishy to me. Instead I propose: >>>> >>>> public interface MessageSupplier extends Supplier<Message> { >>>> // empty >>>> } >>>> >>>> Whether or not we do the above, we can replace: >>>> >>>> traceExit(R, Supplier<? extends Message>) >>>> >>>> with: >>>> >>>> traceExit(R, MessageSupplier) >>>> >>>> which we already have. >>>> >>>> A test search shows the above as the only instance of "Supplier<? >>>> extends Message>" in our Java files. >>>> >>>> Thoughts? >>>> >>>> -- >>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>> Java Persistence with Hibernate, Second Edition >>>> <http://www.manning.com/bauer3/> >>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>> Spring Batch in Action <http://www.manning.com/templier/> >>>> Blog: http://garygregory.wordpress.com >>>> Home: http://garygregory.com/ >>>> Tweet! http://twitter.com/GaryGregory >>>> >>> >>> >>> >>> -- >>> Matt Sicker <boa...@gmail.com> >>> >> >> >> >> -- >> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> Java Persistence with Hibernate, Second Edition >> <http://www.manning.com/bauer3/> >> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >> Spring Batch in Action <http://www.manning.com/templier/> >> Blog: http://garygregory.wordpress.com >> Home: http://garygregory.com/ >> Tweet! http://twitter.com/GaryGregory >> > > > > -- > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > Java Persistence with Hibernate, Second Edition > <http://www.manning.com/bauer3/> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > Spring Batch in Action <http://www.manning.com/templier/> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > > -- Matt Sicker <boa...@gmail.com>