/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit.internal.state; import java.util.*; import javax.annotation.*; import mockit.internal.*; import static mockit.internal.expectations.RecordAndReplayExecution.*; public final class SavePoint { @Nonnull private final Set<ClassIdentification> previousTransformedClasses; @Nonnull private final Map<Class<?>, byte[]> previousRedefinedClasses; private final int previousCaptureTransformerCount; @Nonnull private final List<Class<?>> previousMockedClasses; @Nonnull private final MockClasses.SavePoint previousMockClasses; public SavePoint() { MockFixture mockFixture = TestRun.mockFixture(); previousTransformedClasses = mockFixture.getTransformedClasses(); previousRedefinedClasses = mockFixture.getRedefinedClasses(); previousCaptureTransformerCount = mockFixture.getCaptureTransformerCount(); previousMockedClasses = mockFixture.getMockedClasses(); previousMockClasses = TestRun.getMockClasses().new SavePoint(); } public synchronized void rollback() { RECORD_OR_REPLAY_LOCK.lock(); try { MockFixture mockFixture = TestRun.mockFixture(); mockFixture.removeCaptureTransformers(previousCaptureTransformerCount); mockFixture.restoreTransformedClasses(previousTransformedClasses); mockFixture.restoreRedefinedClasses(previousRedefinedClasses); mockFixture.removeMockedClasses(previousMockedClasses); previousMockClasses.rollback(); } finally { RECORD_OR_REPLAY_LOCK.unlock(); } } }