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

Reply via email to