src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/CustomizedBytecodePatternTest.java
changeset 55619 3595fb8794c5
parent 50858 2d3e99a72541
child 55621 ea3b1a8fd4bb
equal deleted inserted replaced
55618:978b2201984c 55619:3595fb8794c5
    22  */
    22  */
    23 
    23 
    24 
    24 
    25 package org.graalvm.compiler.core.test;
    25 package org.graalvm.compiler.core.test;
    26 
    26 
       
    27 import java.lang.invoke.MethodHandles;
       
    28 import java.lang.reflect.Method;
       
    29 import java.security.ProtectionDomain;
       
    30 
    27 import org.objectweb.asm.Opcodes;
    31 import org.objectweb.asm.Opcodes;
       
    32 
       
    33 import sun.misc.Unsafe;
    28 
    34 
    29 public abstract class CustomizedBytecodePatternTest extends GraalCompilerTest implements Opcodes {
    35 public abstract class CustomizedBytecodePatternTest extends GraalCompilerTest implements Opcodes {
    30 
    36 
    31     protected Class<?> getClass(String className) throws ClassNotFoundException {
    37     protected Class<?> getClass(String className) throws ClassNotFoundException {
    32         return new CachedLoader(CustomizedBytecodePatternTest.class.getClassLoader(), className).findClass(className);
    38         return new CachedLoader(CustomizedBytecodePatternTest.class.getClassLoader(), className).findClass(className);
       
    39     }
       
    40 
       
    41     /**
       
    42      * @param className
       
    43      * @param lookUp lookup object with boot class load capability (required for jdk 9 and above)
       
    44      * @return loaded class
       
    45      * @throws ClassNotFoundException
       
    46      */
       
    47     protected Class<?> getClassBL(String className, MethodHandles.Lookup lookUp) throws ClassNotFoundException {
       
    48         byte[] gen = generateClass(className.replace('.', '/'));
       
    49         Method defineClass = null;
       
    50         Class<?> loadedClass = null;
       
    51         try {
       
    52             if (Java8OrEarlier) {
       
    53                 defineClass = Unsafe.class.getDeclaredMethod("defineClass", String.class, byte[].class, int.class, int.class, ClassLoader.class, ProtectionDomain.class);
       
    54                 loadedClass = (Class<?>) defineClass.invoke(UNSAFE, className, gen, 0, gen.length, null, null);
       
    55             } else {
       
    56                 defineClass = MethodHandles.lookup().getClass().getDeclaredMethod("defineClass", byte[].class);
       
    57                 loadedClass = (Class<?>) defineClass.invoke(lookUp, gen);
       
    58             }
       
    59         } catch (Exception e) {
       
    60             throw new ClassNotFoundException();
       
    61         }
       
    62         return loadedClass;
    33     }
    63     }
    34 
    64 
    35     private class CachedLoader extends ClassLoader {
    65     private class CachedLoader extends ClassLoader {
    36 
    66 
    37         final String className;
    67         final String className;