1455 String s = cl.getName(); 1456 int i = s.lastIndexOf('['); 1457 if (i >= 0) { 1458 s = s.substring(i + 2); 1459 } 1460 i = s.lastIndexOf('.'); 1461 return (i >= 0) ? s.substring(0, i) : ""; 1462 } 1463 1464 /** 1465 * Compares class names for equality, ignoring package names. Returns true 1466 * if class names equal, false otherwise. 1467 */ 1468 private static boolean classNamesEqual(String name1, String name2) { 1469 name1 = name1.substring(name1.lastIndexOf('.') + 1); 1470 name2 = name2.substring(name2.lastIndexOf('.') + 1); 1471 return name1.equals(name2); 1472 } 1473 1474 /** 1475 * Returns JVM type signature for given class. 1476 */ 1477 private static String getClassSignature(Class<?> cl) { 1478 StringBuilder sbuf = new StringBuilder(); 1479 while (cl.isArray()) { 1480 sbuf.append('['); 1481 cl = cl.getComponentType(); 1482 } 1483 if (cl.isPrimitive()) { 1484 if (cl == Integer.TYPE) { 1485 sbuf.append('I'); 1486 } else if (cl == Byte.TYPE) { 1487 sbuf.append('B'); 1488 } else if (cl == Long.TYPE) { 1489 sbuf.append('J'); 1490 } else if (cl == Float.TYPE) { 1491 sbuf.append('F'); 1492 } else if (cl == Double.TYPE) { 1493 sbuf.append('D'); 1494 } else if (cl == Short.TYPE) { 1495 sbuf.append('S'); 1496 } else if (cl == Character.TYPE) { 1497 sbuf.append('C'); 1498 } else if (cl == Boolean.TYPE) { 1499 sbuf.append('Z'); 1500 } else if (cl == Void.TYPE) { 1501 sbuf.append('V'); 1502 } else { 1503 throw new InternalError(); 1504 } 1505 } else { 1506 sbuf.append('L' + cl.getName().replace('.', '/') + ';'); 1507 } 1508 return sbuf.toString(); 1509 } 1510 1511 /** 1512 * Returns JVM type signature for given list of parameters and return type. 1513 */ 1514 private static String getMethodSignature(Class<?>[] paramTypes, 1515 Class<?> retType) 1516 { 1517 StringBuilder sbuf = new StringBuilder(); 1518 sbuf.append('('); 1519 for (int i = 0; i < paramTypes.length; i++) { 1520 sbuf.append(getClassSignature(paramTypes[i])); 1521 } 1522 sbuf.append(')'); 1523 sbuf.append(getClassSignature(retType)); 1524 return sbuf.toString(); 1525 } 1526 1527 /** | 1455 String s = cl.getName(); 1456 int i = s.lastIndexOf('['); 1457 if (i >= 0) { 1458 s = s.substring(i + 2); 1459 } 1460 i = s.lastIndexOf('.'); 1461 return (i >= 0) ? s.substring(0, i) : ""; 1462 } 1463 1464 /** 1465 * Compares class names for equality, ignoring package names. Returns true 1466 * if class names equal, false otherwise. 1467 */ 1468 private static boolean classNamesEqual(String name1, String name2) { 1469 name1 = name1.substring(name1.lastIndexOf('.') + 1); 1470 name2 = name2.substring(name2.lastIndexOf('.') + 1); 1471 return name1.equals(name2); 1472 } 1473 1474 /** 1475 * Returns JVM type signature for given primitive. 1476 */ 1477 private static String getPrimitiveSignature(Class<?> cl) { 1478 if (cl == Integer.TYPE) 1479 return "I"; 1480 else if (cl == Byte.TYPE) 1481 return "B"; 1482 else if (cl == Long.TYPE) 1483 return "J"; 1484 else if (cl == Float.TYPE) 1485 return "F"; 1486 else if (cl == Double.TYPE) 1487 return "D"; 1488 else if (cl == Short.TYPE) 1489 return "S"; 1490 else if (cl == Character.TYPE) 1491 return "C"; 1492 else if (cl == Boolean.TYPE) 1493 return "Z"; 1494 else if (cl == Void.TYPE) 1495 return "V"; 1496 else 1497 throw new InternalError(); 1498 } 1499 1500 /** 1501 * Returns JVM type signature for given class. 1502 */ 1503 static String getClassSignature(Class<?> cl) { 1504 if (cl.isPrimitive()) 1505 return getPrimitiveSignature(cl); 1506 1507 StringBuilder sbuf = new StringBuilder(); 1508 while (cl.isArray()) { 1509 sbuf.append('['); 1510 cl = cl.getComponentType(); 1511 } 1512 1513 if (cl.isPrimitive()) 1514 sbuf.append(getPrimitiveSignature(cl)); 1515 else 1516 sbuf.append('L').append(cl.getName().replace('.', '/')).append(';'); 1517 1518 return sbuf.toString(); 1519 } 1520 1521 /** 1522 * Returns JVM type signature for given list of parameters and return type. 1523 */ 1524 private static String getMethodSignature(Class<?>[] paramTypes, 1525 Class<?> retType) 1526 { 1527 StringBuilder sbuf = new StringBuilder(); 1528 sbuf.append('('); 1529 for (int i = 0; i < paramTypes.length; i++) { 1530 sbuf.append(getClassSignature(paramTypes[i])); 1531 } 1532 sbuf.append(')'); 1533 sbuf.append(getClassSignature(retType)); 1534 return sbuf.toString(); 1535 } 1536 1537 /** |