aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2013-03-22 11:13:24 +0100
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2013-03-22 11:13:24 +0100
commitfc340a20c201bec9c0ee31ec16c85766477a1edf (patch)
tree6fd603ce58e6def5cb06d48bfb8c69bb0d346246 /org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
parent1b1935e739a09eb467c86036b480f513cd8bef4a (diff)
downloadjacoco-fc340a20c201bec9c0ee31ec16c85766477a1edf.tar.gz
Support for archives in Pack200 format (GitHub #91).
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java')
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java48
1 files changed, 34 insertions, 14 deletions
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java b/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
index 9ebb4a8d..5c66f6a3 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
@@ -16,12 +16,14 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.StringTokenizer;
+import java.util.zip.GZIPInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.jacoco.core.data.ExecutionData;
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.internal.ContentTypeDetector;
+import org.jacoco.core.internal.Pack200Streams;
import org.jacoco.core.internal.analysis.ClassAnalyzer;
import org.jacoco.core.internal.analysis.StringPool;
import org.jacoco.core.internal.data.CRC64;
@@ -125,25 +127,18 @@ public class Analyzer {
* @return number of class files found
* @throws IOException
* if the stream can't be read
+ * @deprecated Use {@link #analyzeAll(InputStream)} instead
*/
+ @Deprecated
public int analyzeArchive(final InputStream input) throws IOException {
- final ZipInputStream zip = new ZipInputStream(input);
- int count = 0;
- while (true) {
- final ZipEntry entry = zip.getNextEntry();
- if (entry == null) {
- break;
- }
- count += analyzeAll(zip);
- }
- return count;
+ return analyzeZip(input);
}
/**
* Analyzes all classes found in the given input stream. The input stream
- * may either represent a single class file or a ZIP archive that is
- * searched recursively for class files. All other content types are
- * ignored.
+ * may either represent a single class file, a ZIP archive, a Pack200
+ * archive or a gzip stream that is searched recursively for class files.
+ * All other content types are ignored.
*
* @param input
* input data
@@ -158,7 +153,11 @@ public class Analyzer {
analyzeClass(detector.getInputStream());
return 1;
case ContentTypeDetector.ZIPFILE:
- return analyzeArchive(detector.getInputStream());
+ return analyzeZip(detector.getInputStream());
+ case ContentTypeDetector.GZFILE:
+ return analyzeGzip(detector.getInputStream());
+ case ContentTypeDetector.PACK200FILE:
+ return analyzePack200(detector.getInputStream());
default:
return 0;
}
@@ -216,4 +215,25 @@ public class Analyzer {
return count;
}
+ private int analyzeZip(final InputStream input) throws IOException {
+ final ZipInputStream zip = new ZipInputStream(input);
+ int count = 0;
+ while (true) {
+ final ZipEntry entry = zip.getNextEntry();
+ if (entry == null) {
+ break;
+ }
+ count += analyzeAll(zip);
+ }
+ return count;
+ }
+
+ private int analyzeGzip(final InputStream input) throws IOException {
+ return analyzeAll(new GZIPInputStream(input));
+ }
+
+ private int analyzePack200(final InputStream input) throws IOException {
+ return analyzeAll(Pack200Streams.unpack(input));
+ }
+
}