< prev index next >

test/compiler/jvmci/compilerToVM/ResolveMethodTest.java

Print this page




 120         // private method of another class
 121         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 122                 "privateMethod", ResolveMethodTest.class, false));
 123         // package-private method from another package
 124         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 125                 "defaultAccessMethod", ResolveMethodTest.class, false));
 126         return result;
 127     }
 128 
 129     private void runTest(TestCase tcase) throws NoSuchMethodException {
 130         System.out.println(tcase);
 131         HotSpotResolvedJavaMethod metaspaceMethod = CTVMUtilities
 132                 .getResolvedMethod(tcase.holder,
 133                         tcase.holder.getDeclaredMethod(tcase.methodName));
 134         HotSpotResolvedObjectType holderMetaspace = CompilerToVMHelper
 135                 .lookupType(Utils.toJVMTypeSignature(tcase.holder),
 136                         getClass(), /* resolve = */ true);
 137         HotSpotResolvedObjectType callerMetaspace = CompilerToVMHelper
 138                 .lookupType(Utils.toJVMTypeSignature(tcase.caller),
 139                         getClass(), /* resolve = */ true);






 140         HotSpotResolvedJavaMethod resolvedMetaspaceMethod
 141                 = CompilerToVMHelper.resolveMethod(holderMetaspace,
 142                         metaspaceMethod, callerMetaspace);
 143         if (tcase.isPositive) {
 144             Asserts.assertNotNull(resolvedMetaspaceMethod,
 145                     "Unexpected null resolved method value for "
 146                             + tcase.methodName);
 147             Asserts.assertEQ(metaspaceMethod.getName(), tcase.methodName,
 148                     "Reflection and c2vm method names doesn't match");
 149         } else {
 150             Asserts.assertNull(resolvedMetaspaceMethod,
 151                     "Method unexpectedly resolved");
 152         }
 153     }
 154 
 155     private static class TestCase {
 156         public final Class<?> receiver;
 157         public final Class<?> holder;
 158         public final Class<?> caller;
 159         public final String methodName;
 160         public final boolean isPositive;
 161 


 120         // private method of another class
 121         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 122                 "privateMethod", ResolveMethodTest.class, false));
 123         // package-private method from another package
 124         result.add(new TestCase(SingleSubclass.class, SingleSubclass.class,
 125                 "defaultAccessMethod", ResolveMethodTest.class, false));
 126         return result;
 127     }
 128 
 129     private void runTest(TestCase tcase) throws NoSuchMethodException {
 130         System.out.println(tcase);
 131         HotSpotResolvedJavaMethod metaspaceMethod = CTVMUtilities
 132                 .getResolvedMethod(tcase.holder,
 133                         tcase.holder.getDeclaredMethod(tcase.methodName));
 134         HotSpotResolvedObjectType holderMetaspace = CompilerToVMHelper
 135                 .lookupType(Utils.toJVMTypeSignature(tcase.holder),
 136                         getClass(), /* resolve = */ true);
 137         HotSpotResolvedObjectType callerMetaspace = CompilerToVMHelper
 138                 .lookupType(Utils.toJVMTypeSignature(tcase.caller),
 139                         getClass(), /* resolve = */ true);
 140         HotSpotResolvedObjectType receiverMetaspace = CompilerToVMHelper
 141                 .lookupType(Utils.toJVMTypeSignature(tcase.receiver),
 142                         getClass(), /* resolve = */ true);
 143 
 144         // Can only resolve methods on a linked class so force initialization
 145         receiverMetaspace.initialize();
 146         HotSpotResolvedJavaMethod resolvedMetaspaceMethod
 147                 = CompilerToVMHelper.resolveMethod(receiverMetaspace,
 148                         metaspaceMethod, callerMetaspace);
 149         if (tcase.isPositive) {
 150             Asserts.assertNotNull(resolvedMetaspaceMethod,
 151                     "Unexpected null resolved method value for "
 152                             + tcase.methodName);
 153             Asserts.assertEQ(metaspaceMethod.getName(), tcase.methodName,
 154                     "Reflection and c2vm method names doesn't match");
 155         } else {
 156             Asserts.assertNull(resolvedMetaspaceMethod,
 157                     "Method unexpectedly resolved");
 158         }
 159     }
 160 
 161     private static class TestCase {
 162         public final Class<?> receiver;
 163         public final Class<?> holder;
 164         public final Class<?> caller;
 165         public final String methodName;
 166         public final boolean isPositive;
 167 
< prev index next >