1 25 package classycle.renderer; 26 27 import classycle.graph.AtomicVertex; 28 import classycle.graph.GraphAttributes; 29 import classycle.graph.NameAttributes; 30 import classycle.graph.StrongComponent; 31 import classycle.graph.Vertex; 32 33 38 public abstract class AbstractStrongComponentRenderer 39 implements StrongComponentRenderer { 40 48 public static String createName(StrongComponent component) { 49 GraphAttributes ga = (GraphAttributes) component.getAttributes(); 50 Vertex fragmenter = ga.getBestFragmenters()[0]; 51 String result = ((NameAttributes) fragmenter.getAttributes()).getName(); 52 if (component.getNumberOfVertices() > 1) { 54 AtomicVertex vertex = component.getVertex(0); 55 NameAttributes attributes = (NameAttributes) vertex.getAttributes(); 56 String outerClass = attributes.getName(); 57 int index = outerClass.indexOf('$'); 58 if (index > 0) { 59 outerClass = outerClass.substring(0, index); 60 } 61 boolean isInnerClass = true; 62 for (int i = 0, n = component.getNumberOfVertices(); i < n; i++) { 63 attributes = (NameAttributes) component.getVertex(i).getAttributes(); 64 if (attributes.getName().equals(outerClass)) { 65 vertex = component.getVertex(i); 66 } else if (!attributes.getName().startsWith(outerClass) 67 || attributes.getName().charAt(outerClass.length()) != '$') { 68 isInnerClass = false; 69 break; 70 } 71 } 72 attributes = (NameAttributes) vertex.getAttributes(); 73 if (isInnerClass) { 74 result = attributes.getName() + " and inner classes"; 75 } else { 76 result += " et al."; 77 } 78 } 79 return result; 80 } 81 } | Popular Tags |