[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[jdt-dev] ECJ bug for inner class method reference deserialization ?
|
Hi,
I search some insight to confirm an issue with ECJ.
I create a minimal use-case (two classes, ~20 lines) here :
https://github.com/igloo-project/issue-lambda-serialization
The issue I encounter is that if I use method reference notation
(ClassName::new) as a Supplier<ClassName>, this lambda
triggers a deserialization issue. If I use an inlined _expression_ -
() -> new ClassName() - it works as expected. This error is
triggered only if code is compiled by Eclipse. The same code,
launched with mvn clean test or mvn clean exec:java
does not trigger an error.
The not-expected stacktrace is :
Exception in thread "main" java.io.IOException: unexpected
exception type
at
java.base/java.io.ObjectStreamClass.throwMiscException(ObjectStreamClass.java:1641)
at
java.base/java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1271)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2153)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1646)
at
java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2412)
at
java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2306)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2144)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1646)
at
java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)
at
java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
at
lambda.MySerializer.serializeAndDeserialize(MySerializer.java:33)
at lambda.MySerializer.main(MySerializer.java:17)
Caused by: java.lang.reflect.InvocationTargetException
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at
java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
java.base/java.lang.invoke.SerializedLambda.readResolve(SerializedLambda.java:237)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at
java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
java.base/java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1265)
... 10 more
Caused by: java.lang.BootstrapMethodError: bootstrap
method initialization exception
at
java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:194)
at
java.base/java.lang.invoke.CallSite.makeSite(CallSite.java:307)
at
java.base/java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:258)
at
java.base/java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:248)
at
lambda.MyOuterClass.$deserializeLambda$(MyOuterClass.java:1)
... 20 more
Caused by: java.lang.invoke.LambdaConversionException:
Incorrect number of parameters for static method
newInvokeSpecial
lambda.MyOuterClass$MyInnerClass.<init>:(MyOuterClass)void;
0 captured parameters, 0 functional interface method
parameters, 1 implementation parameters
at
java.base/java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:214)
at
java.base/java.lang.invoke.LambdaMetafactory.altMetafactory(LambdaMetafactory.java:503)
at
java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:138)
... 24 more
This commit contains all the remaining information about the
issue (commands, class names, ...) :
https://github.com/igloo-project/issue-lambda-serialization/commit/7b18c2d48833e7e1507115dd778ca1c3f40fd035
I do not find any bug that matches this issue in Eclipse Bugzilla
(https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=__open__&content=LambdaConversionException&no_redirect=1&order=Importance&query_format=specific
returns 4 other bugs ; the only one that could be linked from my
opinion is https://bugs.eclipse.org/bugs/show_bug.cgi?id=565787,
but it is not serialization-related).
Anyone can confirm my issue with my minimal test-case ? Where
this issue should be created ? Product JDT, Component Core ?
Thanks for you insight,
--
Laurent Almeras