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 > > > > >