1 package org.codehaus.classworlds; 2 3 public class ClassView 4 { 5 /*** 6 * * Formats Class information for debug output purposes. 7 * * 8 * * @param clz the Class to print information for 9 * * 10 * * @return a String describing the Class in detail 11 */ 12 public static String toString( Class clz ) 13 { 14 if ( clz.isPrimitive() ) 15 { 16 return clz.toString(); 17 } 18 else if ( clz.isArray() ) 19 { 20 return "Array of " + toString( clz.getComponentType() ); 21 } 22 else if ( clz.isInterface() ) 23 { 24 return toInterfaceString( clz, "" ); 25 } 26 else 27 { 28 return toClassString( clz, "" ); 29 } 30 } 31 32 /*** 33 * * Formats Class information for debug output purposes. 34 * * 35 * * @param clz the Class to print information for 36 * * @param sIndent the indentation to precede each line of output 37 * * 38 * * @return a String describing the Class in detail 39 */ 40 private static String toClassString( Class clz, String sIndent ) 41 { 42 StringBuffer sb = new StringBuffer(); 43 sb.append( sIndent ) 44 .append( "Class " ) 45 .append( clz.getName() ) 46 .append( " (" ) 47 .append( toString( clz.getClassLoader() ) ) 48 .append( ')' ); 49 50 sIndent += " "; 51 52 Class[] aclz = clz.getInterfaces(); 53 for ( int i = 0, c = aclz.length; i < c; ++i ) 54 { 55 sb.append( '\n' ) 56 .append( toInterfaceString( aclz[i], sIndent ) ); 57 } 58 59 clz = clz.getSuperclass(); 60 if ( clz != null ) 61 { 62 sb.append( '\n' ) 63 .append( toClassString( clz, sIndent ) ); 64 } 65 66 return sb.toString(); 67 } 68 69 /*** 70 * * Formats interface information for debug output purposes. 71 * * 72 * * @param clz the interface Class to print information for 73 * * @param sIndent the indentation to precede each line of output 74 * * 75 * * @return a String describing the interface Class in detail 76 */ 77 private static String toInterfaceString( Class clz, String sIndent ) 78 { 79 StringBuffer sb = new StringBuffer(); 80 sb.append( sIndent ) 81 .append( "Interface " ) 82 .append( clz.getName() ) 83 .append( " (" ) 84 .append( toString( clz.getClassLoader() ) ) 85 .append( ')' ); 86 87 Class[] aclz = clz.getInterfaces(); 88 for ( int i = 0, c = aclz.length; i < c; ++i ) 89 { 90 clz = aclz[i]; 91 92 sb.append( '\n' ) 93 .append( toInterfaceString( clz, sIndent + " " ) ); 94 } 95 96 return sb.toString(); 97 } 98 99 /*** 100 * * Format a description for the specified ClassLoader object. 101 * * 102 * * @param loader the ClassLoader instance (or null) 103 * * 104 * * @return a String description of the ClassLoader 105 */ 106 private static String toString( ClassLoader loader ) 107 { 108 if ( loader == null ) 109 { 110 return "System ClassLoader"; 111 } 112 113 return "ClassLoader class=" + loader.getClass().getName() 114 + ", hashCode=" + loader.hashCode(); 115 } 116 }