X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FClassGraph.java;h=65b8d4d8fff0cb2eae351d5bc6946c9ef5b96801;hb=c98cda3c339e0a3345884e17e7657301d285ca1f;hp=a4d90150e24153409f4c0b2beca7806b9f31f603;hpb=4a2fa09cacf11397bf00407edc2947c23967afeb;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 a4d9015..65b8d4d 100755 --- a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassGraph.java +++ b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassGraph.java @@ -1,6 +1,6 @@ /* * JavaInspect - Utility to visualize java software - * Copyright (C) 2013-2015, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu + * Copyright (C) 2013-2020, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu * * This program is free software; you can redistribute it and/or * modify it under the terms of version 3 of the GNU Lesser General Public License @@ -9,10 +9,7 @@ package eu.svjatoslav.inspector.java.structure; -import eu.svjatoslav.commons.file.CommonPathResolver; -import eu.svjatoslav.commons.string.WildCardMatcher; -import eu.svjatoslav.inspector.java.methods.Clazz; -import eu.svjatoslav.inspector.java.methods.ProjectScanner; +import eu.svjatoslav.commons.string.GlobMatcher; import java.io.File; import java.io.IOException; @@ -22,26 +19,26 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static eu.svjatoslav.inspector.java.methods.JavaFile.UTF_8; import static java.io.File.separator; +import static java.lang.System.getProperty; public class ClassGraph { /** * Maps class fully qualified names to class descriptors. */ - private final Map fullyQualifiedNameToClassMap = new HashMap(); + private final Map fullyQualifiedNameToClassMap = new HashMap<>(); - private final List blacklistClassPatterns = new ArrayList(); - - private final List whitelistClassPatterns = new ArrayList(); - - private String targetDirectoryPath = CommonPathResolver.getDesktopDirectory() - .getAbsolutePath() + separator; + private final List blacklistClassGlobs = new ArrayList<>(); + private final List whitelistClassGlobs = new ArrayList<>(); + TargetImageType targetImageType = TargetImageType.SVG; private boolean keepDotFile; - TargetImageType targetImageType = TargetImageType.SVG; + /** + * Default to current directory + */ + private File targetDirectory = new File(getProperty("user.dir") + separator); public ClassGraph() { } @@ -66,25 +63,8 @@ public class ClassGraph { getOrCreateClassDescriptor(object.getClass()); } - /** - * @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()); - addObject(c); - } catch (final Exception exception) { - System.out.println("cannot add class: " - + exception.getMessage()); - } - } - - public void blacklistClassPattern(final String pattern) { - blacklistClassPatterns.add(pattern); + public void blacklistClassGlob(final String glob) { + blacklistClassGlobs.add(glob); } public void setTargetImageType(TargetImageType targetImageType) { @@ -99,27 +79,30 @@ public class ClassGraph { public void generateGraph(final String resultFileName) { - final String dotFilePath = targetDirectoryPath + resultFileName + ".dot"; - final String imageFilePath = targetDirectoryPath + resultFileName + "." + targetImageType.fileExtension; + final File dotFile = new File(targetDirectory, resultFileName + ".dot"); + final File imageFile = new File(targetDirectory, resultFileName + "." + targetImageType.fileExtension); try { // write DOT file to disk - final PrintWriter out = new PrintWriter(dotFilePath, UTF_8); + final PrintWriter out = new PrintWriter(dotFile, "UTF-8"); out.write(getDot()); out.close(); // execute GraphViz to visualize graph try { Runtime.getRuntime() - .exec(new String[]{"dot", "-T" + targetImageType.fileExtension, dotFilePath, "-o", - imageFilePath}).waitFor(); + .exec(new String[]{"dot", + "-T" + targetImageType.fileExtension, + dotFile.getAbsolutePath(), + "-o", + imageFile.getAbsolutePath()}).waitFor(); } catch (final InterruptedException ignored) { } if (!keepDotFile) // delete dot file - if (!new File(dotFilePath).delete()) - throw new RuntimeException("Cannot delete file: " + dotFilePath); + if (!dotFile.delete()) + throw new RuntimeException("Cannot delete file: " + dotFile.getAbsolutePath()); } catch (final IOException e) { throw new RuntimeException("Unable to generate graph: " + e.getMessage(), e); @@ -128,7 +111,7 @@ public class ClassGraph { } private String getDot() { - final StringBuffer result = new StringBuffer(); + final StringBuilder result = new StringBuilder(); result.append("digraph Java {\n"); result.append("graph [rankdir=LR, overlap = false, concentrate=true];\n"); @@ -139,8 +122,7 @@ public class ClassGraph { result.append("}\n"); - final String resultStr = result.toString(); - return resultStr; + return result.toString(); } /** @@ -183,13 +165,13 @@ public class ClassGraph { } protected boolean isClassShown(final String className) { - for (final String pattern : blacklistClassPatterns) - if (WildCardMatcher.match(className, pattern)) + for (final String pattern : blacklistClassGlobs) + if (GlobMatcher.match(className, pattern)) return false; - if (!whitelistClassPatterns.isEmpty()) { - for (final String pattern : whitelistClassPatterns) - if (WildCardMatcher.match(className, pattern)) + if (!whitelistClassGlobs.isEmpty()) { + for (final String pattern : whitelistClassGlobs) + if (GlobMatcher.match(className, pattern)) return true; return false; } @@ -203,18 +185,13 @@ public class ClassGraph { return this; } - public ClassGraph setTargetDirectoryPath(String directoryPath) { - if (!directoryPath.endsWith(separator)) - directoryPath += separator; - - targetDirectoryPath = directoryPath; - + public ClassGraph setTargetDirectory(File targetDirectory) { + this.targetDirectory = targetDirectory; return this; } - public ClassGraph whitelistClassPattern(final String pattern) { - whitelistClassPatterns.add(pattern); - + public ClassGraph whitelistClassGlob(final String glob) { + whitelistClassGlobs.add(glob); return this; }