Yeah, I think I found the thread already... by Timo Walther?
On Tue, Aug 18, 2015 at 2:01 PM, Stephan Ewen <se...@apache.org> wrote: > Would have been great. I had high hopes when I saw the trick with the > "constant pool", but this is only to make what Flink does already applicable > to non-serializable lambdas. > > If you want to help us with this, I'll ping you for some support on the > OpenJDK mailing list ;-) > > On Tue, Aug 18, 2015 at 1:59 PM, Kristoffer Sjögren <sto...@gmail.com> > wrote: >> >> I suspected that you already had looked into this, but it was worth a >> try. It would make everything so much easier. >> >> Thanks for the explanation :-) >> >> >> On Tue, Aug 18, 2015 at 1:50 PM, Stephan Ewen <se...@apache.org> wrote: >> > Hi Kristoffer! >> > >> > I looked through the code as well. In fact, Flink currently uses the >> > trick >> > mentioned for Serializable Lambdas in the gist you sent me. >> > >> > This works well for lambdas that return simple types (primitives or >> > classes >> > without generics). The information for the generic parametrization is >> > unfortunately really erased, it is in no signature or anything. >> > >> > Java has the concept of "generic method signatures", which means that a >> > method gets a signature string that includes the generic types. These >> > signatures are generated for regular functions, but OpenJDK and >> > OracleJDK do >> > not generate them for synthetic methods (like lambdas). >> > >> > We tried to submit a patch to OpenJDK to add these generic signatures to >> > lambda methods, but they did not like the fact that we try to figure out >> > the >> > generic types of lambdas. I hope they change their minds at some >> > point... >> > >> > Stephan >> > >> > >> > >> > >> > On Tue, Aug 18, 2015 at 11:46 AM, Aljoscha Krettek <aljos...@apache.org> >> > wrote: >> >> >> >> Unfortunately, this also doesn't work for the same reasons. The generic >> >> types of generic parameters of a lambda are not stored anywhere. >> >> Stephan >> >> mentioned to me that the only possibility right now would be to look at >> >> the >> >> code using something like ASM to find a cast in the code to the >> >> concrete >> >> type of the generic parameter. >> >> >> >> On Tue, 18 Aug 2015 at 11:35 Kristoffer Sjögren <sto...@gmail.com> >> >> wrote: >> >>> >> >>> How about https://github.com/jhalterman/typetools? >> >>> >> >>> On Tue, Aug 18, 2015 at 11:16 AM, Aljoscha Krettek >> >>> <aljos...@apache.org> >> >>> wrote: >> >>> > Hi Kristoffer, >> >>> > I'm afraid not, but maybe Timo has some further information. In this >> >>> > extended example we can see the problem: >> >>> > https://gist.github.com/aljoscha/84cc363d13cf1dfe9364. The output >> >>> > is: >> >>> > >> >>> > Type is: class >> >>> > org.apache.flink.examples.java8.wordcount.TypeTest$Thing >> >>> > class org.apache.flink.examples.java8.wordcount.TypeTest$Thing >> >>> > Type is: class >> >>> > org.apache.flink.examples.java8.wordcount.TypeTest$Thing >> >>> > class org.apache.flink.examples.java8.wordcount.TypeTest$Thing >> >>> > Type is : >> >>> > >> >>> > >> >>> > org.apache.flink.examples.java8.wordcount.TypeTest.org.apache.flink.examples.java8.wordcount.TypeTest$Thing<java.lang.String> >> >>> > class org.apache.flink.examples.java8.wordcount.TypeTest$Thing >> >>> > >> >>> > So with the two lambda calls it does not correctly determine the >> >>> > generic >> >>> > parameter of Thing while it works with the anonymous class. >> >>> > >> >>> > I was exited when I saw the example because we've been trying for so >> >>> > long to >> >>> > get this to work. Maybe we have to wait for java 19 to get this to >> >>> > work. ;-) >> >>> > >> >>> > Thanks a lot for helping, though. :D >> >>> > Aljoscha >> >>> > >> >>> > On Tue, 18 Aug 2015 at 11:01 Kristoffer Sjögren <sto...@gmail.com> >> >>> > wrote: >> >>> >> >> >>> >> Hi >> >>> >> >> >>> >> Potential fix for writing flink jobs using lamdas without Eclipse >> >>> >> JDT? >> >>> >> >> >>> >> https://gist.github.com/aslakhellesoy/3678beba60c109eacbe5 >> >>> >> >> >>> >> Cheers, >> >>> >> -Kristoffer >> > >> > > >