The documentation states classes will be removed from the coverage report if
they are not in the reference classpath.  This patch makes it so.

Index: XMLReport.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/
sitraka/XMLReport.java,v
retrieving revision 1.1
diff -u -r1.1 XMLReport.java
--- XMLReport.java      2001/07/31 08:40:12     1.1
+++ XMLReport.java      2001/09/14 18:18:23
@@ -88,6 +88,9 @@
        /** parsed document */
        protected Document report;
 
+    /** mapping of class names to <code>ClassFile</code>s from the
reference classpath.  It is used to filter the JProbe report. */
+    protected Hashtable classFiles;
+    
        /** mapping package name / package node for faster access */
        protected Hashtable pkgMap;
 
@@ -155,7 +158,7 @@
 
methodname.delete(methodname.toString().indexOf("(") ,
methodname.toString().length());
                                        String signature = classname + "." +
methodname + "()";
                                        if (filters.accept(signature)){
-                                               log("keeped method:" +
signature);
+                                               log("kept method:" +
signature);
                                                nbmethods++;
                                        }
                                        else {
@@ -163,7 +166,7 @@
                                        }
                                }
                                // if we don't keep any method, we don't
keep the class
-                               if (nbmethods != 0){
+                               if (nbmethods != 0 &&
classFiles.containsKey(classname)){
                                        log("Adding class '" + classname +
"'");
                                        classMap.put(classname, clazz);
                                        nbclasses++;
@@ -186,19 +189,8 @@
        /** create the whole new document */
        public Document createDocument(String[] classPath) throws Exception
{
 
-               DocumentBuilder dbuilder = newBuilder();
-               InputSource is = new InputSource( new FileInputStream(file)
);
-               if (jprobeHome != null){
-                       File dtdDir = new File(jprobeHome,
"Dtd/snapshot.dtd");
-                       is.setSystemId( "file:///" +
dtdDir.getAbsolutePath() );
-               }
-               report = dbuilder.parse( is );
-               report.normalize();
-
-               // create maps for faster node access
-               createNodeMaps();
-
-               // iterate over the classpath...
+               // Iterate over the classpath to identify reference classes
+        classFiles = new Hashtable();
                ClassPathLoader cpl = new ClassPathLoader(classPath);
                Enumeration enum = cpl.loaders();
                while ( enum.hasMoreElements() ){
@@ -207,8 +199,28 @@
                        log("Processing " + classes.length + " classes in "
+ fl.getFile());
                        // process all classes
                        for (int i = 0; i < classes.length; i++){
-                               serializeClass(classes[i]);
+                               classFiles.put(classes[i].getFullName(),
classes[i]);
                        }
+               }
+
+        // Load the JProbe coverage XML report
+               DocumentBuilder dbuilder = newBuilder();
+               InputSource is = new InputSource( new FileInputStream(file)
);
+               if (jprobeHome != null){
+                       File dtdDir = new File(jprobeHome, "Dtd");
+                       is.setSystemId( "file:///" +
dtdDir.getAbsolutePath() + "/");
+               }
+               report = dbuilder.parse( is );
+               report.normalize();
+
+               // create maps for faster node access (also filters out
unwanted nodes)
+               createNodeMaps();
+
+               // Make sure each class from the reference path ends up in
the report
+               Enumeration classes = classFiles.elements();
+               while ( classes.hasMoreElements() ){
+                       ClassFile cf = (ClassFile) classes.nextElement();
+            serializeClass(cf);
                }
                // update the document with the stats
                update();



Confidential Information. This email is for intended recipient only.



Reply via email to