From 88a313d7eb555410d7c0c6932de1330efff0062a Mon Sep 17 00:00:00 2001 From: iirina Date: Wed, 22 May 2019 00:45:46 -0700 Subject: [PATCH] Update BranchDetailAnalyzer. BranchDetailAnalyzer should have also been updated as part of https://github.com/bazelbuild/bazel/commit/ff1f74501ae275e87bc0d62d2d81881a40a216a0 when the jacoco version in bazel was updated. Changes like this will be avoided after #8378 is merged, because it enables testing with the java coverage tools at head. Closes #8417. PiperOrigin-RevId: 249400130 --- .../coverage/BranchDetailAnalyzer.java | 47 ++++++++++++++++--- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/src/java_tools/junitrunner/java/com/google/testing/coverage/BranchDetailAnalyzer.java b/src/java_tools/junitrunner/java/com/google/testing/coverage/BranchDetailAnalyzer.java index 6ffb874987c31d..35afa57dcd5c5a 100644 --- a/src/java_tools/junitrunner/java/com/google/testing/coverage/BranchDetailAnalyzer.java +++ b/src/java_tools/junitrunner/java/com/google/testing/coverage/BranchDetailAnalyzer.java @@ -14,6 +14,8 @@ package com.google.testing.coverage; +import java.io.IOException; +import java.io.InputStream; import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -22,6 +24,7 @@ import org.jacoco.core.analysis.ICoverageVisitor; import org.jacoco.core.data.ExecutionData; import org.jacoco.core.data.ExecutionDataStore; +import org.jacoco.core.internal.InputStreams; import org.jacoco.core.internal.data.CRC64; import org.jacoco.core.internal.flow.ClassProbesAdapter; import org.objectweb.asm.ClassReader; @@ -38,16 +41,37 @@ public class BranchDetailAnalyzer extends Analyzer { private final Map branchDetails; public BranchDetailAnalyzer(final ExecutionDataStore executionData) { - super(executionData, new ICoverageVisitor() { - @Override - public void visitCoverage(IClassCoverage coverage) { - } - }); - + super( + executionData, + new ICoverageVisitor() { + @Override + public void visitCoverage(IClassCoverage coverage) {} + }); this.executionData = executionData; this.branchDetails = new TreeMap(); } + // Override all analyzeClass methods. + @Override + public void analyzeClass(final InputStream input, final String location) throws IOException { + final byte[] buffer; + try { + buffer = InputStreams.readFully(input); + } catch (final IOException e) { + throw analyzerError(location, e); + } + analyzeClass(buffer, location); + } + + @Override + public void analyzeClass(final byte[] buffer, final String location) throws IOException { + try { + analyzeClass(buffer); + } catch (final RuntimeException cause) { + throw analyzerError(location, cause); + } + } + @Override public void analyzeClass(final ClassReader reader) { final Map lineToBranchExp = mapProbes(reader); @@ -78,6 +102,17 @@ public void analyzeClass(final ClassReader reader) { } } + private void analyzeClass(final byte[] source) { + final ClassReader reader = new ClassReader(source); + analyzeClass(reader); + } + + private IOException analyzerError(final String location, final Exception cause) { + final IOException ex = new IOException(String.format("Error while analyzing %s.", location)); + ex.initCause(cause); + return ex; + } + // Generate the line to probeExp map so that we can evaluate the coverage. private Map mapProbes(final ClassReader reader) { final ClassProbesMapper mapper = new ClassProbesMapper();