Snap for 7080740 from a6dd58522b54e7cf493c968d04a29a72820038f4 to mainline-extservices-release

Change-Id: Ib6c7101da32a5fa422eba29ea76ae8c8386c1e2c
diff --git a/Android.bp b/Android.bp
index 7b7d3f4..0641bde 100644
--- a/Android.bp
+++ b/Android.bp
@@ -66,10 +66,7 @@
 // Generates stubs containing the classes that will be referenced by instrumented bytecode.
 droidstubs {
     name: "jacoco-stubs-gen",
-    srcs: [
-        "org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java",
-        "org.jacoco.core/src/org/jacoco/core/data/IExecutionData.java",
-    ],
+    srcs: ["org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java"],
 }
 
 // A stubs target containing the parts of JaCoCo that we need to add to the hidden API whitelist.
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java
index ee9d40b..69a9909 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java
@@ -16,7 +16,6 @@
 import java.util.Properties;
 
 import org.jacoco.core.data.ExecutionData;
-import org.jacoco.core.data.IExecutionData;
 import org.jacoco.core.data.ExecutionDataStore;
 import org.jacoco.core.runtime.AgentOptions;
 import org.jacoco.core.runtime.RuntimeData;
@@ -29,7 +28,7 @@
 
 	// BEGIN android-change
 	// private static final RuntimeData DATA;
-	private static final Map<Long, IExecutionData> DATA = new HashMap<Long, IExecutionData>();
+	private static final Map<Long, ExecutionData> DATA = new HashMap<Long, ExecutionData>();
 	// END android-change
 	private static final String CONFIG_RESOURCE = "/jacoco-agent.properties";
 
@@ -45,7 +44,6 @@
 		// no instances
 	}
 
-	// BEGIN android-change
 	/**
 	 * API for offline instrumented classes.
 	 * 
@@ -55,25 +53,27 @@
 	 *            VM class name
 	 * @param probecount
 	 *            probe count for this class
-	 * @return IExecutionData instance for this class
+	 * @return probe array instance for this class
 	 */
-	public static IExecutionData getExecutionData(final long classid,
+	public static boolean[] getProbes(final long classid,
 			final String classname, final int probecount) {
+		// BEGIN android-change
 		// return DATA.getExecutionData(Long.valueOf(classid), classname,
 		//		probecount).getProbes();
 		synchronized (DATA) {
-			IExecutionData entry = DATA.get(classid);
+			ExecutionData entry = DATA.get(classid);
 			if (entry == null) {
 				entry = new ExecutionData(classid, classname, probecount);
 				DATA.put(classid, entry);
 			} else {
 				entry.assertCompatibility(classid, classname, probecount);
 			}
-			return entry;
+			return entry.getProbes();
 		}
+		// END android-change
 	}
-	// END android-change
 
+	// BEGIN android-change
 	/**
 	 * Creates a default agent, using config loaded from the classpath resource and the system
 	 * properties, and a runtime data instance populated with the execution data accumulated by
@@ -87,7 +87,7 @@
 				System.getProperties());
 		synchronized (DATA) {
 			ExecutionDataStore store = new ExecutionDataStore();
-			for (IExecutionData data : DATA.values()) {
+			for (ExecutionData data : DATA.values()) {
 				store.put(data);
 			}
 			return Agent.getInstance(new AgentOptions(config), new RuntimeData(store));
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java
index 4519d28..cacf4cb 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java
@@ -20,7 +20,7 @@
 import java.util.List;
 
 import org.jacoco.cli.internal.Command;
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.ExecutionDataReader;
 import org.jacoco.core.data.IExecutionDataVisitor;
 import org.jacoco.core.data.ISessionInfoVisitor;
@@ -68,15 +68,13 @@
 			}
 		});
 		reader.setExecutionDataVisitor(new IExecutionDataVisitor() {
-			// BEGIN android-change
-			public void visitClassExecution(final IExecutionData data) {
+			public void visitClassExecution(final ExecutionData data) {
 				out.printf("%016x  %3d of %3d   %s%n",
 						Long.valueOf(data.getId()),
-						Integer.valueOf(getHitCount(data.getProbesCopy())),
-						Integer.valueOf(data.getProbeCount()),
+						Integer.valueOf(getHitCount(data.getProbes())),
+						Integer.valueOf(data.getProbes().length),
 						data.getName());
 			}
-			// END android-change
 		});
 		reader.read();
 		in.close();
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 7759b89..76b7be3 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
@@ -20,7 +20,7 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.ExecutionDataStore;
 import org.jacoco.core.internal.ContentTypeDetector;
 import org.jacoco.core.internal.InputStreams;
@@ -78,18 +78,16 @@
 	 */
 	private ClassVisitor createAnalyzingVisitor(final long classid,
 			final String className) {
-		// BEGIN android-change
-		final IExecutionData data = executionData.get(classid);
+		final ExecutionData data = executionData.get(classid);
 		final boolean[] probes;
 		final boolean noMatch;
 		if (data == null) {
 			probes = null;
 			noMatch = executionData.contains(className);
 		} else {
-			probes = data.getProbesCopy();
+			probes = data.getProbes();
 			noMatch = false;
 		}
-		// END android-change
 		final ClassCoverageImpl coverage = new ClassCoverageImpl(className,
 				classid, noMatch);
 		final ClassAnalyzer analyzer = new ClassAnalyzer(coverage, probes,
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ExecutionData.java b/org.jacoco.core/src/org/jacoco/core/data/ExecutionData.java
index a728e03..d98775e 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ExecutionData.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ExecutionData.java
@@ -20,9 +20,7 @@
  * has to be taken about the probe data array of type <code>boolean[]</code>
  * which can be modified.
  */
-// BEGIN android-change
-public final class ExecutionData implements IExecutionData {
-// END android-change
+public final class ExecutionData {
 
 	private final long id;
 
@@ -83,45 +81,17 @@
 		return name;
 	}
 
-	// BEGIN android-change
 	/**
-	 * Returns a copy of the current probe values.
-	 *
-	 * @return copy of the probe array
-	 */
-	public boolean[] getProbesCopy() {
-		return Arrays.copyOf(probes, probes.length);
-	}
-
-	/**
-	 * The number of probes in this ExecutionData.
-	 *
-	 * @return the number of probes
-	 */
-	public int getProbeCount() {
-		return probes.length;
-	}
-
-	/**
-	 * Returns the execution data probe for a given index. A value of
-	 * <code>true</code> indicates that the corresponding probe was
-	 * executed.
+	 * Returns the execution data probes. A value of <code>true</code> indicates
+	 * that the corresponding probe was executed.
 	 * 
 	 * @return probe data
 	 */
-	public boolean getProbe(final int index) {
-		return probes[index];
+	public boolean[] getProbes() {
+		return probes;
 	}
 
 	/**
-	 * Sets the execution data probe for a given index to <code>true</code>.
-	 */
-	public void setProbe(final int index) {
-		probes[index] = true;
-	}
-	// END android-change
-
-	/**
 	 * Sets all probes to <code>false</code>.
 	 */
 	public void reset() {
@@ -157,9 +127,7 @@
 	 * @param other
 	 *            execution data to merge
 	 */
-	// BEGIN android-change
-	public void merge(final IExecutionData other) {
-	// END android-change
+	public void merge(final ExecutionData other) {
 		merge(other, true);
 	}
 
@@ -186,12 +154,10 @@
 	 * @param flag
 	 *            merge mode
 	 */
-	public void merge(final IExecutionData other, final boolean flag) {
-		// BEGIN android-change
+	public void merge(final ExecutionData other, final boolean flag) {
 		assertCompatibility(other.getId(), other.getName(),
-				other.getProbeCount());
-		final boolean[] otherData = other.getProbesCopy();
-		// END android-change
+				other.getProbes().length);
+		final boolean[] otherData = other.getProbes();
 		for (int i = 0; i < probes.length; i++) {
 			if (otherData[i]) {
 				probes[i] = flag;
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
index ce0bec4..3e567a3 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
@@ -28,9 +28,7 @@
  */
 public final class ExecutionDataStore implements IExecutionDataVisitor {
 
-	// BEGIN android-change
-	private final Map<Long, IExecutionData> entries = new HashMap<Long, IExecutionData>();
-	// END android-change
+	private final Map<Long, ExecutionData> entries = new HashMap<Long, ExecutionData>();
 
 	private final Set<String> names = new HashSet<String>();
 
@@ -46,11 +44,9 @@
 	 *             to a corresponding one, that is already contained
 	 * @see ExecutionData#assertCompatibility(long, String, int)
 	 */
-	// BEGIN android-change
-	public void put(final IExecutionData data) throws IllegalStateException {
+	public void put(final ExecutionData data) throws IllegalStateException {
 		final Long id = Long.valueOf(data.getId());
-		final IExecutionData entry = entries.get(id);
-		// END android-change
+		final ExecutionData entry = entries.get(id);
 		if (entry == null) {
 			entries.put(id, data);
 			names.add(data.getName());
@@ -72,11 +68,9 @@
 	 *             to a corresponding one, that is already contained
 	 * @see ExecutionData#assertCompatibility(long, String, int)
 	 */
-	// BEGIN android-change
-	public void subtract(final IExecutionData data) throws IllegalStateException {
+	public void subtract(final ExecutionData data) throws IllegalStateException {
 		final Long id = Long.valueOf(data.getId());
-		final IExecutionData entry = entries.get(id);
-		// END android-change
+		final ExecutionData entry = entries.get(id);
 		if (entry != null) {
 			entry.merge(data, false);
 		}
@@ -90,9 +84,7 @@
 	 * @see #subtract(ExecutionData)
 	 */
 	public void subtract(final ExecutionDataStore store) {
-		// BEGIN android-change
-		for (final IExecutionData data : store.getContents()) {
-		// END android-change
+		for (final ExecutionData data : store.getContents()) {
 			subtract(data);
 		}
 	}
@@ -105,9 +97,7 @@
 	 *            class id
 	 * @return execution data or <code>null</code>
 	 */
-	// BEGIN android-change
-	public IExecutionData get(final long id) {
-	// END android-change
+	public ExecutionData get(final long id) {
 		return entries.get(Long.valueOf(id));
 	}
 
@@ -136,11 +126,9 @@
 	 *            probe data length
 	 * @return execution data
 	 */
-	// BEGIN android-change
-	public IExecutionData get(final Long id, final String name,
+	public ExecutionData get(final Long id, final String name,
 			final int probecount) {
-		IExecutionData entry = entries.get(id);
-		// END android-change
+		ExecutionData entry = entries.get(id);
 		if (entry == null) {
 			entry = new ExecutionData(id.longValue(), name, probecount);
 			entries.put(id, entry);
@@ -156,9 +144,7 @@
 	 * execution data objects itself are not removed.
 	 */
 	public void reset() {
-		// BEGIN android-change
-		for (final IExecutionData executionData : this.entries.values()) {
-		// END android-change
+		for (final ExecutionData executionData : this.entries.values()) {
 			executionData.reset();
 		}
 	}
@@ -168,11 +154,9 @@
 	 * 
 	 * @return current contents
 	 */
-	// BEGIN android-change
-	public Collection<IExecutionData> getContents() {
-		return new ArrayList<IExecutionData>(entries.values());
+	public Collection<ExecutionData> getContents() {
+		return new ArrayList<ExecutionData>(entries.values());
 	}
-	// END android-change
 
 	/**
 	 * Writes the content of the store to the given visitor interface.
@@ -181,18 +165,14 @@
 	 *            interface to write content to
 	 */
 	public void accept(final IExecutionDataVisitor visitor) {
-		// BEGIN android-change
-		for (final IExecutionData data : getContents()) {
-		// END android-change
+		for (final ExecutionData data : getContents()) {
 			visitor.visitClassExecution(data);
 		}
 	}
 
 	// === IExecutionDataVisitor ===
 
-	// BEGIN android-change
-	public void visitClassExecution(final IExecutionData data) {
-	// END android-change
+	public void visitClassExecution(final ExecutionData data) {
 		put(data);
 	}
 }
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataWriter.java b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataWriter.java
index bdf3445..e697dda 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataWriter.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataWriter.java
@@ -94,17 +94,13 @@
 		}
 	}
 
-	// BEGIN android-change
-	public void visitClassExecution(final IExecutionData data) {
-	// END android-change
+	public void visitClassExecution(final ExecutionData data) {
 		if (data.hasHits()) {
 			try {
 				out.writeByte(BLOCK_EXECUTIONDATA);
 				out.writeLong(data.getId());
 				out.writeUTF(data.getName());
-				// BEGIN android-change
-				out.writeBooleanArray(data.getProbesCopy());
-				// END android-change
+				out.writeBooleanArray(data.getProbes());
 			} catch (final IOException e) {
 				throw new RuntimeException(e);
 			}
diff --git a/org.jacoco.core/src/org/jacoco/core/data/IExecutionData.java b/org.jacoco.core/src/org/jacoco/core/data/IExecutionData.java
deleted file mode 100644
index 289c372..0000000
--- a/org.jacoco.core/src/org/jacoco/core/data/IExecutionData.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// BEGIN android-change
-package org.jacoco.core.data;
-
-/**
- * Interface for interacting with execution data for a single Java class.
- */
-public interface IExecutionData {
-
-	/**
-	 * Return the unique identifier for this class. The identifier is the CRC64
-	 * checksum of the raw class file definition.
-	 * 
-	 * @return class identifier
-	 */
-	public abstract long getId();
-
-	/**
-	 * The VM name of the class.
-	 * 
-	 * @return VM name
-	 */
-	public abstract String getName();
-
-	/**
-	 * The number of instrumentation probes for this class.
-	 * 
-	 * @return number of probes
-	 */
-	public abstract int getProbeCount();
-
-	/**
-	 * Returns a copy of the probe data as a boolean array.
-	 *
-	 * Changes to the returned array will not be reflected in the execution data.
-	 * 
-	 * @return copy of the probe data
-	 */
-	public abstract boolean[] getProbesCopy();
-
-	/**
-	 * Sets all probes to <code>false</code>.
-	 */
-	public abstract void reset();
-
-	/**
-	 * Checks whether any probe has been hit.
-	 * 
-	 * @return <code>true</code>, if at least one probe has been hit
-	 */
-	public abstract boolean hasHits();
-
-	/**
-	 * Merges the given execution data into the probe data of this object. I.e.
-	 * a probe entry in this object is marked as executed (<code>true</code>) if
-	 * this probe or the corresponding other probe was executed. So the result
-	 * is
-	 * 
-	 * <pre>
-	 * A or B
-	 * </pre>
-	 * 
-	 * The probe array of the other object is not modified.
-	 * 
-	 * @param other
-	 *            execution data to merge
-	 */
-	public abstract void merge(final IExecutionData other);
-
-	/**
-	 * Merges the given execution data into the probe data of this object. A
-	 * probe in this object is set to the value of <code>flag</code> if the
-	 * corresponding other probe was executed. For <code>flag==true</code> this
-	 * corresponds to
-	 * 
-	 * <pre>
-	 * A or B
-	 * </pre>
-	 * 
-	 * For <code>flag==false</code> this can be considered as a subtraction
-	 * 
-	 * <pre>
-	 * A and not B
-	 * </pre>
-	 * 
-	 * The probe array of the other object is not modified.
-	 * 
-	 * @param other
-	 *            execution data to merge
-	 * @param flag
-	 *            merge mode
-	 */
-	public abstract void merge(final IExecutionData other, boolean flag);
-
-	/**
-	 * Asserts that this execution data object is compatible with the given
-	 * parameters. The purpose of this check is to detect a very unlikely class
-	 * id collision.
-	 * 
-	 * @param id
-	 *            other class id, must be the same
-	 * @param name
-	 *            other name, must be equal to this name
-	 * @param probecount
-	 *            probe data length, must be the same as for this data
-	 * @throws IllegalStateException
-	 *             if the given parameters do not match this instance
-	 */
-	public abstract void assertCompatibility(final long id, final String name, final int probeCount) throws IllegalStateException;
-
-	/**
-	 * Returns the execution data probe for a given index. A value of
-	 * <code>true</code> indicates that the corresponding probe was
-	 * executed.
-	 *
-	 * @param index  the probe's index to look up
-	 * 
-	 * @return probe data
-	 */
-	public abstract boolean getProbe(final int index);
-
-	/**
-	 * Sets the execution data probe at the given index to <code>true</code>.
-	 *
-	 * @param index  the probe's index to set
-	 * @param value  the value to set the probe to
-	 */
-	public abstract void setProbe(final int index);
-}
-// END android-change
diff --git a/org.jacoco.core/src/org/jacoco/core/data/IExecutionDataVisitor.java b/org.jacoco.core/src/org/jacoco/core/data/IExecutionDataVisitor.java
index 14eabbe..6cea7c5 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/IExecutionDataVisitor.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/IExecutionDataVisitor.java
@@ -24,8 +24,6 @@
 	 * @param data
 	 *            execution data for a class
 	 */
-	// BEGIN android-change
-	void visitClassExecution(IExecutionData data);
-	// END android-change
+	void visitClassExecution(ExecutionData data);
 
 }
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
index 4d4e1ba..85e83a3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
@@ -77,9 +77,7 @@
 	 * Data type of the field that stores coverage information for a class (
 	 * <code>boolean[]</code>).
 	 */
-	// BEGIN android-change
-	public static final String DATAFIELD_DESC = "Lorg/jacoco/core/data/IExecutionData;";
-	// END android-change
+	public static final String DATAFIELD_DESC = "[Z";
 
 	// === Init Method ===
 
@@ -91,9 +89,7 @@
 	/**
 	 * Descriptor of the initialization method.
 	 */
-	// BEGIN android-change
-	public static final String INITMETHOD_DESC = "()Lorg/jacoco/core/data/IExecutionData;";
-	// END android-change
+	public static final String INITMETHOD_DESC = "()[Z";
 
 	/**
 	 * Access modifiers of the initialization method.
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
index 0cac8f8..63fbf76 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
@@ -67,20 +67,25 @@
 
 	public void insertProbe(final int id) {
 
-		// BEGIN android-change
-		// For a probe we call setProbe on the IExecutionData object.
+		// For a probe we set the corresponding position in the boolean[] array
+		// to true.
 
 		mv.visitVarInsn(Opcodes.ALOAD, variable);
 
-		// Stack[0]: Lorg/jacoco/core/data/IExecutionData;
+		// Stack[0]: [Z
 
 		InstrSupport.push(mv, id);
 
 		// Stack[1]: I
-		// Stack[0]: Lorg/jacoco/core/data/IExecutionData;
+		// Stack[0]: [Z
 
-		mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "org/jacoco/core/data/IExecutionData", "setProbe", "(I)V", true);
-		// END android-change
+		mv.visitInsn(Opcodes.ICONST_1);
+
+		// Stack[2]: I
+		// Stack[1]: I
+		// Stack[0]: [Z
+
+		mv.visitInsn(Opcodes.BASTORE);
 	}
 
 	@Override
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/LoggerRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/LoggerRuntime.java
index bef4203..7255395 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/LoggerRuntime.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/LoggerRuntime.java
@@ -168,9 +168,7 @@
 		@Override
 		public void publish(final LogRecord record) {
 			if (key.equals(record.getMessage())) {
-				// BEGIN android-change
-				data.getExecutionData(record.getParameters());
-				// END android-change
+				data.getProbes(record.getParameters());
 			}
 		}
 
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java b/org.jacoco.core/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java
index a5e88b6..af6671e 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java
@@ -50,10 +50,8 @@
 		mv.visitLdcInsn(Long.valueOf(classid));
 		mv.visitLdcInsn(classname);
 		InstrSupport.push(mv, probecount);
-		// BEGIN android-change
-		mv.visitMethodInsn(Opcodes.INVOKESTATIC, runtimeClassName, "getExecutionData",
-				"(JLjava/lang/String;I)Lorg/jacoco/core/data/IExecutionData;", false);
-		// END android-change
+		mv.visitMethodInsn(Opcodes.INVOKESTATIC, runtimeClassName, "getProbes",
+				"(JLjava/lang/String;I)[Z", false);
 		return 4;
 	}
 
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/RuntimeData.java b/org.jacoco.core/src/org/jacoco/core/runtime/RuntimeData.java
index c0fbb65..afb5b7f 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/RuntimeData.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/RuntimeData.java
@@ -11,7 +11,7 @@
  *******************************************************************************/
 package org.jacoco.core.runtime;
 
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.ExecutionDataStore;
 import org.jacoco.core.data.IExecutionDataVisitor;
 import org.jacoco.core.data.ISessionInfoVisitor;
@@ -128,18 +128,15 @@
 	 *            probe data length
 	 * @return execution data
 	 */
-	// BEGIN android-change
-	public IExecutionData getExecutionData(final Long id, final String name,
+	public ExecutionData getExecutionData(final Long id, final String name,
 			final int probecount) {
-	// END android-change
 		synchronized (store) {
 			return store.get(id, name, probecount);
 		}
 	}
 
-	// BEGIN android-change
 	/**
-	 * Retrieves the execution data for a given class. The passed
+	 * Retrieves the execution probe array for a given class. The passed
 	 * {@link Object} array instance is used for parameters and the return value
 	 * as follows. Call parameters:
 	 * 
@@ -152,19 +149,18 @@
 	 * Return value:
 	 * 
 	 * <ul>
-	 * <li>args[0]: execution data ({@link IExecutionData})
+	 * <li>args[0]: probe array (<code>boolean[]</code>)
 	 * </ul>
 	 * 
 	 * @param args
 	 *            parameter array of length 3
 	 */
-	public void getExecutionData(final Object[] args) {
+	public void getProbes(final Object[] args) {
 		final Long classid = (Long) args[0];
 		final String name = (String) args[1];
 		final int probecount = ((Integer) args[2]).intValue();
-		args[0] = getExecutionData(classid, name, probecount);
+		args[0] = getExecutionData(classid, name, probecount).getProbes();
 	}
-	// END android-change
 
 	/**
 	 * In violation of the regular semantic of {@link Object#equals(Object)}
@@ -177,9 +173,7 @@
 	@Override
 	public boolean equals(final Object args) {
 		if (args instanceof Object[]) {
-			// BEGIN android-change
-			getExecutionData((Object[]) args);
-			// END android-change
+			getProbes((Object[]) args);
 		}
 		return super.equals(args);
 	}
diff --git a/org.jacoco.report/src/org/jacoco/report/IReportVisitor.java b/org.jacoco.report/src/org/jacoco/report/IReportVisitor.java
index 1cf4aed..db36796 100644
--- a/org.jacoco.report/src/org/jacoco/report/IReportVisitor.java
+++ b/org.jacoco.report/src/org/jacoco/report/IReportVisitor.java
@@ -15,7 +15,7 @@
 import java.util.Collection;
 import java.util.List;
 
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.SessionInfo;
 
 /**
@@ -39,9 +39,7 @@
 	 *             in case of IO problems with the report writer
 	 */
 	void visitInfo(List<SessionInfo> sessionInfos,
-			// BEGIN android-change
-			Collection<IExecutionData> executionData) throws IOException;
-			// END android-change
+			Collection<ExecutionData> executionData) throws IOException;
 
 	/**
 	 * Has to be called after all report data has been emitted.
diff --git a/org.jacoco.report/src/org/jacoco/report/MultiReportVisitor.java b/org.jacoco.report/src/org/jacoco/report/MultiReportVisitor.java
index f4fefa8..3cd5e55 100644
--- a/org.jacoco.report/src/org/jacoco/report/MultiReportVisitor.java
+++ b/org.jacoco.report/src/org/jacoco/report/MultiReportVisitor.java
@@ -17,7 +17,7 @@
 import java.util.List;
 
 import org.jacoco.core.analysis.IBundleCoverage;
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.SessionInfo;
 
 /**
@@ -41,9 +41,7 @@
 	}
 
 	public void visitInfo(final List<SessionInfo> sessionInfos,
-			// BEGIN android-change
-			final Collection<IExecutionData> executionData) throws IOException {
-			// END android-chnage
+			final Collection<ExecutionData> executionData) throws IOException {
 		for (final IReportVisitor v : visitors) {
 			v.visitInfo(sessionInfos, executionData);
 		}
diff --git a/org.jacoco.report/src/org/jacoco/report/check/RulesChecker.java b/org.jacoco.report/src/org/jacoco/report/check/RulesChecker.java
index f743560..cc6acf0 100644
--- a/org.jacoco.report/src/org/jacoco/report/check/RulesChecker.java
+++ b/org.jacoco.report/src/org/jacoco/report/check/RulesChecker.java
@@ -17,7 +17,7 @@
 import java.util.List;
 
 import org.jacoco.core.analysis.IBundleCoverage;
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.SessionInfo;
 import org.jacoco.report.ILanguageNames;
 import org.jacoco.report.IReportGroupVisitor;
@@ -86,9 +86,7 @@
 			}
 
 			public void visitInfo(final List<SessionInfo> sessionInfos,
-					// BEGIN android-change
-					final Collection<IExecutionData> executionData)
-					// END android-change
+					final Collection<ExecutionData> executionData)
 					throws IOException {
 			}
 
diff --git a/org.jacoco.report/src/org/jacoco/report/csv/CSVFormatter.java b/org.jacoco.report/src/org/jacoco/report/csv/CSVFormatter.java
index 42939da..793e215 100644
--- a/org.jacoco.report/src/org/jacoco/report/csv/CSVFormatter.java
+++ b/org.jacoco.report/src/org/jacoco/report/csv/CSVFormatter.java
@@ -17,7 +17,7 @@
 import java.util.Collection;
 import java.util.List;
 
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.SessionInfo;
 import org.jacoco.report.ILanguageNames;
 import org.jacoco.report.IReportVisitor;
@@ -84,9 +84,7 @@
 			}
 
 			public void visitInfo(final List<SessionInfo> sessionInfos,
-					// BEGIN android-change
-					final Collection<IExecutionData> executionData)
-					// END android-change
+					final Collection<ExecutionData> executionData)
 					throws IOException {
 				// Info not used for CSV report
 			}
diff --git a/org.jacoco.report/src/org/jacoco/report/html/HTMLFormatter.java b/org.jacoco.report/src/org/jacoco/report/html/HTMLFormatter.java
index ce8cd2d..9994ced 100644
--- a/org.jacoco.report/src/org/jacoco/report/html/HTMLFormatter.java
+++ b/org.jacoco.report/src/org/jacoco/report/html/HTMLFormatter.java
@@ -18,7 +18,7 @@
 
 import org.jacoco.core.analysis.IBundleCoverage;
 import org.jacoco.core.analysis.ICoverageNode.CounterEntity;
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.SessionInfo;
 import org.jacoco.report.ILanguageNames;
 import org.jacoco.report.IMultiReportOutput;
@@ -193,16 +193,12 @@
 		return new IReportVisitor() {
 
 			private List<SessionInfo> sessionInfos;
-			// BEGIN android-change
-			private Collection<IExecutionData> executionData;
-			// END android-change
+			private Collection<ExecutionData> executionData;
 
 			private HTMLGroupVisitor groupHandler;
 
 			public void visitInfo(final List<SessionInfo> sessionInfos,
-					// BEGIN android-change
-					final Collection<IExecutionData> executionData)
-					// END android-change
+					final Collection<ExecutionData> executionData)
 					throws IOException {
 				this.sessionInfos = sessionInfos;
 				this.executionData = executionData;
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SessionsPage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SessionsPage.java
index 3a48902..67de494 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SessionsPage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SessionsPage.java
@@ -20,7 +20,7 @@
 import java.util.Date;
 import java.util.List;
 
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.SessionInfo;
 import org.jacoco.report.ILanguageNames;
 import org.jacoco.report.internal.ReportOutputFolder;
@@ -48,7 +48,7 @@
 
 	private final DateFormat dateFormat;
 
-	private final List<IExecutionData> executionData;
+	private final List<ExecutionData> executionData;
 
 	private final ElementIndex index;
 
@@ -69,24 +69,18 @@
 	 *            settings context
 	 */
 	public SessionsPage(final List<SessionInfo> sessionInfos,
-			// BEGIN android-change
-			final Collection<IExecutionData> executionData,
-			// END android-change
+			final Collection<ExecutionData> executionData,
 			final ElementIndex index, final ReportPage parent,
 			final ReportOutputFolder folder, final IHTMLReportContext context) {
 		super(parent, folder, context);
 		this.sessionInfos = sessionInfos;
-		// BEGIN android-change
-		this.executionData = new ArrayList<IExecutionData>(executionData);
-		// END android-change
+		this.executionData = new ArrayList<ExecutionData>(executionData);
 		this.index = index;
 		this.dateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,
 				DateFormat.DEFAULT, context.getLocale());
 		final ILanguageNames names = context.getLanguageNames();
-		// BEGIN android-change
-		Collections.sort(this.executionData, new Comparator<IExecutionData>() {
-			public int compare(final IExecutionData e1, final IExecutionData e2) {
-			// END android-change
+		Collections.sort(this.executionData, new Comparator<ExecutionData>() {
+			public int compare(final ExecutionData e1, final ExecutionData e2) {
 				return names.getQualifiedClassName(e1.getName()).compareTo(
 						names.getQualifiedClassName(e2.getName()));
 			}
@@ -135,9 +129,7 @@
 		}
 		final HTMLElement tbody = table.tbody();
 		final ILanguageNames names = context.getLanguageNames();
-		// BEGIN android-change
-		for (final IExecutionData e : executionData) {
-		// END android-change
+		for (final ExecutionData e : executionData) {
 			final HTMLElement tr = tbody.tr();
 			final String link = index.getLinkToClass(e.getId());
 			final String qualifiedName = names.getQualifiedClassName(e
diff --git a/org.jacoco.report/src/org/jacoco/report/xml/XMLFormatter.java b/org.jacoco.report/src/org/jacoco/report/xml/XMLFormatter.java
index 3bda5ed..a1fee86 100644
--- a/org.jacoco.report/src/org/jacoco/report/xml/XMLFormatter.java
+++ b/org.jacoco.report/src/org/jacoco/report/xml/XMLFormatter.java
@@ -17,7 +17,7 @@
 import java.util.List;
 
 import org.jacoco.core.analysis.IBundleCoverage;
-import org.jacoco.core.data.IExecutionData;
+import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.SessionInfo;
 import org.jacoco.report.IReportGroupVisitor;
 import org.jacoco.report.IReportVisitor;
@@ -61,9 +61,7 @@
 			private XMLGroupVisitor groupVisitor;
 
 			public void visitInfo(final List<SessionInfo> sessionInfos,
-					// BEGIN android-change
-					final Collection<IExecutionData> executionData)
-					// END android-change
+					final Collection<ExecutionData> executionData)
 					throws IOException {
 				this.sessionInfos = sessionInfos;
 			}