You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bu...@apache.org on 2001/10/02 01:26:02 UTC
DO NOT REPLY [Bug 3913] New: -
The covreport task does not remove classes not in the reference classpath
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3913>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3913
The covreport task does not remove classes not in the reference classpath
Summary: The covreport task does not remove classes not in the
reference classpath
Product: Ant
Version: 1.4
Platform: PC
OS/Version: Windows NT/2K
Status: NEW
Severity: Normal
Priority: Other
Component: Optional Tasks
AssignedTo: ant-dev@jakarta.apache.org
ReportedBy: garrick.olson@aceva.com
The documentation states classes will be removed from the coverage report if
they are not in the reference classpath. The implementation does not filter
out these classes properly.
Here is a patch to fix the problem:
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();