8072595: nashorn should not use obj.getClass() for null checks

Thu, 05 Feb 2015 19:08:00 +0530

author
sundar
date
Thu, 05 Feb 2015 19:08:00 +0530
changeset 1231
701c1dcdf733
parent 1230
f0bac75bc207
child 1232
09bd5b8abcba

8072595: nashorn should not use obj.getClass() for null checks
Reviewed-by: hannesw, attila

samples/javashell.js file | annotate | diff | comparison | revisions
samples/shell.js file | annotate | diff | comparison | revisions
src/jdk/internal/dynalink/DynamicLinker.java file | annotate | diff | comparison | revisions
src/jdk/internal/dynalink/beans/StaticClass.java file | annotate | diff | comparison | revisions
src/jdk/internal/dynalink/linker/GuardedInvocation.java file | annotate | diff | comparison | revisions
src/jdk/internal/dynalink/support/CallSiteDescriptorFactory.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/api/scripting/NashornScriptEngine.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/api/scripting/ScriptObjectMirror.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/api/scripting/URLReader.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/codegen/CompileUnit.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/objects/Global.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/Context.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/ScriptLoader.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/linker/JavaSuperAdapter.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/options/Options.java file | annotate | diff | comparison | revisions
test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java file | annotate | diff | comparison | revisions
     1.1 --- a/samples/javashell.js	Thu Feb 05 16:26:36 2015 +0100
     1.2 +++ b/samples/javashell.js	Thu Feb 05 19:08:00 2015 +0530
     1.3 @@ -40,6 +40,7 @@
     1.4  var Arrays = Java.type("java.util.Arrays");
     1.5  var BufferedReader = Java.type("java.io.BufferedReader");
     1.6  var FileWriter = Java.type("java.io.FileWriter");
     1.7 +var List = Java.type("java.util.List");
     1.8  var LocalDateTime = Java.type("java.time.LocalDateTime");
     1.9  var InputStreamReader = Java.type("java.io.InputStreamReader");
    1.10  var PrintWriter = Java.type("java.io.PrintWriter");
    1.11 @@ -121,7 +122,7 @@
    1.12  // execute code command
    1.13  function exec(args) {
    1.14      // build child process and start it!
    1.15 -    new ProcessBuilder(Arrays.asList(args.split(' ')))
    1.16 +    new ProcessBuilder(Java.to(args.split(' '), List))
    1.17           .inheritIO()
    1.18           .start()
    1.19           .waitFor();
     2.1 --- a/samples/shell.js	Thu Feb 05 16:26:36 2015 +0100
     2.2 +++ b/samples/shell.js	Thu Feb 05 19:08:00 2015 +0530
     2.3 @@ -42,6 +42,7 @@
     2.4      var Arrays = Java.type("java.util.Arrays");
     2.5      var BufferedReader = Java.type("java.io.BufferedReader");
     2.6      var InputStreamReader = Java.type("java.io.InputStreamReader");
     2.7 +    var List = Java.type("java.util.List");
     2.8      var ProcessBuilder = Java.type("java.lang.ProcessBuilder");
     2.9      var System = Java.type("java.lang.System");
    2.10  
    2.11 @@ -66,7 +67,7 @@
    2.12                      }
    2.13                  } else {
    2.14                      // build child process and start it!
    2.15 -                    new ProcessBuilder(Arrays.asList(args))
    2.16 +                    new ProcessBuilder(Java.to(args, List))
    2.17                          .inheritIO()
    2.18                          .start()
    2.19                          .waitFor();
     3.1 --- a/src/jdk/internal/dynalink/DynamicLinker.java	Thu Feb 05 16:26:36 2015 +0100
     3.2 +++ b/src/jdk/internal/dynalink/DynamicLinker.java	Thu Feb 05 19:08:00 2015 +0530
     3.3 @@ -88,6 +88,7 @@
     3.4  import java.lang.invoke.MethodType;
     3.5  import java.lang.invoke.MutableCallSite;
     3.6  import java.util.List;
     3.7 +import java.util.Objects;
     3.8  import jdk.internal.dynalink.linker.GuardedInvocation;
     3.9  import jdk.internal.dynalink.linker.GuardingDynamicLinker;
    3.10  import jdk.internal.dynalink.linker.LinkRequest;
    3.11 @@ -252,7 +253,7 @@
    3.12          // Make sure we filter the invocation before linking it into the call site. This is typically used to match the
    3.13          // return type of the invocation to the call site.
    3.14          guardedInvocation = prelinkFilter.filter(guardedInvocation, linkRequest, linkerServices);
    3.15 -        guardedInvocation.getClass(); // null pointer check
    3.16 +        Objects.requireNonNull(guardedInvocation);
    3.17  
    3.18          int newRelinkCount = relinkCount;
    3.19          // Note that the short-circuited "&&" evaluation below ensures we'll increment the relinkCount until
     4.1 --- a/src/jdk/internal/dynalink/beans/StaticClass.java	Thu Feb 05 16:26:36 2015 +0100
     4.2 +++ b/src/jdk/internal/dynalink/beans/StaticClass.java	Thu Feb 05 19:08:00 2015 +0530
     4.3 @@ -84,6 +84,7 @@
     4.4  package jdk.internal.dynalink.beans;
     4.5  
     4.6  import java.io.Serializable;
     4.7 +import java.util.Objects;
     4.8  
     4.9  /**
    4.10   * Object that represents the static facet of a class (its static methods, properties, and fields, as well as
    4.11 @@ -106,8 +107,7 @@
    4.12      private final Class<?> clazz;
    4.13  
    4.14      /*private*/ StaticClass(final Class<?> clazz) {
    4.15 -        clazz.getClass(); // NPE check
    4.16 -        this.clazz = clazz;
    4.17 +        this.clazz = Objects.requireNonNull(clazz);
    4.18      }
    4.19  
    4.20      /**
     5.1 --- a/src/jdk/internal/dynalink/linker/GuardedInvocation.java	Thu Feb 05 16:26:36 2015 +0100
     5.2 +++ b/src/jdk/internal/dynalink/linker/GuardedInvocation.java	Thu Feb 05 19:08:00 2015 +0530
     5.3 @@ -91,6 +91,7 @@
     5.4  import java.lang.invoke.SwitchPoint;
     5.5  import java.lang.invoke.WrongMethodTypeException;
     5.6  import java.util.List;
     5.7 +import java.util.Objects;
     5.8  import jdk.internal.dynalink.CallSiteDescriptor;
     5.9  import jdk.internal.dynalink.support.Guards;
    5.10  
    5.11 @@ -170,8 +171,7 @@
    5.12       * @throws NullPointerException if invocation is null.
    5.13       */
    5.14      public GuardedInvocation(final MethodHandle invocation, final MethodHandle guard, final SwitchPoint switchPoint, final Class<? extends Throwable> exception) {
    5.15 -        invocation.getClass(); // NPE check
    5.16 -        this.invocation = invocation;
    5.17 +        this.invocation = Objects.requireNonNull(invocation);
    5.18          this.guard = guard;
    5.19          this.switchPoints = switchPoint == null ? null : new SwitchPoint[] { switchPoint };
    5.20          this.exception = exception;
    5.21 @@ -190,8 +190,7 @@
    5.22       * @throws NullPointerException if invocation is null.
    5.23       */
    5.24      public GuardedInvocation(final MethodHandle invocation, final MethodHandle guard, final SwitchPoint[] switchPoints, final Class<? extends Throwable> exception) {
    5.25 -        invocation.getClass(); // NPE check
    5.26 -        this.invocation = invocation;
    5.27 +        this.invocation = Objects.requireNonNull(invocation);
    5.28          this.guard = guard;
    5.29          this.switchPoints = switchPoints == null ? null : switchPoints.clone();
    5.30          this.exception = exception;
     6.1 --- a/src/jdk/internal/dynalink/support/CallSiteDescriptorFactory.java	Thu Feb 05 16:26:36 2015 +0100
     6.2 +++ b/src/jdk/internal/dynalink/support/CallSiteDescriptorFactory.java	Thu Feb 05 19:08:00 2015 +0530
     6.3 @@ -91,6 +91,7 @@
     6.4  import java.util.Arrays;
     6.5  import java.util.Collections;
     6.6  import java.util.List;
     6.7 +import java.util.Objects;
     6.8  import java.util.StringTokenizer;
     6.9  import java.util.WeakHashMap;
    6.10  import jdk.internal.dynalink.CallSiteDescriptor;
    6.11 @@ -123,9 +124,9 @@
    6.12       * in fact return a weakly-referenced canonical instance.
    6.13       */
    6.14      public static CallSiteDescriptor create(final Lookup lookup, final String name, final MethodType methodType) {
    6.15 -        name.getClass(); // NPE check
    6.16 -        methodType.getClass(); // NPE check
    6.17 -        lookup.getClass(); // NPE check
    6.18 +        Objects.requireNonNull(name);
    6.19 +        Objects.requireNonNull(methodType);
    6.20 +        Objects.requireNonNull(lookup);
    6.21          final String[] tokenizedName = tokenizeName(name);
    6.22          if(isPublicLookup(lookup)) {
    6.23              return getCanonicalPublicDescriptor(createPublicCallSiteDescriptor(tokenizedName, methodType));
     7.1 --- a/src/jdk/nashorn/api/scripting/NashornScriptEngine.java	Thu Feb 05 16:26:36 2015 +0100
     7.2 +++ b/src/jdk/nashorn/api/scripting/NashornScriptEngine.java	Thu Feb 05 19:08:00 2015 +0530
     7.3 @@ -39,6 +39,7 @@
     7.4  import java.security.ProtectionDomain;
     7.5  import java.text.MessageFormat;
     7.6  import java.util.Locale;
     7.7 +import java.util.Objects;
     7.8  import java.util.ResourceBundle;
     7.9  import javax.script.AbstractScriptEngine;
    7.10  import javax.script.Bindings;
    7.11 @@ -360,7 +361,7 @@
    7.12      }
    7.13  
    7.14      private Object invokeImpl(final Object selfObject, final String name, final Object... args) throws ScriptException, NoSuchMethodException {
    7.15 -        name.getClass(); // null check
    7.16 +        Objects.requireNonNull(name);
    7.17          assert !(selfObject instanceof ScriptObject) : "raw ScriptObject not expected here";
    7.18  
    7.19          Global invokeGlobal = null;
     8.1 --- a/src/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java	Thu Feb 05 16:26:36 2015 +0100
     8.2 +++ b/src/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java	Thu Feb 05 19:08:00 2015 +0530
     8.3 @@ -28,6 +28,7 @@
     8.4  import java.util.Arrays;
     8.5  import java.util.Collections;
     8.6  import java.util.List;
     8.7 +import java.util.Objects;
     8.8  import javax.script.ScriptEngine;
     8.9  import javax.script.ScriptEngineFactory;
    8.10  import jdk.nashorn.internal.runtime.Context;
    8.11 @@ -177,7 +178,7 @@
    8.12       *         denies {@code RuntimePermission("nashorn.setConfig")}
    8.13       */
    8.14      public ScriptEngine getScriptEngine(final ClassFilter classFilter) {
    8.15 -        classFilter.getClass(); // null check
    8.16 +        Objects.requireNonNull(classFilter);
    8.17          return newEngine(DEFAULT_OPTIONS, getAppClassLoader(), classFilter);
    8.18      }
    8.19  
    8.20 @@ -192,7 +193,7 @@
    8.21       *         denies {@code RuntimePermission("nashorn.setConfig")}
    8.22       */
    8.23      public ScriptEngine getScriptEngine(final String... args) {
    8.24 -        args.getClass(); // null check
    8.25 +        Objects.requireNonNull(args);
    8.26          return newEngine(args, getAppClassLoader(), null);
    8.27      }
    8.28  
    8.29 @@ -208,7 +209,7 @@
    8.30       *         denies {@code RuntimePermission("nashorn.setConfig")}
    8.31       */
    8.32      public ScriptEngine getScriptEngine(final String[] args, final ClassLoader appLoader) {
    8.33 -        args.getClass(); // null check
    8.34 +        Objects.requireNonNull(args);
    8.35          return newEngine(args, appLoader, null);
    8.36      }
    8.37  
    8.38 @@ -225,8 +226,8 @@
    8.39       *         denies {@code RuntimePermission("nashorn.setConfig")}
    8.40       */
    8.41      public ScriptEngine getScriptEngine(final String[] args, final ClassLoader appLoader, final ClassFilter classFilter) {
    8.42 -        args.getClass(); // null check
    8.43 -        classFilter.getClass(); // null check
    8.44 +        Objects.requireNonNull(args);
    8.45 +        Objects.requireNonNull(classFilter);
    8.46          return newEngine(args, appLoader, classFilter);
    8.47      }
    8.48  
     9.1 --- a/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java	Thu Feb 05 16:26:36 2015 +0100
     9.2 +++ b/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java	Thu Feb 05 19:08:00 2015 +0530
     9.3 @@ -39,6 +39,7 @@
     9.4  import java.util.LinkedHashSet;
     9.5  import java.util.List;
     9.6  import java.util.Map;
     9.7 +import java.util.Objects;
     9.8  import java.util.Set;
     9.9  import java.util.concurrent.Callable;
    9.10  import javax.script.Bindings;
    9.11 @@ -180,7 +181,7 @@
    9.12       * @return return value of function
    9.13       */
    9.14      public Object callMember(final String functionName, final Object... args) {
    9.15 -        functionName.getClass(); // null check
    9.16 +        Objects.requireNonNull(functionName);
    9.17          final Global oldGlobal = Context.getGlobal();
    9.18          final boolean globalChanged = (oldGlobal != global);
    9.19  
    9.20 @@ -213,7 +214,7 @@
    9.21  
    9.22      @Override
    9.23      public Object getMember(final String name) {
    9.24 -        name.getClass();
    9.25 +        Objects.requireNonNull(name);
    9.26          return inGlobal(new Callable<Object>() {
    9.27              @Override public Object call() {
    9.28                  return wrap(sobj.get(name), global);
    9.29 @@ -232,7 +233,7 @@
    9.30  
    9.31      @Override
    9.32      public boolean hasMember(final String name) {
    9.33 -        name.getClass();
    9.34 +        Objects.requireNonNull(name);
    9.35          return inGlobal(new Callable<Boolean>() {
    9.36              @Override public Boolean call() {
    9.37                  return sobj.has(name);
    9.38 @@ -251,13 +252,13 @@
    9.39  
    9.40      @Override
    9.41      public void removeMember(final String name) {
    9.42 -        name.getClass();
    9.43 +        Objects.requireNonNull(name);
    9.44          remove(name);
    9.45      }
    9.46  
    9.47      @Override
    9.48      public void setMember(final String name, final Object value) {
    9.49 -        name.getClass();
    9.50 +        Objects.requireNonNull(name);
    9.51          put(name, value);
    9.52      }
    9.53  
    9.54 @@ -425,9 +426,7 @@
    9.55  
    9.56      @Override
    9.57      public void putAll(final Map<? extends String, ? extends Object> map) {
    9.58 -        if (map == null) {
    9.59 -            throw new NullPointerException("map is null");
    9.60 -        }
    9.61 +        Objects.requireNonNull(map, "map is null");
    9.62          final ScriptObject oldGlobal = Context.getGlobal();
    9.63          final boolean globalChanged = (oldGlobal != global);
    9.64          inGlobal(new Callable<Object>() {
    9.65 @@ -804,9 +803,9 @@
    9.66       * @throws IllegalArgumentException if key is empty string
    9.67       */
    9.68      private static void checkKey(final Object key) {
    9.69 -        if (key == null) {
    9.70 -            throw new NullPointerException("key can not be null");
    9.71 -        } else if (!(key instanceof String)) {
    9.72 +        Objects.requireNonNull(key, "key can not be null");
    9.73 +
    9.74 +        if (!(key instanceof String)) {
    9.75              throw new ClassCastException("key should be a String. It is " + key.getClass().getName() + " instead.");
    9.76          } else if (((String)key).length() == 0) {
    9.77              throw new IllegalArgumentException("key can not be empty");
    10.1 --- a/src/jdk/nashorn/api/scripting/URLReader.java	Thu Feb 05 16:26:36 2015 +0100
    10.2 +++ b/src/jdk/nashorn/api/scripting/URLReader.java	Thu Feb 05 19:08:00 2015 +0530
    10.3 @@ -30,6 +30,7 @@
    10.4  import java.io.Reader;
    10.5  import java.net.URL;
    10.6  import java.nio.charset.Charset;
    10.7 +import java.util.Objects;
    10.8  import jdk.nashorn.internal.runtime.Source;
    10.9  
   10.10  /**
   10.11 @@ -77,8 +78,7 @@
   10.12       * @throws NullPointerException if url is null
   10.13       */
   10.14      public URLReader(final URL url, final Charset cs) {
   10.15 -        // null check
   10.16 -        url.getClass();
   10.17 +        Objects.requireNonNull(url);
   10.18          this.url = url;
   10.19          this.cs  = cs;
   10.20      }
    11.1 --- a/src/jdk/nashorn/internal/codegen/CompileUnit.java	Thu Feb 05 16:26:36 2015 +0100
    11.2 +++ b/src/jdk/nashorn/internal/codegen/CompileUnit.java	Thu Feb 05 19:08:00 2015 +0530
    11.3 @@ -26,6 +26,7 @@
    11.4  package jdk.nashorn.internal.codegen;
    11.5  
    11.6  import java.io.Serializable;
    11.7 +import java.util.Objects;
    11.8  import java.util.Set;
    11.9  import java.util.TreeSet;
   11.10  import jdk.nashorn.internal.ir.CompileUnitHolder;
   11.11 @@ -113,7 +114,7 @@
   11.12       * @param clazz class with code for this compile unit
   11.13       */
   11.14      void setCode(final Class<?> clazz) {
   11.15 -        clazz.getClass(); // null check
   11.16 +        Objects.requireNonNull(clazz);
   11.17          this.clazz = clazz;
   11.18          // Revisit this - refactor to avoid null-ed out non-final fields
   11.19          // null out emitter
    12.1 --- a/src/jdk/nashorn/internal/objects/Global.java	Thu Feb 05 16:26:36 2015 +0100
    12.2 +++ b/src/jdk/nashorn/internal/objects/Global.java	Thu Feb 05 19:08:00 2015 +0530
    12.3 @@ -41,6 +41,7 @@
    12.4  import java.util.Arrays;
    12.5  import java.util.List;
    12.6  import java.util.Map;
    12.7 +import java.util.Objects;
    12.8  import java.util.concurrent.Callable;
    12.9  import java.util.concurrent.ConcurrentHashMap;
   12.10  import javax.script.ScriptContext;
   12.11 @@ -463,8 +464,7 @@
   12.12              sm.checkPermission(new RuntimePermission(Context.NASHORN_CREATE_GLOBAL));
   12.13          }
   12.14  
   12.15 -        // null check on context
   12.16 -        context.getClass();
   12.17 +        Objects.requireNonNull(context);
   12.18  
   12.19          return $nasgenmap$;
   12.20      }
   12.21 @@ -488,7 +488,7 @@
   12.22       */
   12.23      public static Global instance() {
   12.24          final Global global = Context.getGlobal();
   12.25 -        global.getClass(); // null check
   12.26 +        Objects.requireNonNull(global);
   12.27          return global;
   12.28      }
   12.29  
    13.1 --- a/src/jdk/nashorn/internal/runtime/Context.java	Thu Feb 05 16:26:36 2015 +0100
    13.2 +++ b/src/jdk/nashorn/internal/runtime/Context.java	Thu Feb 05 19:08:00 2015 +0530
    13.3 @@ -60,6 +60,7 @@
    13.4  import java.util.HashMap;
    13.5  import java.util.LinkedHashMap;
    13.6  import java.util.Map;
    13.7 +import java.util.Objects;
    13.8  import java.util.concurrent.atomic.AtomicLong;
    13.9  import java.util.concurrent.atomic.AtomicReference;
   13.10  import java.util.function.Consumer;
   13.11 @@ -904,7 +905,7 @@
   13.12       * @throw SecurityException if not accessible
   13.13       */
   13.14      private static void checkPackageAccess(final SecurityManager sm, final String fullName) {
   13.15 -        sm.getClass(); // null check
   13.16 +        Objects.requireNonNull(sm);
   13.17          final int index = fullName.lastIndexOf('.');
   13.18          if (index != -1) {
   13.19              final String pkgName = fullName.substring(0, index);
    14.1 --- a/src/jdk/nashorn/internal/runtime/ScriptLoader.java	Thu Feb 05 16:26:36 2015 +0100
    14.2 +++ b/src/jdk/nashorn/internal/runtime/ScriptLoader.java	Thu Feb 05 19:08:00 2015 +0530
    14.3 @@ -26,6 +26,7 @@
    14.4  package jdk.nashorn.internal.runtime;
    14.5  
    14.6  import java.security.CodeSource;
    14.7 +import java.util.Objects;
    14.8  
    14.9  /**
   14.10   * Responsible for loading script generated classes.
   14.11 @@ -69,8 +70,7 @@
   14.12       * @return Installed class.
   14.13       */
   14.14      synchronized Class<?> installClass(final String name, final byte[] data, final CodeSource cs) {
   14.15 -        // null check
   14.16 -        cs.getClass();
   14.17 +        Objects.requireNonNull(cs);
   14.18          return defineClass(name, data, 0, data.length, cs);
   14.19      }
   14.20  }
    15.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaSuperAdapter.java	Thu Feb 05 16:26:36 2015 +0100
    15.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaSuperAdapter.java	Thu Feb 05 19:08:00 2015 +0530
    15.3 @@ -25,6 +25,8 @@
    15.4  
    15.5  package jdk.nashorn.internal.runtime.linker;
    15.6  
    15.7 +import java.util.Objects;
    15.8 +
    15.9  /**
   15.10   * Represents a an adapter for invoking superclass methods on an adapter instance generated by
   15.11   * {@code JavaAdapterBytecodeGenerator}. Note that objects of this class are just wrappers around the adapter instances,
   15.12 @@ -34,7 +36,7 @@
   15.13      private final Object adapter;
   15.14  
   15.15      JavaSuperAdapter(final Object adapter) {
   15.16 -        adapter.getClass(); // NPE check
   15.17 +        Objects.requireNonNull(adapter);
   15.18          this.adapter = adapter;
   15.19      }
   15.20  
    16.1 --- a/src/jdk/nashorn/internal/runtime/options/Options.java	Thu Feb 05 16:26:36 2015 +0100
    16.2 +++ b/src/jdk/nashorn/internal/runtime/options/Options.java	Thu Feb 05 19:08:00 2015 +0530
    16.3 @@ -42,6 +42,7 @@
    16.4  import java.util.Locale;
    16.5  import java.util.Map;
    16.6  import java.util.MissingResourceException;
    16.7 +import java.util.Objects;
    16.8  import java.util.PropertyPermission;
    16.9  import java.util.ResourceBundle;
   16.10  import java.util.StringTokenizer;
   16.11 @@ -143,7 +144,7 @@
   16.12       * @return true if set to true, default value if unset or set to false
   16.13       */
   16.14      public static boolean getBooleanProperty(final String name, final Boolean defValue) {
   16.15 -        name.getClass(); // null check
   16.16 +        Objects.requireNonNull(name);
   16.17          if (!name.startsWith("nashorn.")) {
   16.18              throw new IllegalArgumentException(name);
   16.19          }
   16.20 @@ -184,7 +185,7 @@
   16.21       * @return string property if set or default value
   16.22       */
   16.23      public static String getStringProperty(final String name, final String defValue) {
   16.24 -        name.getClass(); // null check
   16.25 +        Objects.requireNonNull(name);
   16.26          if (! name.startsWith("nashorn.")) {
   16.27              throw new IllegalArgumentException(name);
   16.28          }
   16.29 @@ -211,7 +212,7 @@
   16.30       * @return integer property if set or default value
   16.31       */
   16.32      public static int getIntProperty(final String name, final int defValue) {
   16.33 -        name.getClass(); // null check
   16.34 +        Objects.requireNonNull(name);
   16.35          if (! name.startsWith("nashorn.")) {
   16.36              throw new IllegalArgumentException(name);
   16.37          }
    17.1 --- a/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java	Thu Feb 05 16:26:36 2015 +0100
    17.2 +++ b/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java	Thu Feb 05 19:08:00 2015 +0530
    17.3 @@ -721,6 +721,15 @@
    17.4          assertTrue(invoked.get());
    17.5      }
    17.6  
    17.7 +    @Test
    17.8 +    public void testLengthOnArrayLikeObjects() throws Exception {
    17.9 +        final ScriptEngine e = new ScriptEngineManager().getEngineByName("nashorn");
   17.10 +        final Object val = e.eval("var arr = { length: 1, 0: 1}; arr.length");
   17.11 +
   17.12 +        assertTrue(Number.class.isAssignableFrom(val.getClass()));
   17.13 +        assertTrue(((Number)val).intValue() == 1);
   17.14 +    }
   17.15 +
   17.16      // @bug JDK-8068603: NashornScriptEngine.put/get() impls don't conform to NPE, IAE spec assertions
   17.17      @Test
   17.18      public void illegalBindingsValuesTest() throws Exception {

mercurial