+ /**
+ * @param clazz
+ * class that shall be added to graph
+ */
+ protected ClassDescriptor getOrCreateClassDescriptor(final Class clazz) {
+
+ if (clazz == null)
+ return null;
+
+ final String classFullyQualifiedName = clazz.getName();
+
+ // reuse existing instance if possible
+ if (fullyQualifiedNameToClassMap.containsKey(classFullyQualifiedName))
+ return fullyQualifiedNameToClassMap.get(classFullyQualifiedName);
+
+ // create new class descriptor
+ final ClassDescriptor newClassDescriptor = new ClassDescriptor(this);
+ fullyQualifiedNameToClassMap.put(classFullyQualifiedName,
+ newClassDescriptor);
+
+ newClassDescriptor.analyzeClass(clazz);
+
+ return newClassDescriptor;
+ }
+
+ /**
+ * Hide orphaned class that have no references
+ */
+ public ClassGraph hideOrphanedClasses() {
+
+ for (final ClassDescriptor classDescriptor : fullyQualifiedNameToClassMap
+ .values())
+ classDescriptor.hideClassIfNoReferences();
+
+ return this;
+ }
+
+ protected boolean isClassShown(final String className) {
+ for (final String pattern : blacklistClassPatterns)
+ if (WildCardMatcher.match(className, pattern))
+ return false;
+
+ if (!whitelistClassPatterns.isEmpty()) {
+ for (final String pattern : whitelistClassPatterns)
+ if (WildCardMatcher.match(className, pattern))
+ return true;
+ return false;
+ }
+
+ return true;
+ }
+
+ public ClassGraph setKeepDotFile(final boolean keepDotFile) {
+ this.keepDotFile = keepDotFile;
+
+ return this;
+ }
+
+ public ClassGraph setTargetDirectory(String directoryPath) {
+ if (!directoryPath.endsWith("/"))
+ directoryPath += "/";
+
+ targetDirectory = directoryPath;
+
+ return this;
+ }
+
+ public ClassGraph whitelistClassPattern(final String pattern) {
+ whitelistClassPatterns.add(pattern);
+
+ return this;
+ }
+