From 63dff2aaa39993c9652ca96f6ae3b5e7069a0a27 Mon Sep 17 00:00:00 2001 From: Andrea Aime Date: Sun, 11 Jun 2006 13:46:44 +0000 Subject: [PATCH] Added support for new dependency filtering options --- .../spinellis/umlgraph/doclet/ClassGraph.java | 29 +++++++++++++++++-- src/org/umlgraph/doclet/ClassGraph.java | 29 +++++++++++++++++-- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/gr/spinellis/umlgraph/doclet/ClassGraph.java b/src/gr/spinellis/umlgraph/doclet/ClassGraph.java index 7a43e3a..b903c03 100644 --- a/src/gr/spinellis/umlgraph/doclet/ClassGraph.java +++ b/src/gr/spinellis/umlgraph/doclet/ClassGraph.java @@ -26,9 +26,11 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -727,7 +729,7 @@ class ClassGraph { Set types = new HashSet(); // harvest method return and parameter types - for (MethodDoc method : c.methods(false)) { + for (MethodDoc method : filterByVisibility(c.methods(false), opt.inferDendencyVisibility)) { types.add(method.returnType()); for (Parameter parameter : method.parameters()) { types.add(parameter.type()); @@ -735,7 +737,7 @@ class ClassGraph { } // and the field types if (!opt.inferRelationships) { - for (FieldDoc field : c.fields(false)) { + for (FieldDoc field : filterByVisibility(c.fields(false), opt.inferDendencyVisibility)) { types.add(field.type()); } } @@ -768,6 +770,11 @@ class ClassGraph { String destName = fc.toString(); if (hidden(fc)) continue; + + // check if source and destination are in the same package and if we are allowed + // to infer dependencies between classes in the same package + if(!opt.inferDepInPackage && c.containingPackage().equals(fc.containingPackage())) + continue; // if source and dest are not already linked, add a // dependency @@ -779,6 +786,24 @@ class ClassGraph { } } + /** + * Returns all program element docs that have a visibility greater or + * equal than the specified level + */ + private List filterByVisibility(T[] docs, Visibility visibility) { + if (visibility == Visibility.PRIVATE) + return Arrays.asList(docs); + + List filtered = new ArrayList(); + for (T doc : docs) { + if (Visibility.get(doc).compareTo(visibility) > 0) + filtered.add(doc); + } + return filtered; + } + + + private FieldRelationInfo getFieldRelationInfo(FieldDoc field) { Type type = field.type(); if(type.isPrimitive() || type instanceof WildcardType || type instanceof TypeVariable) diff --git a/src/org/umlgraph/doclet/ClassGraph.java b/src/org/umlgraph/doclet/ClassGraph.java index 7a43e3a..b903c03 100644 --- a/src/org/umlgraph/doclet/ClassGraph.java +++ b/src/org/umlgraph/doclet/ClassGraph.java @@ -26,9 +26,11 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -727,7 +729,7 @@ class ClassGraph { Set types = new HashSet(); // harvest method return and parameter types - for (MethodDoc method : c.methods(false)) { + for (MethodDoc method : filterByVisibility(c.methods(false), opt.inferDendencyVisibility)) { types.add(method.returnType()); for (Parameter parameter : method.parameters()) { types.add(parameter.type()); @@ -735,7 +737,7 @@ class ClassGraph { } // and the field types if (!opt.inferRelationships) { - for (FieldDoc field : c.fields(false)) { + for (FieldDoc field : filterByVisibility(c.fields(false), opt.inferDendencyVisibility)) { types.add(field.type()); } } @@ -768,6 +770,11 @@ class ClassGraph { String destName = fc.toString(); if (hidden(fc)) continue; + + // check if source and destination are in the same package and if we are allowed + // to infer dependencies between classes in the same package + if(!opt.inferDepInPackage && c.containingPackage().equals(fc.containingPackage())) + continue; // if source and dest are not already linked, add a // dependency @@ -779,6 +786,24 @@ class ClassGraph { } } + /** + * Returns all program element docs that have a visibility greater or + * equal than the specified level + */ + private List filterByVisibility(T[] docs, Visibility visibility) { + if (visibility == Visibility.PRIVATE) + return Arrays.asList(docs); + + List filtered = new ArrayList(); + for (T doc : docs) { + if (Visibility.get(doc).compareTo(visibility) > 0) + filtered.add(doc); + } + return filtered; + } + + + private FieldRelationInfo getFieldRelationInfo(FieldDoc field) { Type type = field.type(); if(type.isPrimitive() || type instanceof WildcardType || type instanceof TypeVariable)