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
|