diff --git a/projects/viztool/src/java/com/samskivert/viztool/summary/ClassSummary.java b/projects/viztool/src/java/com/samskivert/viztool/summary/ClassSummary.java index e506076d..7b2e2ef1 100644 --- a/projects/viztool/src/java/com/samskivert/viztool/summary/ClassSummary.java +++ b/projects/viztool/src/java/com/samskivert/viztool/summary/ClassSummary.java @@ -1,5 +1,5 @@ // -// $Id: ClassSummary.java,v 1.1 2001/12/01 06:22:18 mdb Exp $ +// $Id: ClassSummary.java,v 1.2 2001/12/03 06:14:03 mdb Exp $ // // viztool - a tool for visualizing collections of java classes // Copyright (C) 2001 Michael Bayne @@ -29,10 +29,13 @@ import java.awt.geom.Rectangle2D; import java.lang.reflect.Constructor; import java.lang.reflect.Field; +import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; import com.samskivert.viztool.Log; import com.samskivert.viztool.layout.Element; @@ -45,7 +48,8 @@ import com.samskivert.viztool.util.RenderUtil; * (specifically, the interfaces it implements, the class it extends, its * public instances, member functions, and inner class definitions). */ -public class ClassSummary implements Element +public class ClassSummary + implements Element { /** * Constructs a class summary for the specified class. @@ -70,8 +74,35 @@ public class ClassSummary implements Element _interfaces[i] = _viz.name(interfaces[i]); } + // create a comparator that we can use to sort the fields and + // methods alphabetically and by staticness + Comparator comp = new Comparator() { + public int compare (Object o1, Object o2) { + Member m1 = (Member)o1; + Member m2 = (Member)o2; + + int s1 = m1.getModifiers() & Modifier.STATIC; + int s2 = m2.getModifiers() & Modifier.STATIC; + + // if one's static and one isn't... + if (s1 + s2 == Modifier.STATIC) { + // put the statics after the non-statics + return s1 - s2; + + } else { + // otherwise compare names + return m1.getName().compareTo(m2.getName()); + } + } + + public boolean equals (Object other) { + return (other == this); + } + }; + // get the public fields Field[] fields = _subject.getDeclaredFields(); + Arrays.sort(fields, comp); ArrayList fsigtypes = new ArrayList(); ArrayList fsigs = new ArrayList(); for (int i = 0; i < fields.length; i++) { @@ -92,12 +123,17 @@ public class ClassSummary implements Element Constructor[] ctors = _subject.getConstructors(); for (int i = 0; i < ctors.length; i++) { Constructor c = ctors[i]; - if ((c.getModifiers() & Modifier.PUBLIC) != 0) { + // make sure it's public + if ((c.getModifiers() & Modifier.PUBLIC) != 0 && + // skip the zero argument constructor because it's + // uninteresting + c.getParameterTypes().length > 0) { sigrets.add(" "); sigs.add(genConstructorSig(c)); } } Method[] methods = _subject.getDeclaredMethods(); + Arrays.sort(methods, comp); for (int i = 0; i < methods.length; i++) { Method m = methods[i]; if ((m.getModifiers() & Modifier.PUBLIC) != 0) { @@ -250,7 +286,7 @@ public class ClassSummary implements Element // documentation inherited public String getName () { - return _name; + return _subject.getName(); } // documentation inherited @@ -284,7 +320,7 @@ public class ClassSummary implements Element public String genConstructorSig (Constructor ctor) { StringBuffer buf = new StringBuffer(); - buf.append(_viz.name(ctor.getDeclaringClass())).append("("); + buf.append(_viz.name(ctor.getDeclaringClass())).append(" ("); Class[] ptypes = ctor.getParameterTypes(); for (int i = 0; i < ptypes.length; i++) { if (i > 0) { @@ -325,7 +361,7 @@ public class ClassSummary implements Element public String genMethodSig (Method method) { StringBuffer buf = new StringBuffer(); - buf.append(method.getName()).append("("); + buf.append(method.getName()).append(" ("); Class[] ptypes = method.getParameterTypes(); for (int i = 0; i < ptypes.length; i++) { if (i > 0) { @@ -347,6 +383,11 @@ public class ClassSummary implements Element return buf.toString(); } + public String toString () + { + return "[subject=" + _subject.getName() + "]"; + } + /** The package we're visualizing, which we'll strip from the front of * class names. */ protected SummaryVisualizer _viz; diff --git a/projects/viztool/src/java/com/samskivert/viztool/summary/SummaryVisualizer.java b/projects/viztool/src/java/com/samskivert/viztool/summary/SummaryVisualizer.java index 0ed0fe82..1425b0dc 100644 --- a/projects/viztool/src/java/com/samskivert/viztool/summary/SummaryVisualizer.java +++ b/projects/viztool/src/java/com/samskivert/viztool/summary/SummaryVisualizer.java @@ -1,5 +1,5 @@ // -// $Id: SummaryVisualizer.java,v 1.1 2001/12/01 06:22:18 mdb Exp $ +// $Id: SummaryVisualizer.java,v 1.2 2001/12/03 06:14:03 mdb Exp $ // // viztool - a tool for visualizing collections of java classes // Copyright (C) 2001 Michael Bayne @@ -31,9 +31,10 @@ import java.awt.print.PrinterException; import java.util.ArrayList; import java.util.Iterator; +import com.samskivert.util.StringUtil; + import com.samskivert.viztool.Log; import com.samskivert.viztool.Visualizer; -import com.samskivert.viztool.layout.ElementLayout; import com.samskivert.viztool.layout.PackedColumnElementLayout; /** @@ -72,9 +73,9 @@ public class SummaryVisualizer implements Visualizer try { Class subject = Class.forName(name); _summaries.add(new ClassSummary(subject, this)); - } catch (Exception e) { + } catch (Throwable t) { Log.warning("Unable to introspect class [class=" + name + - ", error=" + e + "]."); + ", error=" + t + "]."); } } } @@ -106,12 +107,11 @@ public class SummaryVisualizer implements Visualizer _pages = new ArrayList(); ArrayList list = new ArrayList(_summaries); ArrayList next = new ArrayList(); - ElementLayout elay = new PackedColumnElementLayout(); + PackedColumnElementLayout elay = new PackedColumnElementLayout(); + elay.setSortByHeight(false); while (list.size() > 0) { // lay out the elements that fit on this page - Log.info("Laying out " + list.size() + " summaries in " + - width + "x" + height + "+" + x + "+" + y + "."); elay.layout(list, width, height, next); // remove the overflowed elements from the list for this page