src/jdk/nashorn/internal/objects/Global.java

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


  24  */
  25 
  26 package jdk.nashorn.internal.objects;
  27 
  28 import static jdk.nashorn.internal.lookup.Lookup.MH;
  29 import static jdk.nashorn.internal.runtime.ECMAErrors.referenceError;
  30 import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
  31 import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
  32 
  33 import java.io.IOException;
  34 import java.io.PrintWriter;
  35 import java.lang.invoke.MethodHandle;
  36 import java.lang.invoke.MethodHandles;
  37 import java.lang.invoke.MethodType;
  38 import java.lang.invoke.SwitchPoint;
  39 import java.lang.reflect.Field;
  40 import java.util.ArrayList;
  41 import java.util.Arrays;
  42 import java.util.List;
  43 import java.util.Map;

  44 import java.util.concurrent.Callable;
  45 import java.util.concurrent.ConcurrentHashMap;
  46 import javax.script.ScriptContext;
  47 import javax.script.ScriptEngine;
  48 import jdk.internal.dynalink.CallSiteDescriptor;
  49 import jdk.internal.dynalink.linker.GuardedInvocation;
  50 import jdk.internal.dynalink.linker.LinkRequest;
  51 import jdk.nashorn.api.scripting.ClassFilter;
  52 import jdk.nashorn.api.scripting.ScriptObjectMirror;
  53 import jdk.nashorn.internal.lookup.Lookup;
  54 import jdk.nashorn.internal.objects.annotations.Attribute;
  55 import jdk.nashorn.internal.objects.annotations.Property;
  56 import jdk.nashorn.internal.objects.annotations.ScriptClass;
  57 import jdk.nashorn.internal.runtime.ConsString;
  58 import jdk.nashorn.internal.runtime.Context;
  59 import jdk.nashorn.internal.runtime.ECMAErrors;
  60 import jdk.nashorn.internal.runtime.GlobalConstants;
  61 import jdk.nashorn.internal.runtime.GlobalFunctions;
  62 import jdk.nashorn.internal.runtime.JSType;
  63 import jdk.nashorn.internal.runtime.NativeJavaPackage;


 446      * @param scontext script context
 447      */
 448     public void setScriptContext(final ScriptContext scontext) {
 449         this.scontext = scontext;
 450     }
 451 
 452     @Override
 453     protected Context getContext() {
 454         return context;
 455     }
 456 
 457     // performs initialization checks for Global constructor and returns the
 458     // PropertyMap, if everything is fine.
 459     private static PropertyMap checkAndGetMap(final Context context) {
 460         // security check first
 461         final SecurityManager sm = System.getSecurityManager();
 462         if (sm != null) {
 463             sm.checkPermission(new RuntimePermission(Context.NASHORN_CREATE_GLOBAL));
 464         }
 465 
 466         // null check on context
 467         context.getClass();
 468 
 469         return $nasgenmap$;
 470     }
 471 
 472     /**
 473      * Constructor
 474      *
 475      * @param context the context
 476      */
 477     public Global(final Context context) {
 478         super(checkAndGetMap(context));
 479         this.context = context;
 480         this.setIsScope();
 481         this.lexicalScope = context.getEnv()._es6 ? new LexicalScope(this) : null;
 482     }
 483 
 484     /**
 485      * Script access to "current" Global instance
 486      *
 487      * @return the global singleton
 488      */
 489     public static Global instance() {
 490         final Global global = Context.getGlobal();
 491         global.getClass(); // null check
 492         return global;
 493     }
 494 
 495     private static Global instanceFrom(final Object self) {
 496         return self instanceof Global? (Global)self : instance();
 497     }
 498 
 499     /**
 500      * Check if we have a Global instance
 501      * @return true if one exists
 502      */
 503     public static boolean hasInstance() {
 504         return Context.getGlobal() != null;
 505     }
 506 
 507     /**
 508      * Script access to {@link ScriptEnvironment}
 509      *
 510      * @return the script environment
 511      */




  24  */
  25 
  26 package jdk.nashorn.internal.objects;
  27 
  28 import static jdk.nashorn.internal.lookup.Lookup.MH;
  29 import static jdk.nashorn.internal.runtime.ECMAErrors.referenceError;
  30 import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
  31 import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
  32 
  33 import java.io.IOException;
  34 import java.io.PrintWriter;
  35 import java.lang.invoke.MethodHandle;
  36 import java.lang.invoke.MethodHandles;
  37 import java.lang.invoke.MethodType;
  38 import java.lang.invoke.SwitchPoint;
  39 import java.lang.reflect.Field;
  40 import java.util.ArrayList;
  41 import java.util.Arrays;
  42 import java.util.List;
  43 import java.util.Map;
  44 import java.util.Objects;
  45 import java.util.concurrent.Callable;
  46 import java.util.concurrent.ConcurrentHashMap;
  47 import javax.script.ScriptContext;
  48 import javax.script.ScriptEngine;
  49 import jdk.internal.dynalink.CallSiteDescriptor;
  50 import jdk.internal.dynalink.linker.GuardedInvocation;
  51 import jdk.internal.dynalink.linker.LinkRequest;
  52 import jdk.nashorn.api.scripting.ClassFilter;
  53 import jdk.nashorn.api.scripting.ScriptObjectMirror;
  54 import jdk.nashorn.internal.lookup.Lookup;
  55 import jdk.nashorn.internal.objects.annotations.Attribute;
  56 import jdk.nashorn.internal.objects.annotations.Property;
  57 import jdk.nashorn.internal.objects.annotations.ScriptClass;
  58 import jdk.nashorn.internal.runtime.ConsString;
  59 import jdk.nashorn.internal.runtime.Context;
  60 import jdk.nashorn.internal.runtime.ECMAErrors;
  61 import jdk.nashorn.internal.runtime.GlobalConstants;
  62 import jdk.nashorn.internal.runtime.GlobalFunctions;
  63 import jdk.nashorn.internal.runtime.JSType;
  64 import jdk.nashorn.internal.runtime.NativeJavaPackage;


 447      * @param scontext script context
 448      */
 449     public void setScriptContext(final ScriptContext scontext) {
 450         this.scontext = scontext;
 451     }
 452 
 453     @Override
 454     protected Context getContext() {
 455         return context;
 456     }
 457 
 458     // performs initialization checks for Global constructor and returns the
 459     // PropertyMap, if everything is fine.
 460     private static PropertyMap checkAndGetMap(final Context context) {
 461         // security check first
 462         final SecurityManager sm = System.getSecurityManager();
 463         if (sm != null) {
 464             sm.checkPermission(new RuntimePermission(Context.NASHORN_CREATE_GLOBAL));
 465         }
 466 
 467         Objects.requireNonNull(context);

 468 
 469         return $nasgenmap$;
 470     }
 471 
 472     /**
 473      * Constructor
 474      *
 475      * @param context the context
 476      */
 477     public Global(final Context context) {
 478         super(checkAndGetMap(context));
 479         this.context = context;
 480         this.setIsScope();
 481         this.lexicalScope = context.getEnv()._es6 ? new LexicalScope(this) : null;
 482     }
 483 
 484     /**
 485      * Script access to "current" Global instance
 486      *
 487      * @return the global singleton
 488      */
 489     public static Global instance() {
 490         final Global global = Context.getGlobal();
 491         Objects.requireNonNull(global);
 492         return global;
 493     }
 494 
 495     private static Global instanceFrom(final Object self) {
 496         return self instanceof Global? (Global)self : instance();
 497     }
 498 
 499     /**
 500      * Check if we have a Global instance
 501      * @return true if one exists
 502      */
 503     public static boolean hasInstance() {
 504         return Context.getGlobal() != null;
 505     }
 506 
 507     /**
 508      * Script access to {@link ScriptEnvironment}
 509      *
 510      * @return the script environment
 511      */