package org.junit.internal; import java.io.Serializable; /** * This class exists solely to provide a serializable description of a value to be serialized as a field in * {@link AssumptionViolatedException}. Being a {@link Throwable}, it is required to be {@link Serializable}, but a * value of type Object provides no guarantee to be serializable. This class works around that limitation as * {@link AssumptionViolatedException} only every uses the string representation of the value, while still retaining * backwards compatibility with classes compiled against its class signature before 4.14 and/or deserialization of * previously serialized instances. */ class SerializableValueDescription implements Serializable { private final String value; private SerializableValueDescription(Object value) { this.value = String.valueOf(value); } /** * Factory method that checks to see if the value is already serializable. * @param value the value to make serializable * @return The provided value if it is null or already serializable, * the SerializableValueDescription representation of it if it is not. */ static Object asSerializableValue(Object value) { if (value == null || value instanceof Serializable) { return value; } else { return new SerializableValueDescription(value); } } @Override public String toString() { return value; } }