aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java2
-rw-r--r--org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java40
2 files changed, 30 insertions, 12 deletions
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
index f6c1e767..b4dd0c10 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
@@ -82,6 +82,8 @@ public class Agent implements IAgent {
/**
* Returns a global instance which is already started. If an agent has not
* been initialized then one will be created via {@link Offline#createAgent()}.
+ * This will capture any data written via {@link Offline#getProbes} prior to
+ * this call, but not subsequently.
*
* @return global instance
* @throws IllegalStateException
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 21a78bbd..7eac19fa 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
@@ -11,8 +11,11 @@
*******************************************************************************/
package org.jacoco.agent.rt.internal;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
+import org.jacoco.core.data.ExecutionData;
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.runtime.AgentOptions;
import org.jacoco.core.runtime.RuntimeData;
@@ -25,18 +28,17 @@ public final class Offline {
// BEGIN android-change
// private static final RuntimeData DATA;
- private static final ExecutionDataStore DATA;
+ private static final Map<Long, ExecutionData> DATA = new HashMap<Long, ExecutionData>();
// END android-change
private static final String CONFIG_RESOURCE = "/jacoco-agent.properties";
- static {
- // BEGIN android-change
- // final Properties config = ConfigLoader.load(CONFIG_RESOURCE,
- // System.getProperties());
- // DATA = Agent.getInstance(new AgentOptions(config)).getData();
- DATA = new ExecutionDataStore();
- // END android-change
- }
+ // BEGIN android-change
+ // static {
+ // final Properties config = ConfigLoader.load(CONFIG_RESOURCE,
+ // System.getProperties());
+ // DATA = Agent.getInstance(new AgentOptions(config)).getData();
+ // }
+ // END android-change
private Offline() {
// no instances
@@ -59,7 +61,14 @@ public final class Offline {
// return DATA.getExecutionData(Long.valueOf(classid), classname,
// probecount).getProbes();
synchronized (DATA) {
- return DATA.get(classid, classname, probecount).getProbes();
+ 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.getProbes();
}
// END android-change
}
@@ -68,14 +77,21 @@ public final class Offline {
/**
* 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
- * the probes.
+ * the probes up until this call is made (subsequent probe updates will not be reflected in
+ * this agent).
*
* @return the new agent
*/
static Agent createAgent() {
final Properties config = ConfigLoader.load(CONFIG_RESOURCE,
System.getProperties());
- return Agent.getInstance(new AgentOptions(config), new RuntimeData(DATA));
+ synchronized (DATA) {
+ ExecutionDataStore store = new ExecutionDataStore();
+ for (ExecutionData data : DATA.values()) {
+ store.put(data);
+ }
+ return Agent.getInstance(new AgentOptions(config), new RuntimeData(store));
+ }
}
// END android-change
}