Rhino on JDK7 treats Boolean as an object - e.g. to return 'false' one needs to return 'null'
authorJaroslav Tulach <jtulach@netbeans.org>
Thu, 21 Apr 2016 08:58:57 +0200
changeset 108482ec5550b863
parent 1083 b49546d64269
child 1085 dfa26220d065
Rhino on JDK7 treats Boolean as an object - e.g. to return 'false' one needs to return 'null'
boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java
     1.1 --- a/boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java	Tue Apr 19 20:31:18 2016 +0200
     1.2 +++ b/boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java	Thu Apr 21 08:58:57 2016 +0200
     1.3 @@ -74,6 +74,17 @@
     1.4  final class ScriptPresenter implements Fn.KeepAlive,
     1.5  Presenter, Fn.FromJavaScript, Fn.ToJavaScript, Executor {
     1.6      private static final Logger LOG = Logger.getLogger(ScriptPresenter.class.getName());
     1.7 +    private static final boolean JDK7;
     1.8 +    static {
     1.9 +        boolean jdk7;
    1.10 +        try {
    1.11 +            Class.forName("java.lang.FunctionalInterface");
    1.12 +            jdk7 = false;
    1.13 +        } catch (ClassNotFoundException ex) {
    1.14 +            jdk7 = true;
    1.15 +        }
    1.16 +        JDK7 = jdk7;
    1.17 +    }
    1.18      private final ScriptEngine eng;
    1.19      private final Executor exc;
    1.20  
    1.21 @@ -220,6 +231,11 @@
    1.22                  throw new IllegalStateException(ex);
    1.23              }
    1.24          } else {
    1.25 +            if (JDK7) {
    1.26 +                if (toReturn instanceof Boolean) {
    1.27 +                    return ((Boolean)toReturn) ? true : null;
    1.28 +                }
    1.29 +            }
    1.30              return toReturn;
    1.31          }
    1.32      }