< prev index next >

test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaMethod.java

Print this page

        

*** 420,429 **** --- 420,448 ---- assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToInterface", metaAccess)); assertFalse(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "type", metaAccess)); assertFalse(ResolvedJavaMethod.isSignaturePolymorphic(metaAccess.lookupJavaType(Object.class), "toString", metaAccess)); } + /** + * All public non-final methods should be available in the vtable. + */ + @Test + public void testVirtualMethodTableAccess() { + for (Class<?> c : classes) { + if (c.isPrimitive() || c.isInterface()) { + continue; + } + ResolvedJavaType receiverType = metaAccess.lookupJavaType(c); + for (Method m : c.getMethods()) { + ResolvedJavaMethod method = metaAccess.lookupJavaMethod(m); + if (!method.isStatic() && !method.isFinal() && !method.getDeclaringClass().isLeaf() && !method.getDeclaringClass().isInterface()) { + assertTrue(method + " not available in " + receiverType, method.isInVirtualMethodTable(receiverType)); + } + } + } + } + private Method findTestMethod(Method apiMethod) { String testName = apiMethod.getName() + "Test"; for (Method m : getClass().getDeclaredMethods()) { if (m.getName().equals(testName) && m.getAnnotation(Test.class) != null) { return m;
< prev index next >