You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2011/01/22 11:34:01 UTC
svn commit: r1062134 - in /incubator/river/jtsk/trunk: build.xml
src/com/sun/jini/tool/classdepend/ClassDepend.java
src/com/sun/jini/tool/classdepend/ClassDependencyRelationship.java
src/manifest/classdepend.mf
Author: peter_firmstone
Date: Sat Jan 22 10:34:01 2011
New Revision: 1062134
URL: http://svn.apache.org/viewvc?rev=1062134&view=rev
Log:
Commit changes to build classdepend.jar for dependency analysis of java classes.
Added:
incubator/river/jtsk/trunk/src/manifest/classdepend.mf (with props)
Modified:
incubator/river/jtsk/trunk/build.xml
incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java
incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDependencyRelationship.java
Modified: incubator/river/jtsk/trunk/build.xml
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/build.xml?rev=1062134&r1=1062133&r2=1062134&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/build.xml (original)
+++ incubator/river/jtsk/trunk/build.xml Sat Jan 22 10:34:01 2011
@@ -593,6 +593,16 @@
<arg value="tools.jar"/>
</jarwrapper>
</target>
+
+ <target name="classdepend.jar" depends="jarwrapper.jar">
+ <delete file="${lib.dir}/classdepend.jar" quiet="true"/>
+ <jarwrapper>
+ <arg value="-manifest=${src.manifest.dir}/classdepend.mf"/>
+ <arg path="${lib.dir}/classdepend.jar"/>
+ <arg path="${lib.dir}"/>
+ <arg value="tools.jar"/>
+ </jarwrapper>
+ </target>
<target name="classserver.jar" depends="jarwrapper.jar">
<delete file="${lib.dir}/classserver.jar" quiet="true"/>
Modified: incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java?rev=1062134&r1=1062133&r2=1062134&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java (original)
+++ incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java Sat Jan 22 10:34:01 2011
@@ -132,6 +132,7 @@ public class ClassDepend {
boolean recurse = true;
boolean warn = false; //supress exceptions, print to error, warn instead
boolean files = false; //print class with file path separator
+ boolean graph = false; //print dependency relation ships between classes.
for (int i = 0; i < args.length; i++) {
String arg = args[i];
if (arg.equals("-cp")) {
@@ -146,6 +147,10 @@ public class ClassDepend {
warn = true;
} else if (arg.equals("-files")) {
files = true;
+ } else if (arg.equals("-graph")) {
+ graph = true;
+ } else if (arg.equals("-excljava")) {
+ cdpb.excludePlatformClasses(true);
} else if (arg.startsWith("-")) {
throw new IllegalArgumentException("Bad option: " + arg);
} else {
@@ -154,21 +159,31 @@ public class ClassDepend {
}
ClassDependParameters cdp = cdpb.build();
ClassDepend classDepend = ClassDepend.newInstance(classpath, platform, warn);
-
-
- String[] dependencies = (String[]) classDepend
+ Set result = classDepend
.filterClassDependencyRelationShipMap(
classDepend.getDependencyRelationshipMap(rootClasses, recurse),
- cdp)
- .toArray(new String[0]);
- Arrays.sort(dependencies);
- int l = dependencies.length;
- for ( int i = 0 ; i < l ; i++) {
- String cl = dependencies[i];
+ cdp);
+ Iterator results = result.iterator();
+ while (results.hasNext()){
+ Object rezult = results.next();
+ if ( !(rezult instanceof ClassDependencyRelationship )) continue;
+ ClassDependencyRelationship cl = (ClassDependencyRelationship) rezult;
+ String str = cl.toString();
if (files) {
- cl = cl.replace('.', File.separatorChar).concat(".class");
+ str = str.replace('.', File.separatorChar).concat(".class");
+ System.out.println(str);
}
- System.out.println(cl);
+ if (graph) {
+ Set deps = cl.getProviders();
+ Iterator itr = deps.iterator();
+ while (itr.hasNext()){
+ Object dep = itr.next();
+ if ( result.contains(dep)) {
+ System.out.println("\"" + cl + "\""+ " -> " +
+ "\"" + dep + "\"" + ";");
+ }
+ }
+ }
}
} catch (Throwable e) {
e.printStackTrace();
Modified: incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDependencyRelationship.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDependencyRelationship.java?rev=1062134&r1=1062133&r2=1062134&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDependencyRelationship.java (original)
+++ incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDependencyRelationship.java Sat Jan 22 10:34:01 2011
@@ -32,14 +32,14 @@ public class ClassDependencyRelationship
private final Set dependants; // classes that depend upon this class.
private final Set providers; // classes that this class depends upon.
private final String fullyQualifiedClassName;
+ private final int hash;
private final boolean rootClass;
- private volatile boolean result = false; // never set back to false, once true, true always.
- private volatile boolean interesting = false;
ClassDependencyRelationship (String fullyQualifiedClassName, boolean rootClass){
this.fullyQualifiedClassName = fullyQualifiedClassName;
- dependants = Collections.synchronizedSet(new HashSet());
- providers = Collections.synchronizedSet(new HashSet());
+ hash = 59 * 7 + (this.fullyQualifiedClassName != null ? this.fullyQualifiedClassName.hashCode() : 0);
+ dependants = new HashSet();
+ providers = new HashSet();
this.rootClass = rootClass;
}
@@ -79,16 +79,6 @@ public class ClassDependencyRelationship
return deps;
}
- public void addProviders(Set providers) {
- Iterator iter = providers.iterator();
- synchronized (this.providers){
- this.providers.addAll(providers);
- }
- while (iter.hasNext()){
- ((ClassDependencyRelationship) iter.next()).addDependant(this);
- }
- }
-
/**
* Get the classes that this class needs to function.
* @return a Set of classes
@@ -106,8 +96,22 @@ public class ClassDependencyRelationship
return fullyQualifiedClassName;
}
+ @Override
+ public int hashCode() {
+ return hash;
+ }
+
+ public boolean equals(Object o){
+ if ( o == null ) return false;
+ if (!(o instanceof ClassDependencyRelationship)) return false;
+ if (fullyQualifiedClassName.equals(
+ ((ClassDependencyRelationship)o).fullyQualifiedClassName))
+ return true;
+ return false;
+ }
+
/**
- * Is this a root dependant, that is no other classes depend on this.
+ * If this a root dependant, the class was used to discover dependencies.
* @return true or false
*/
public boolean isRootClass() {
Added: incubator/river/jtsk/trunk/src/manifest/classdepend.mf
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/manifest/classdepend.mf?rev=1062134&view=auto
==============================================================================
--- incubator/river/jtsk/trunk/src/manifest/classdepend.mf (added)
+++ incubator/river/jtsk/trunk/src/manifest/classdepend.mf Sat Jan 22 10:34:01 2011
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: com.sun.jini.tool.classdepend.ClassDepend
+
Propchange: incubator/river/jtsk/trunk/src/manifest/classdepend.mf
------------------------------------------------------------------------------
svn:eol-style = native