X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FClassGraph.java;h=036d5834cc01c6e731453872054b96f5c3a1a288;hb=1407177fb1f26b5d283b323924a7df137feaa57d;hp=b8f9c2cd084801557fe6dbedcfad2e559fb5a09d;hpb=79db54fde2069b536c95e9da810efb27f2e4efb5;p=javainspect.git diff --git a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassGraph.java b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassGraph.java index b8f9c2c..036d583 100644 --- a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassGraph.java +++ b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassGraph.java @@ -16,27 +16,49 @@ import java.util.HashMap; import java.util.Map; import eu.svjatoslav.commons.file.CommonPathResolver; +import eu.svjatoslav.inspector.java.methods.Clazz; +import eu.svjatoslav.inspector.java.methods.ProjectScanner; public class ClassGraph { + public static void render(final String graphName, final Class... classes) { + final ClassGraph classGraph = new ClassGraph(classes); + + classGraph.generateGraph(graphName); + } + /** * Maps class fully qualified names to class descriptors. */ Map nameToClassMap = new HashMap(); - public Filter filter = new Filter(); + private Filter filter = new Filter(); public ClassGraph() { } - public ClassGraph(final Class clazz) { - addClass(clazz); + /** + * @param classes + * classes that shall be added to graph + */ + public ClassGraph(final Class... classes) { + for (final Class clazz : classes) + addClass(clazz); } - public ClassGraph(final Object root) { - addClass(root.getClass()); + /** + * @param objects + * objects that shall be added to graph + */ + public ClassGraph(final Object... objects) { + for (Object object : objects) + addClass(object.getClass()); } + /** + * @param clazz + * class that shall be added to graph + */ public ClassDescriptor addClass(final Class clazz) { if (clazz == null) @@ -50,21 +72,60 @@ public class ClassGraph { return new ClassDescriptor(clazz, this); } + /** + * @param object + * object that shall be added to graph + */ public ClassDescriptor addObject(final Object object) { return addClass(object.getClass()); } - public void generateGraph(final String graphName) { - generateGraph(graphName, false); + /** + * @param path + * path to recursively scan for java source code could be + * relative to current project or absolute + */ + public void addProject(final String path) { + final ProjectScanner projectScanner = new ProjectScanner(new File(path)); + for (final Clazz clazz : projectScanner.getAllClasses()) + try { + System.out.println("Class full name: " + clazz.getFullName()); + final Class c = this.getClass().forName(clazz.getFullName()); + addClass(c); + } catch (final Exception exception) { + System.out.println("cannot add class: " + + exception.getMessage()); + } + } + + /** + * @param resultFileName + * file name for the generated graph. Existing file with the same + * name will be overwritten. + */ + public void generateGraph(final String resultFileName) { + generateGraph(resultFileName, false); } - public void generateGraph(final String graphName, final boolean keepDotFile) { + /** + * @param resultFileName + * file name for the generated graph. File extension will be + * added automatically. Existing file with the same name will be + * overwritten. + * + * @param keepDotFile + * if set to true then intermediary GraphViz DOT + * file will be kept. + */ + + public void generateGraph(final String resultFileName, + final boolean keepDotFile) { final String desktopPath = CommonPathResolver.getDesktopDirectory() .getAbsolutePath() + "/"; - final String dotFilePath = desktopPath + graphName + ".dot"; - final String imageFilePath = desktopPath + graphName + ".png"; + final String dotFilePath = desktopPath + resultFileName + ".dot"; + final String imageFilePath = desktopPath + resultFileName + ".png"; System.out.println("Dot file path:" + dotFilePath); @@ -77,8 +138,8 @@ public class ClassGraph { // execute GraphViz to visualize graph try { Runtime.getRuntime() - .exec(new String[] { "dot", "-Tpng", dotFilePath, "-o", - imageFilePath }).waitFor(); + .exec(new String[] { "dot", "-Tpng", dotFilePath, "-o", + imageFilePath }).waitFor(); } catch (final InterruptedException e) { } finally { } @@ -109,4 +170,22 @@ public class ClassGraph { return resultStr; } + /** + * Hide orphaned class that have no references + */ + public void hideOrphanedClasses() { + + for (final ClassDescriptor classDescriptor : nameToClassMap.values()) + classDescriptor.hideClassIfNoReferences(); + + } + + public Filter getFilter() { + return filter; + } + + public void setFilter(Filter filter) { + this.filter = filter; + } + }