< prev index next >

test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveMethodTest.java

Print this page




 151     @Test
 152     public void testVirtualMethod() {
 153         ResolvedJavaType a = getType(A.class);
 154         ResolvedJavaType b = getType(B.class);
 155         ResolvedJavaType c = getType(C.class);
 156         ResolvedJavaMethod v1a = getMethod(a, "v1");
 157         ResolvedJavaMethod v2a = getMethod(a, "v2");
 158         ResolvedJavaMethod v2b = getMethod(b, "v2");
 159 
 160         assertEquals(v1a, a.resolveMethod(v1a, c));
 161         assertEquals(v1a, b.resolveMethod(v1a, c));
 162         assertEquals(v1a, c.resolveMethod(v1a, c));
 163         assertEquals(v2a, a.resolveMethod(v2a, c));
 164         assertEquals(v2b, b.resolveMethod(v2a, c));
 165         assertEquals(v2b, b.resolveMethod(v2b, c));
 166         assertEquals(v2b, c.resolveMethod(v2a, c));
 167         assertEquals(v2b, c.resolveMethod(v2b, c));
 168 
 169     }
 170 




















 171     static ResolvedJavaMethod getMethod(ResolvedJavaType type, String methodName) {
 172         for (ResolvedJavaMethod method : type.getDeclaredMethods()) {
 173             if (method.getName().equals(methodName)) {
 174                 return method;
 175             }
 176         }
 177         throw new IllegalArgumentException();
 178     }
 179 
 180     protected ResolvedJavaType getType(Class<?> clazz) {
 181         ResolvedJavaType type = metaAccess.lookupJavaType(clazz);
 182         type.initialize();
 183         return type;
 184     }
 185 }


 151     @Test
 152     public void testVirtualMethod() {
 153         ResolvedJavaType a = getType(A.class);
 154         ResolvedJavaType b = getType(B.class);
 155         ResolvedJavaType c = getType(C.class);
 156         ResolvedJavaMethod v1a = getMethod(a, "v1");
 157         ResolvedJavaMethod v2a = getMethod(a, "v2");
 158         ResolvedJavaMethod v2b = getMethod(b, "v2");
 159 
 160         assertEquals(v1a, a.resolveMethod(v1a, c));
 161         assertEquals(v1a, b.resolveMethod(v1a, c));
 162         assertEquals(v1a, c.resolveMethod(v1a, c));
 163         assertEquals(v2a, a.resolveMethod(v2a, c));
 164         assertEquals(v2b, b.resolveMethod(v2a, c));
 165         assertEquals(v2b, b.resolveMethod(v2b, c));
 166         assertEquals(v2b, c.resolveMethod(v2a, c));
 167         assertEquals(v2b, c.resolveMethod(v2b, c));
 168 
 169     }
 170 
 171     static class ClassType {
 172     }
 173 
 174     interface InterfaceType {
 175     }
 176 
 177     @Test
 178     public void testCloneAccessibility() {
 179         /*
 180          * The resolution machinery for clone on arrays has some hacks in that show up in odd places
 181          * so make sure that resolveMethod works as expected.
 182          */
 183         ResolvedJavaType interfaceType = getType(InterfaceType.class);
 184         ResolvedJavaType classType = getType(ClassType.class);
 185         ResolvedJavaType arrayType = getType(double[].class);
 186         ResolvedJavaMethod cloneMethod = getMethod(getType(Object.class), "clone");
 187         assertEquals("Can't resolve clone for class", cloneMethod, arrayType.resolveMethod(cloneMethod, classType));
 188         assertEquals("Can't resolve clone for interface", cloneMethod, arrayType.resolveMethod(cloneMethod, interfaceType));
 189     }
 190 
 191     static ResolvedJavaMethod getMethod(ResolvedJavaType type, String methodName) {
 192         for (ResolvedJavaMethod method : type.getDeclaredMethods()) {
 193             if (method.getName().equals(methodName)) {
 194                 return method;
 195             }
 196         }
 197         throw new IllegalArgumentException();
 198     }
 199 
 200     protected ResolvedJavaType getType(Class<?> clazz) {
 201         ResolvedJavaType type = metaAccess.lookupJavaType(clazz);
 202         type.initialize();
 203         return type;
 204     }
 205 }
< prev index next >