mockit.internal.faking.FakeClasses Maven / Gradle / Ivy
/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.internal.faking;
import java.lang.reflect.*;
import java.util.*;
import java.util.Map.*;
import javax.annotation.*;
import mockit.*;
import mockit.internal.util.*;
public final class FakeClasses
{
private static final Field INVOKED_INSTANCE_FIELD;
private static final Method ON_TEAR_DOWN_METHOD;
static
{
try {
INVOKED_INSTANCE_FIELD = MockUp.class.getDeclaredField("invokedInstance");
INVOKED_INSTANCE_FIELD.setAccessible(true);
ON_TEAR_DOWN_METHOD = MockUp.class.getDeclaredMethod("onTearDown");
ON_TEAR_DOWN_METHOD.setAccessible(true);
}
catch (NoSuchFieldException e) { throw new RuntimeException(e); }
catch (NoSuchMethodException e) { throw new RuntimeException(e); }
}
private static void notifyOfTearDown(@Nonnull MockUp mockUp)
{
try { ON_TEAR_DOWN_METHOD.invoke(mockUp); }
catch (IllegalAccessException ignore) {}
catch (InvocationTargetException e) { e.getCause().printStackTrace(); }
}
public static final class MockUpInstances
{
@Nonnull public final MockUp initialMockUp;
boolean hasMockupsForSingleInstances;
MockUpInstances(@Nonnull MockUp initialMockUp)
{
this.initialMockUp = initialMockUp;
hasMockupsForSingleInstances = false;
}
public boolean hasMockUpsForSingleInstances() { return hasMockupsForSingleInstances; }
void notifyMockUpOfTearDown() { notifyOfTearDown(initialMockUp); }
}
@Nonnull private final Map> startupFakes;
@Nonnull private final Map, MockUpInstances> fakeClassesToFakeInstances;
@Nonnull private final Map