/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit.coverage.dataItems; import java.util.*; import javax.annotation.*; import mockit.internal.state.*; public final class InstanceFieldData extends FieldData { private static final long serialVersionUID = 6991762113575259754L; @Nonnull private final transient Map<Integer, List<Integer>> testIdsToAssignments = new HashMap<Integer, List<Integer>>(); void registerAssignment(@Nonnull Object instance) { List<Integer> dataForRunningTest = getDataForRunningTest(); Integer instanceId = System.identityHashCode(instance); if (!dataForRunningTest.contains(instanceId)) { dataForRunningTest.add(instanceId); } writeCount++; } void registerRead(@Nonnull Object instance) { List<Integer> dataForRunningTest = getDataForRunningTest(); Integer instanceId = System.identityHashCode(instance); dataForRunningTest.remove(instanceId); readCount++; } @Nonnull private List<Integer> getDataForRunningTest() { int testId = TestRun.getTestId(); List<Integer> fieldData = testIdsToAssignments.get(testId); if (fieldData == null) { fieldData = new LinkedList<Integer>(); testIdsToAssignments.put(testId, fieldData); } return fieldData; } @Override void markAsCoveredIfNoUnreadValuesAreLeft() { for (List<Integer> unreadInstances : testIdsToAssignments.values()) { if (unreadInstances.isEmpty()) { covered = true; break; } } } @Nonnull public List<Integer> getOwnerInstancesWithUnreadAssignments() { if (isCovered()) { return Collections.emptyList(); } Collection<List<Integer>> assignments = testIdsToAssignments.values(); return assignments.iterator().next(); } }