< prev index next >

test/compiler/jvmci/compilerToVM/ResolveMethodTest.java

Print this page




  32  *      jdk.vm.ci.hotspot.CompilerToVMHelper
  33  * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockExperimentalVMOptions
  34  *     -XX:+EnableJVMCI compiler.jvmci.compilerToVM.ResolveMethodTest
  35  */
  36 
  37 package compiler.jvmci.compilerToVM;
  38 
  39 import compiler.jvmci.common.testcases.AbstractClass;
  40 import compiler.jvmci.common.testcases.AbstractClassExtender;
  41 import compiler.jvmci.common.testcases.MultipleImplementer1;
  42 import compiler.jvmci.common.testcases.MultipleImplementer2;
  43 import compiler.jvmci.common.testcases.MultipleImplementersInterface;
  44 import compiler.jvmci.common.testcases.SingleImplementer;
  45 import compiler.jvmci.common.testcases.SingleImplementerInterface;
  46 import compiler.jvmci.common.testcases.SingleSubclass;
  47 import compiler.jvmci.common.testcases.SingleSubclassedClass;
  48 import compiler.jvmci.common.CTVMUtilities;
  49 import java.util.HashSet;
  50 import java.util.Set;
  51 import jdk.vm.ci.hotspot.CompilerToVMHelper;
  52 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl;
  53 import jdk.vm.ci.hotspot.HotSpotResolvedObjectTypeImpl;
  54 import jdk.test.lib.Asserts;
  55 import jdk.test.lib.Utils;
  56 import sun.misc.Unsafe;
  57 
  58 public class ResolveMethodTest {
  59     private static final Unsafe UNSAFE = Utils.getUnsafe();
  60 
  61     public static void main(String args[]) {
  62         ResolveMethodTest test = new ResolveMethodTest();
  63         // positive cases
  64         try {
  65             for (TestCase tcase: createTestCases()) {
  66                 test.runTest(tcase);
  67             }
  68         } catch (NoSuchMethodException e) {
  69             throw new Error("TEST BUG: can't find requested method", e);
  70         }
  71     }
  72 
  73     private static Set<TestCase> createTestCases() {


 108         // private method with right accessor
 109         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 110                 "privateMethod", SingleSubclass.class, true));
 111         // package-private method with right accessor
 112         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 113                 "defaultAccessMethod", SingleSubclass.class, true));
 114 
 115         // negative cases
 116 
 117         // private method of another class
 118         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 119                 "privateMethod", ResolveMethodTest.class, false));
 120         // package-private method from another package
 121         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 122                 "defaultAccessMethod", ResolveMethodTest.class, false));
 123         return result;
 124     }
 125 
 126     private void runTest(TestCase tcase) throws NoSuchMethodException {
 127         System.out.println(tcase);
 128         HotSpotResolvedJavaMethodImpl metaspaceMethod = CTVMUtilities
 129                 .getResolvedMethod(tcase.holder,
 130                         tcase.holder.getDeclaredMethod(tcase.methodName));
 131         HotSpotResolvedObjectTypeImpl holderMetaspace = CompilerToVMHelper
 132                 .lookupType(Utils.toJVMTypeSignature(tcase.holder),
 133                         getClass(), /* resolve = */ true);
 134         HotSpotResolvedObjectTypeImpl callerMetaspace = CompilerToVMHelper
 135                 .lookupType(Utils.toJVMTypeSignature(tcase.caller),
 136                         getClass(), /* resolve = */ true);
 137         HotSpotResolvedJavaMethodImpl resolvedMetaspaceMethod
 138                 = CompilerToVMHelper.resolveMethod(holderMetaspace,
 139                         metaspaceMethod, callerMetaspace);
 140         if (tcase.isPositive) {
 141             Asserts.assertNotNull(resolvedMetaspaceMethod,
 142                     "Unexpected null resolved method value for "
 143                             + tcase.methodName);
 144             Asserts.assertEQ(metaspaceMethod.getName(), tcase.methodName,
 145                     "Reflection and c2vm method names doesn't match");
 146         } else {
 147             Asserts.assertNull(resolvedMetaspaceMethod,
 148                     "Method unexpectedly resolved");
 149         }
 150     }
 151 
 152     private static class TestCase {
 153         public final Class<?> receiver;
 154         public final Class<?> holder;
 155         public final Class<?> caller;
 156         public final String methodName;
 157         public final boolean isPositive;


  32  *      jdk.vm.ci.hotspot.CompilerToVMHelper
  33  * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockExperimentalVMOptions
  34  *     -XX:+EnableJVMCI compiler.jvmci.compilerToVM.ResolveMethodTest
  35  */
  36 
  37 package compiler.jvmci.compilerToVM;
  38 
  39 import compiler.jvmci.common.testcases.AbstractClass;
  40 import compiler.jvmci.common.testcases.AbstractClassExtender;
  41 import compiler.jvmci.common.testcases.MultipleImplementer1;
  42 import compiler.jvmci.common.testcases.MultipleImplementer2;
  43 import compiler.jvmci.common.testcases.MultipleImplementersInterface;
  44 import compiler.jvmci.common.testcases.SingleImplementer;
  45 import compiler.jvmci.common.testcases.SingleImplementerInterface;
  46 import compiler.jvmci.common.testcases.SingleSubclass;
  47 import compiler.jvmci.common.testcases.SingleSubclassedClass;
  48 import compiler.jvmci.common.CTVMUtilities;
  49 import java.util.HashSet;
  50 import java.util.Set;
  51 import jdk.vm.ci.hotspot.CompilerToVMHelper;
  52 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
  53 import jdk.vm.ci.hotspot.HotSpotResolvedObjectType;
  54 import jdk.test.lib.Asserts;
  55 import jdk.test.lib.Utils;
  56 import sun.misc.Unsafe;
  57 
  58 public class ResolveMethodTest {
  59     private static final Unsafe UNSAFE = Utils.getUnsafe();
  60 
  61     public static void main(String args[]) {
  62         ResolveMethodTest test = new ResolveMethodTest();
  63         // positive cases
  64         try {
  65             for (TestCase tcase: createTestCases()) {
  66                 test.runTest(tcase);
  67             }
  68         } catch (NoSuchMethodException e) {
  69             throw new Error("TEST BUG: can't find requested method", e);
  70         }
  71     }
  72 
  73     private static Set<TestCase> createTestCases() {


 108         // private method with right accessor
 109         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 110                 "privateMethod", SingleSubclass.class, true));
 111         // package-private method with right accessor
 112         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 113                 "defaultAccessMethod", SingleSubclass.class, true));
 114 
 115         // negative cases
 116 
 117         // private method of another class
 118         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 119                 "privateMethod", ResolveMethodTest.class, false));
 120         // package-private method from another package
 121         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 122                 "defaultAccessMethod", ResolveMethodTest.class, false));
 123         return result;
 124     }
 125 
 126     private void runTest(TestCase tcase) throws NoSuchMethodException {
 127         System.out.println(tcase);
 128         HotSpotResolvedJavaMethod metaspaceMethod = CTVMUtilities
 129                 .getResolvedMethod(tcase.holder,
 130                         tcase.holder.getDeclaredMethod(tcase.methodName));
 131         HotSpotResolvedObjectType holderMetaspace = CompilerToVMHelper
 132                 .lookupType(Utils.toJVMTypeSignature(tcase.holder),
 133                         getClass(), /* resolve = */ true);
 134         HotSpotResolvedObjectType callerMetaspace = CompilerToVMHelper
 135                 .lookupType(Utils.toJVMTypeSignature(tcase.caller),
 136                         getClass(), /* resolve = */ true);
 137         HotSpotResolvedJavaMethod resolvedMetaspaceMethod
 138                 = CompilerToVMHelper.resolveMethod(holderMetaspace,
 139                         metaspaceMethod, callerMetaspace);
 140         if (tcase.isPositive) {
 141             Asserts.assertNotNull(resolvedMetaspaceMethod,
 142                     "Unexpected null resolved method value for "
 143                             + tcase.methodName);
 144             Asserts.assertEQ(metaspaceMethod.getName(), tcase.methodName,
 145                     "Reflection and c2vm method names doesn't match");
 146         } else {
 147             Asserts.assertNull(resolvedMetaspaceMethod,
 148                     "Method unexpectedly resolved");
 149         }
 150     }
 151 
 152     private static class TestCase {
 153         public final Class<?> receiver;
 154         public final Class<?> holder;
 155         public final Class<?> caller;
 156         public final String methodName;
 157         public final boolean isPositive;
< prev index next >