Summary visualization enhancements.

git-svn-id: https://samskivert.googlecode.com/svn/trunk@491 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2001-12-03 06:14:03 +00:00
parent f262335d25
commit be2d49522b
2 changed files with 54 additions and 13 deletions
@@ -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;
@@ -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