Fixes null captured parameters
authorJohn Toman <jtoman@cs.washington.edu>
Thu, 30 Aug 2018 22:31:57 +0000 (15:31 -0700)
committerJohn Toman <jtoman@cs.washington.edu>
Fri, 31 Aug 2018 19:32:23 +0000 (12:32 -0700)
src/main/gov/nasa/jpf/vm/FunctionObjectFactory.java
src/tests/java8/LambdaTest.java

index de61be012fb5b6f9a9a23b56f054db071ec1f3be..a96f932c4b5da78e736d555de185e90f376d8424 100644 (file)
@@ -61,8 +61,12 @@ public class FunctionObjectFactory {
       } else if (typeName.equals("boolean")) {
         fields.setBooleanValue(i, (Boolean)freeVarValues[i]);
       } else {
-        int val = ((ElementInfo)freeVarValues[i]).getObjectRef();
-        fields.setReferenceValue(i, val);
+        if(freeVarValues[i] == null) {
+          fields.setReferenceValue(i, MJIEnv.NULL); 
+        } else {
+          int val = ((ElementInfo)freeVarValues[i]).getObjectRef();
+          fields.setReferenceValue(i, val);
+        }
       }
     }
   }
index b6ec69533c166181b2dd41333ea86787e09a9983..910876db8effa8b5da95df91172e5d41e2e35c88 100644 (file)
@@ -19,6 +19,8 @@ package java8;
 
 import gov.nasa.jpf.util.test.TestJPF;
 
+import java.util.function.Supplier;
+
 import org.junit.Test;
 
 /**
@@ -294,4 +296,16 @@ public class LambdaTest extends TestJPF{
       assertSame(fi1,fi2);
     }
   }
+  
+  @Test
+  public void testNullCaptureValues() {
+    if(verifyNoPropertyViolation()) {
+      Supplier<String> provider = getStringProvider(null);
+      assertEquals(provider.get(), "It was null");
+    }
+  }
+
+  private Supplier<String> getStringProvider(String object) {
+    return () -> object == null ? "It was null" : object;
+  }
 }