A null value is treated as false when converted to boolean
authorJaroslav Tulach <jtulach@netbeans.org>
Tue, 03 May 2016 04:44:10 +0200
changeset 10877865ad598184
parent 1086 57c08b33f351
child 1093 7d3990311255
A null value is treated as false when converted to boolean
boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java
json-tck/src/main/java/net/java/html/js/tests/Bodies.java
json-tck/src/main/java/net/java/html/js/tests/JavaScriptBodyTest.java
     1.1 --- a/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java	Mon May 02 05:53:36 2016 +0200
     1.2 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java	Tue May 03 04:44:10 2016 +0200
     1.3 @@ -44,7 +44,6 @@
     1.4  
     1.5  import java.io.IOException;
     1.6  import java.io.InputStream;
     1.7 -import java.io.InputStreamReader;
     1.8  import java.io.Reader;
     1.9  import java.net.URL;
    1.10  import java.util.ArrayList;
    1.11 @@ -441,13 +440,20 @@
    1.12                              super.visitTypeInsn(Opcodes.CHECKCAST, sv.returnType.getInternalName());
    1.13                              super.visitInsn(Opcodes.ARETURN);
    1.14                              break;
    1.15 -                        case Type.BOOLEAN:
    1.16 +                        case Type.BOOLEAN: {
    1.17 +                            Label handleNullValue = new Label();
    1.18 +                            super.visitInsn(Opcodes.DUP);
    1.19 +                            super.visitJumpInsn(Opcodes.IFNULL, handleNullValue);
    1.20                              super.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Boolean");
    1.21                              super.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
    1.22                                      "java/lang/Boolean", "booleanValue", "()Z"
    1.23                              );
    1.24                              super.visitInsn(Opcodes.IRETURN);
    1.25 +                            super.visitLabel(handleNullValue);
    1.26 +                            super.visitInsn(Opcodes.ICONST_0);
    1.27 +                            super.visitInsn(Opcodes.IRETURN);
    1.28                              break;
    1.29 +                        }
    1.30                          default:
    1.31                              super.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Number");
    1.32                              super.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
     2.1 --- a/json-tck/src/main/java/net/java/html/js/tests/Bodies.java	Mon May 02 05:53:36 2016 +0200
     2.2 +++ b/json-tck/src/main/java/net/java/html/js/tests/Bodies.java	Tue May 03 04:44:10 2016 +0200
     2.3 @@ -216,7 +216,7 @@
     2.4          + "obj.x = 1;\n"
     2.5          + "return sum.@net.java.html.js.tests.Sum::checkNonNull(Ljava/lang/Object;)(obj[p]);\n"
     2.6      )
     2.7 -    static native Boolean nonNull(Sum sum, String p);
     2.8 +    static native boolean nonNull(Sum sum, String p);
     2.9  
    2.10      @JavaScriptBody(args = {}, javacall = true, body = 
    2.11          "return @net.java.html.js.tests.Bodies::problematicString()();"
     3.1 --- a/json-tck/src/main/java/net/java/html/js/tests/JavaScriptBodyTest.java	Mon May 02 05:53:36 2016 +0200
     3.2 +++ b/json-tck/src/main/java/net/java/html/js/tests/JavaScriptBodyTest.java	Tue May 03 04:44:10 2016 +0200
     3.3 @@ -384,8 +384,8 @@
     3.4      
     3.5      @KOTest public void callbackUnknown() {
     3.6          Sum s = new Sum();
     3.7 -        Boolean nonNull = Bodies.nonNull(s, "y");
     3.8 -        assertFalse(Boolean.TRUE.equals(nonNull), "y property doesn't exist");
     3.9 +        boolean nonNull = Bodies.nonNull(s, "y");
    3.10 +        assertFalse(nonNull, "y property doesn't exist");
    3.11      }
    3.12  
    3.13      @KOTest public void callbackUnknownArray() {