nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java
changeset 24590 0d2c811d2ad1
parent 22669 75563515567f
child 24778 2ff5d7041566
equal deleted inserted replaced
24589:6d4c7e566c59 24590:0d2c811d2ad1
    23  * questions.
    23  * questions.
    24  */
    24  */
    25 
    25 
    26 package jdk.nashorn.internal.runtime.linker;
    26 package jdk.nashorn.internal.runtime.linker;
    27 
    27 
       
    28 import java.lang.reflect.Modifier;
    28 import jdk.internal.dynalink.CallSiteDescriptor;
    29 import jdk.internal.dynalink.CallSiteDescriptor;
    29 import jdk.internal.dynalink.beans.BeansLinker;
    30 import jdk.internal.dynalink.beans.BeansLinker;
    30 import jdk.internal.dynalink.beans.StaticClass;
    31 import jdk.internal.dynalink.beans.StaticClass;
    31 import jdk.internal.dynalink.linker.GuardedInvocation;
    32 import jdk.internal.dynalink.linker.GuardedInvocation;
    32 import jdk.internal.dynalink.linker.GuardingDynamicLinker;
    33 import jdk.internal.dynalink.linker.GuardingDynamicLinker;
    63         final Object self = request.getReceiver();
    64         final Object self = request.getReceiver();
    64         if (self.getClass() != StaticClass.class) {
    65         if (self.getClass() != StaticClass.class) {
    65             return null;
    66             return null;
    66         }
    67         }
    67         final Class<?> receiverClass = ((StaticClass) self).getRepresentedClass();
    68         final Class<?> receiverClass = ((StaticClass) self).getRepresentedClass();
       
    69 
    68         Bootstrap.checkReflectionAccess(receiverClass, true);
    70         Bootstrap.checkReflectionAccess(receiverClass, true);
    69         final CallSiteDescriptor desc = request.getCallSiteDescriptor();
    71         final CallSiteDescriptor desc = request.getCallSiteDescriptor();
    70         // We intercept "new" on StaticClass instances to provide additional capabilities
    72         // We intercept "new" on StaticClass instances to provide additional capabilities
    71         if ("new".equals(desc.getNameToken(CallSiteDescriptor.OPERATOR))) {
    73         if ("new".equals(desc.getNameToken(CallSiteDescriptor.OPERATOR))) {
       
    74             if (! Modifier.isPublic(receiverClass.getModifiers())) {
       
    75                 throw ECMAErrors.typeError("new.on.nonpublic.javatype", receiverClass.getName());
       
    76             }
       
    77 
    72             // make sure new is on accessible Class
    78             // make sure new is on accessible Class
    73             Context.checkPackageAccess(receiverClass);
    79             Context.checkPackageAccess(receiverClass);
    74 
    80 
    75             // Is the class abstract? (This includes interfaces.)
    81             // Is the class abstract? (This includes interfaces.)
    76             if (NashornLinker.isAbstractClass(receiverClass)) {
    82             if (NashornLinker.isAbstractClass(receiverClass)) {