src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraphPrinter.java
changeset 49873 26ebfe8ce852
parent 49451 e06f9607f370
child 50330 2cbc42a5764b
equal deleted inserted replaced
49872:0798eab12791 49873:26ebfe8ce852
    35 import org.graalvm.compiler.graph.Graph;
    35 import org.graalvm.compiler.graph.Graph;
    36 import org.graalvm.compiler.nodes.ConstantNode;
    36 import org.graalvm.compiler.nodes.ConstantNode;
    37 import org.graalvm.compiler.nodes.StructuredGraph;
    37 import org.graalvm.compiler.nodes.StructuredGraph;
    38 import org.graalvm.compiler.nodes.util.JavaConstantFormatter;
    38 import org.graalvm.compiler.nodes.util.JavaConstantFormatter;
    39 import org.graalvm.compiler.phases.schedule.SchedulePhase;
    39 import org.graalvm.compiler.phases.schedule.SchedulePhase;
    40 import org.graalvm.compiler.serviceprovider.JDK9Method;
    40 import org.graalvm.compiler.serviceprovider.GraalServices;
    41 
    41 
    42 import jdk.vm.ci.meta.JavaConstant;
    42 import jdk.vm.ci.meta.JavaConstant;
    43 import jdk.vm.ci.meta.JavaKind;
    43 import jdk.vm.ci.meta.JavaKind;
    44 import jdk.vm.ci.meta.JavaType;
    44 import jdk.vm.ci.meta.JavaType;
    45 import jdk.vm.ci.meta.MetaUtil;
    45 import jdk.vm.ci.meta.MetaUtil;
    46 import jdk.vm.ci.meta.ResolvedJavaMethod;
    46 import jdk.vm.ci.meta.ResolvedJavaMethod;
    47 import jdk.vm.ci.runtime.JVMCI;
       
    48 import jdk.vm.ci.services.Services;
       
    49 
    47 
    50 interface GraphPrinter extends Closeable, JavaConstantFormatter {
    48 interface GraphPrinter extends Closeable, JavaConstantFormatter {
    51 
    49 
    52     /**
    50     /**
    53      * Starts a new group of graphs with the given name, short name and method byte code index (BCI)
    51      * Starts a new group of graphs with the given name, short name and method byte code index (BCI)
    68      */
    66      */
    69     void endGroup() throws IOException;
    67     void endGroup() throws IOException;
    70 
    68 
    71     @Override
    69     @Override
    72     void close();
    70     void close();
    73 
       
    74     /**
       
    75      * A JVMCI package dynamically exported to trusted modules.
       
    76      */
       
    77     String JVMCI_RUNTIME_PACKAGE = JVMCI.class.getPackage().getName();
       
    78 
       
    79     /**
       
    80      * {@code jdk.vm.ci} module.
       
    81      */
       
    82     Object JVMCI_MODULE = JDK9Method.JAVA_SPECIFICATION_VERSION < 9 ? null : JDK9Method.getModule(Services.class);
       
    83 
    71 
    84     /**
    72     /**
    85      * Classes whose {@link #toString()} method does not run any untrusted code.
    73      * Classes whose {@link #toString()} method does not run any untrusted code.
    86      */
    74      */
    87     List<Class<?>> TRUSTED_CLASSES = Arrays.asList(
    75     List<Class<?>> TRUSTED_CLASSES = Arrays.asList(
   103      */
    91      */
   104     static boolean isToStringTrusted(Class<?> c) {
    92     static boolean isToStringTrusted(Class<?> c) {
   105         if (TRUSTED_CLASSES.contains(c)) {
    93         if (TRUSTED_CLASSES.contains(c)) {
   106             return true;
    94             return true;
   107         }
    95         }
   108         if (JDK9Method.JAVA_SPECIFICATION_VERSION < 9) {
    96         if (GraalServices.isToStringTrusted(c)) {
   109             if (c.getClassLoader() == Services.class.getClassLoader()) {
    97             return true;
   110                 // Loaded by the JVMCI class loader
       
   111                 return true;
       
   112             }
       
   113         } else {
       
   114             Object module = JDK9Method.getModule(c);
       
   115             if (JVMCI_MODULE == module || JDK9Method.isOpenTo(JVMCI_MODULE, JVMCI_RUNTIME_PACKAGE, module)) {
       
   116                 // Can access non-statically-exported package in JVMCI
       
   117                 return true;
       
   118             }
       
   119         }
    98         }
   120         if (c.getClassLoader() == GraphPrinter.class.getClassLoader()) {
    99         if (c.getClassLoader() == GraphPrinter.class.getClassLoader()) {
   121             return true;
   100             return true;
   122         }
   101         }
   123         return false;
   102         return false;