405 } else { 406 assertFalse(m.isJavaLangObjectInit()); 407 } 408 } 409 } 410 411 @Test 412 public void isSignaturePolymorphicTest() { 413 ResolvedJavaType methodHandleType = metaAccess.lookupJavaType(MethodHandle.class); 414 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "invokeExact", metaAccess)); 415 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "invoke", metaAccess)); 416 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "invokeBasic", metaAccess)); 417 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToVirtual", metaAccess)); 418 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToStatic", metaAccess)); 419 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToSpecial", metaAccess)); 420 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToInterface", metaAccess)); 421 assertFalse(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "type", metaAccess)); 422 assertFalse(ResolvedJavaMethod.isSignaturePolymorphic(metaAccess.lookupJavaType(Object.class), "toString", metaAccess)); 423 } 424 425 private Method findTestMethod(Method apiMethod) { 426 String testName = apiMethod.getName() + "Test"; 427 for (Method m : getClass().getDeclaredMethods()) { 428 if (m.getName().equals(testName) && m.getAnnotation(Test.class) != null) { 429 return m; 430 } 431 } 432 return null; 433 } 434 435 // @formatter:off 436 private static final String[] untestedApiMethods = { 437 "invoke", 438 "newInstance", 439 "getDeclaringClass", 440 "getEncoding", 441 "getProfilingInfo", 442 "reprofile", 443 "getCompilerStorage", 444 "canBeInlined", | 405 } else { 406 assertFalse(m.isJavaLangObjectInit()); 407 } 408 } 409 } 410 411 @Test 412 public void isSignaturePolymorphicTest() { 413 ResolvedJavaType methodHandleType = metaAccess.lookupJavaType(MethodHandle.class); 414 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "invokeExact", metaAccess)); 415 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "invoke", metaAccess)); 416 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "invokeBasic", metaAccess)); 417 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToVirtual", metaAccess)); 418 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToStatic", metaAccess)); 419 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToSpecial", metaAccess)); 420 assertTrue(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "linkToInterface", metaAccess)); 421 assertFalse(ResolvedJavaMethod.isSignaturePolymorphic(methodHandleType, "type", metaAccess)); 422 assertFalse(ResolvedJavaMethod.isSignaturePolymorphic(metaAccess.lookupJavaType(Object.class), "toString", metaAccess)); 423 } 424 425 /** 426 * All public non-final methods should be available in the vtable. 427 */ 428 @Test 429 public void testVirtualMethodTableAccess() { 430 for (Class<?> c : classes) { 431 if (c.isPrimitive() || c.isInterface()) { 432 continue; 433 } 434 ResolvedJavaType receiverType = metaAccess.lookupJavaType(c); 435 for (Method m : c.getMethods()) { 436 ResolvedJavaMethod method = metaAccess.lookupJavaMethod(m); 437 if (!method.isStatic() && !method.isFinal() && !method.getDeclaringClass().isLeaf() && !method.getDeclaringClass().isInterface()) { 438 assertTrue(method + " not available in " + receiverType, method.isInVirtualMethodTable(receiverType)); 439 } 440 } 441 } 442 } 443 444 private Method findTestMethod(Method apiMethod) { 445 String testName = apiMethod.getName() + "Test"; 446 for (Method m : getClass().getDeclaredMethods()) { 447 if (m.getName().equals(testName) && m.getAnnotation(Test.class) != null) { 448 return m; 449 } 450 } 451 return null; 452 } 453 454 // @formatter:off 455 private static final String[] untestedApiMethods = { 456 "invoke", 457 "newInstance", 458 "getDeclaringClass", 459 "getEncoding", 460 "getProfilingInfo", 461 "reprofile", 462 "getCompilerStorage", 463 "canBeInlined", |