blob: 256745b36296400612266863128d32e8298a16a4 [file] [log] [blame]
/*
* Copyright (c) 2018 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.invocation.mockref;
import java.io.ObjectStreamException;
import java.lang.ref.WeakReference;
/**
* A weak reference that is converted into a strong reference when serialized.
* See {@link MockReference}.
*/
public class MockWeakReference<T> implements MockReference<T> {
private final WeakReference<T> ref;
public MockWeakReference(T t) {
this.ref = new WeakReference<T>(t);
}
private Object writeReplace() throws ObjectStreamException {
return new MockStrongReference<T>(get(), true);
}
@Override
public T get() {
T ref = this.ref.get();
if (ref == null) {
throw new IllegalStateException("The mock object was garbage collected. " +
"This should not happen in normal circumstances when using public API. " +
"Typically, the test class keeps strong reference to the mock object " +
"and it prevents getting the mock collected. Mockito internally needs " +
"to keep weak references to mock objects to avoid memory leaks for " +
"certain types of MockMaker implementations. If you see this exception " +
"using Mockito public API, please file a bug. For more information see " +
"issue #1313.");
}
return ref;
}
}