diff options
author | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2013-03-22 11:13:24 +0100 |
---|---|---|
committer | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2013-03-22 11:13:24 +0100 |
commit | fc340a20c201bec9c0ee31ec16c85766477a1edf (patch) | |
tree | 6fd603ce58e6def5cb06d48bfb8c69bb0d346246 /org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java | |
parent | 1b1935e739a09eb467c86036b480f513cd8bef4a (diff) | |
download | jacoco-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.java | 48 |
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)); + } + } |