Test "gov.nasa.jpf.test.java.io.ObjectStreamTest and gov.nasa.jpf.test.java.io.testSimpleReadbackOk" Fails on Java 17
eklaDFF opened this issue · 18 comments
While running the ./gradlew clean test
on OpenJDK-17, gov.nasa.jpf.test.java.io.ObjectStreamTest
and gov.nasa.jpf.test.java.io.testSimpleReadbackOk
tests fails.
Here is the Standard Output :
running jpf with args:
JavaPathfinder core system v8.0 (rev 76cd506eb2d0de999cc263b3315b4f930c1505ad) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
gov.nasa.jpf.test.java.io.ObjectStreamTest.runTestMethod()
====================================================== search started: 20/06/24, 11:38 pm
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToFloats([BI[FII)V
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToDoubles([BI[DII)V
[WARNING] orphan NativePeer method: jdk.internal.reflect.Reflection.getCallerClass(I)Ljava/lang/Class;
====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.NoSuchMethodException: java.lang.System.getLogger(Ljava/lang/String;)Ljava/lang/System$Logger;
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:616)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testLambdaSerialization(ObjectStreamTest.java:143)
at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== snapshot #1
thread java.lang.Thread:{id:0,name:main,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
owned locks:java.lang.Class@27d
call stack:
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:616)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testLambdaSerialization(ObjectStreamTest.java:143)
at java.lang.reflect.Method.invoke(Method.java)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.NoSuchMethodException: java.lang.System...."
====================================================== search finished: 20/06/24, 11:38 pm
running jpf with args:
JavaPathfinder core system v8.0 (rev 76cd506eb2d0de999cc263b3315b4f930c1505ad) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
gov.nasa.jpf.test.java.io.ObjectStreamTest.runTestMethod()
====================================================== search started: 20/06/24, 11:38 pm
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToFloats([BI[FII)V
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToDoubles([BI[DII)V
[WARNING] orphan NativePeer method: jdk.internal.reflect.Reflection.getCallerClass(I)Ljava/lang/Class;
====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.NoSuchMethodException: java.lang.System.getLogger(Ljava/lang/String;)Ljava/lang/System$Logger;
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:616)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testSimpleReadbackOk(ObjectStreamTest.java:88)
at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== snapshot #1
thread java.lang.Thread:{id:0,name:main,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
owned locks:java.lang.Class@27d
call stack:
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:616)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testSimpleReadbackOk(ObjectStreamTest.java:88)
at java.lang.reflect.Method.invoke(Method.java)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.NoSuchMethodException: java.lang.System...."
====================================================== search finished: 20/06/24, 11:38 pm
@cyrille-artho
I do analysis on this error.
In java.lang.System
, there is no method named with java.lang.System.getLogger()
. getLogger()
is quite complex in depth. Please look at this once yourself .
Thanks for looking into this. It is unfortunate that the logger is needed to initialize the ObjectInputStream
now, because our examples tend not to use it.
One option could be to implement a very simple logger, which logs everything to System.out
unless logging is completely turned off. Another option is to return a dummy object or even null
in getLogger. The latter is a good first step to see if the Logger
instance is used anywhere at all.
If returning null
does not work, implement a dummy class that contains only empty methods to implement the interface System.Logger
. Simply implement enough empty methods (max. 9) to the compiler sees that the interface is implemented and the code can compile and run. We don't need the actual logging functionality for our uses.
Implemented these stuff in System.java
.
public static Logger getLogger (String name){
return new Logger() {
@Override
public String getName() {
return null;
}
@Override
public boolean isLoggable(Level level) {
return false;
}
@Override
public void log(Level level, ResourceBundle bundle, String msg, Throwable thrown) {
}
@Override
public void log(Level level, ResourceBundle bundle, String format, Object... params) {
}
};
}
public interface Logger {
public String getName();
public enum Level {
}
public boolean isLoggable(Level level);
public default void log(Level level, String msg) {
}
public default void log(Level level, Supplier<String> msgSupplier) {
}
public default void log(Level level, Object obj) {
}
public default void log(Level level, String msg, Throwable thrown) {
}
public default void log(Level level, Supplier<String> msgSupplier, Throwable thrown) {
}
public default void log(Level level, String format, Object... params) {
}
public void log(Level level, ResourceBundle bundle, String msg, Throwable thrown);
public void log(Level level, ResourceBundle bundle, String format, Object... params);
}
But the error is same as while returning null
in place of dummy Logger
Error :
running jpf with args:
JavaPathfinder core system v8.0 (rev ba7891bcf8074e7481d9921ebd71dfaf7be172bf) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
gov.nasa.jpf.test.java.io.ObjectStreamTest.runTestMethod()
====================================================== search started: 27/06/24, 7:49 pm
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToDoubles([BI[DII)V
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToFloats([BI[FII)V
[WARNING] orphan NativePeer method: jdk.internal.reflect.Reflection.getCallerClass(I)Ljava/lang/Class;
====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.InternalError: null property: native.encoding
at jdk.internal.util.StaticProperty.getProperty(StaticProperty.java:73)
at jdk.internal.util.StaticProperty.<clinit>(StaticProperty.java:67)
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:619)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testSimpleReadbackOk(ObjectStreamTest.java:88)
at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== snapshot #1
thread java.lang.Thread:{id:0,name:main,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
owned locks:java.lang.Class@27d,java.lang.Class@338
call stack:
at jdk.internal.util.StaticProperty.<clinit>(StaticProperty.java:67)
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:619)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testSimpleReadbackOk(ObjectStreamTest.java:88)
at java.lang.reflect.Method.invoke(Method.java)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.InternalError: null property: native.enc..."
====================================================== search finished: 27/06/24, 7:49 pm
Thanks for adding this. As this new code fixes one part of the bigger problem, please make a pull request.
I have looked at what happens next: It seems that the property native.encoding
was not used in Java 11 (it was null
) but should be something like UTF-8
now.
JPF pre-initializes its set of properties from a configuration vm.sysprop.source
(by making a copy); that setting defaults to SELECTED. This calls getSelectedSysPropsFromHost
from the native peer for System
, in src/peers/gov/nasa/jpf/vm/JPF_java_lang_System.java
:
String[] defKeys = {
"path.separator",
"line.separator",
"file.separator",
"user.name",
"user.home",
"user.dir",
"user.home",
"user.timezone",
"user.country",
"java.home",
"java.version",
"java.io.tmpdir",
JAVA_CLASS_PATH
//... and probably some more
// <2do> what about -Dkey=value commandline options
};
So it looks like simply adding "native.encoding"
to that list will fix this error.
As this new code fixes one part of the bigger problem, please make a pull request.-> PR #467
added `native.encoding' :
String[] defKeys = {
"path.separator",
"line.separator",
"file.separator",
"user.name",
"user.home",
"user.dir",
"user.home",
"user.timezone",
"user.country",
"java.home",
"java.version",
"java.io.tmpdir",
"native.encoding",
JAVA_CLASS_PATH
//... and probably some more
// <2do> what about -Dkey=value commandline options
};
New error :
running jpf with args:
JavaPathfinder core system v8.0 (rev 7b6099f399c5188d612481de5d433391d1916e21) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
gov.nasa.jpf.test.java.io.ObjectStreamTest.runTestMethod()
====================================================== search started: 28/06/24, 11:11 am
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToFloats([BI[FII)V
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToDoubles([BI[DII)V
[WARNING] orphan NativePeer method: jdk.internal.reflect.Reflection.getCallerClass(I)Ljava/lang/Class;
====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.NoSuchMethodException: jdk.internal.access.SharedSecrets.setJavaSecurityPropertiesAccess(Ljdk/internal/access/JavaSecurityPropertiesAccess;)V
at java.security.Security.<clinit>(Security.java:89)
at java.io.ObjectInputFilter$Config.lambda$static$0(ObjectInputFilter.java:623)
at java.io.ObjectInputFilter$Config$0.run
at java.security.AccessController.doPrivileged(AccessController.java:34)
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:622)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testLambdaSerialization(ObjectStreamTest.java:143)
at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== snapshot #1
thread java.lang.Thread:{id:0,name:main,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
owned locks:java.lang.Class@282,java.lang.Class@364
call stack:
at java.security.Security.<clinit>(Security.java:89)
at java.io.ObjectInputFilter$Config.lambda$static$0(ObjectInputFilter.java:623)
at java.io.ObjectInputFilter$Config$0.run(pc 0)
at java.security.AccessController.doPrivileged(AccessController.java:34)
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:622)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testLambdaSerialization(ObjectStreamTest.java:143)
at java.lang.reflect.Method.invoke(Method.java)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.NoSuchMethodException: jdk.internal.acce..."
====================================================== search finished: 28/06/24, 11:11 am
running jpf with args:
JavaPathfinder core system v8.0 (rev 7b6099f399c5188d612481de5d433391d1916e21) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
gov.nasa.jpf.test.java.io.ObjectStreamTest.runTestMethod()
====================================================== search started: 28/06/24, 11:11 am
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToFloats([BI[FII)V
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToDoubles([BI[DII)V
[WARNING] orphan NativePeer method: jdk.internal.reflect.Reflection.getCallerClass(I)Ljava/lang/Class;
====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.NoSuchMethodException: jdk.internal.access.SharedSecrets.setJavaSecurityPropertiesAccess(Ljdk/internal/access/JavaSecurityPropertiesAccess;)V
at java.security.Security.<clinit>(Security.java:89)
at java.io.ObjectInputFilter$Config.lambda$static$0(ObjectInputFilter.java:623)
at java.io.ObjectInputFilter$Config$0.run
at java.security.AccessController.doPrivileged(AccessController.java:34)
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:622)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testSimpleReadbackOk(ObjectStreamTest.java:88)
at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== snapshot #1
thread java.lang.Thread:{id:0,name:main,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
owned locks:java.lang.Class@282,java.lang.Class@364
call stack:
at java.security.Security.<clinit>(Security.java:89)
at java.io.ObjectInputFilter$Config.lambda$static$0(ObjectInputFilter.java:623)
at java.io.ObjectInputFilter$Config$0.run(pc 0)
at java.security.AccessController.doPrivileged(AccessController.java:34)
at java.io.ObjectInputFilter$Config.<clinit>(ObjectInputFilter.java:622)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:390)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testSimpleReadbackOk(ObjectStreamTest.java:88)
at java.lang.reflect.Method.invoke(Method.java)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.NoSuchMethodException: jdk.internal.acce..."
====================================================== search finished: 28/06/24, 11:11 am
Implemented jdk.internal.access.SharedSecrets.setJavaSecurityPropertiesAccess()
method.
Then next problem arise where System.Logger.Level required enum values of Level which was empty earlier.
public enum Level {
ALL(Integer.MIN_VALUE),
TRACE(400),
DEBUG(500),
INFO(800),
WARNING(900),
ERROR(1000),
OFF(Integer.MAX_VALUE);
private final int severity;
private Level(int severity) {
this.severity = severity;
}
}
Then next problem arise where implementation of setJavaLangReflectAccess()
and getJavaLangReflectAccess()
were required.
Our next error stack is :
running jpf with args:
JavaPathfinder core system v8.0 (rev 7b6099f399c5188d612481de5d433391d1916e21) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
gov.nasa.jpf.test.java.io.ObjectStreamTest.runTestMethod()
====================================================== search started: 30/06/24, 4:27 am
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToDoubles([BI[DII)V
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToFloats([BI[FII)V
[WARNING] orphan NativePeer method: jdk.internal.reflect.Reflection.getCallerClass(I)Ljava/lang/Class;
java.lang.NoSuchMethodError: java.util.WeakHashMap$Entry.refersTo(Ljava/lang/Object;)Z
at java.util.WeakHashMap.matchesKey(WeakHashMap.java:288)
at java.util.WeakHashMap.get(WeakHashMap.java:407)
at java.lang.ClassValue$ClassValueMap.finishEntry(ClassValue.java:475)
at java.lang.ClassValue.getFromHashMap(ClassValue.java:232)
at java.lang.ClassValue.getFromBackup(ClassValue.java:210)
at java.lang.ClassValue.get(ClassValue.java:116)
at java.io.ClassCache.get(ClassCache.java:84)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:363)
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2051)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1898)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2224)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1733)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:509)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:467)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testSimpleReadbackOk(ObjectStreamTest.java:89)
at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.AssertionError: serialization readback failed: java.lang.NoSuchMethodError: java.util.WeakHashMap$Entry.refersTo(Ljava/lang/Object;)Z
at gov.nasa.jpf.util.test.TestJPF.fail(TestJPF.java:164)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testSimpleReadbackOk(ObjectStreamTest.java:99)
at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
====================================================== snapshot #1
thread java.lang.Thread:{id:0,name:main,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
call stack:
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:650)
====================================================== results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.AssertionError: serialization readback f..."
====================================================== search finished: 30/06/24, 4:27 am
Here problem is that there is not mention of java.util.WeakHashMap$Entry.refersTo()
method in OpenJDK17 anywhere.
Hi @cyrille-artho , please look into this.
This looks strange: we don't have a model class (not to mention native peer) of WeakHashMap
, so there should be no missing methods. Can you please make a PR with your changes that you have made so far, so I can try if I can reproduce the same stack trace locally?
Thanks, I can reproduce the problem now. Still not sure about the cause. We don't have a model class for WeakHashMap
or its super classes. Normally, model classes implement only some API functions, which explains why a NoSuchMethodException
would occur. @pparizek , any ideas?
The class WeakHashMap$Entry extends java.lang.ref.WeakReference and java.lang.ref.Reference, for which we have model classes in JPF.
The method refersTo is in the JDK variant of java.lang.ref.Reference, but not in our model class.
I see, thanks @pparizek . Reference.refersTo
is a new method (in Java 17). It looks like our model class Reference
works without a native peer, so perhaps refersTo
can be implemented by simply comparing parameter obj
with the "referent" ref
(which is set by the constructor).
Hi, implemented java.lang.ref.Reference.refersTo()
as below (respecting the documentation) :
public boolean refersTo(Object o){
if (o == null) {
return ref == null;
} else {
return o.equals(ref);
}
}
Then we got errors like below :
running jpf with args:
JavaPathfinder core system v8.0 (rev b9c5d1178367979f2051481cb32228e1931cd0ad) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
gov.nasa.jpf.test.java.io.ObjectStreamTest.runTestMethod()
====================================================== search started: 02/07/24, 1:50 am
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToDoubles([BI[DII)V
[WARNING] orphan NativePeer method: java.io.ObjectInputStream.bytesToFloats([BI[FII)V
[WARNING] orphan NativePeer method: jdk.internal.reflect.Reflection.getCallerClass(I)Ljava/lang/Class;
java.lang.NoSuchMethodError: java.lang.Class.isRecord()Z
at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:375)
at java.io.ObjectStreamClass$Caches$1.computeValue(ObjectStreamClass.java:110)
at java.io.ObjectStreamClass$Caches$1.computeValue(ObjectStreamClass.java:107)
at java.io.ClassCache$1.computeValue(ClassCache.java:73)
at java.io.ClassCache$1.computeValue(ClassCache.java:70)
at java.lang.ClassValue.getFromHashMap(ClassValue.java:228)
at java.lang.ClassValue.getFromBackup(ClassValue.java:210)
at java.lang.ClassValue.get(ClassValue.java:116)
at java.io.ClassCache.get(ClassCache.java:84)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:363)
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2051)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1898)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2224)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1733)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:509)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:467)
at gov.nasa.jpf.test.java.io.ObjectStreamTest.testLambdaSerialization(ObjectStreamTest.java:144)
at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)
.
........
Here StackTrace tells that our model class do not have java.lang.Class.isRecord()
.
I do not how our jpf treats the Record
classes. For a moment, implemented the java.lang.Class.isRecord()
as below :
public boolean isRecord() {
return false;
}
And then both tests passes.
Thanks. I think we need reference equality, not value equality, in refersTo
. Please re-run the tests after changing o.equals(ref)
to o == ref
.
public boolean refersTo(Object o){
if (o == null) {
return ref == null;
} else {
return o == ref;
}
}
Yes, it worked!
PR #472
Great, thanks!