package japicmp.model; /** * This interface defines a method to check whether the implementing * element has changed in a way that is compatible or incompatible * regarding the Java Object Serialization mechanism as defined in * http://docs.oracle.com/javase/7/docs/platform/serialization/spec/serialTOC.html. */ public interface JApiJavaObjectSerializationCompatibility { public enum JApiJavaObjectSerializationChangeStatus { /** * The class is not serializable. */ NOT_SERIALIZABLE("not serializable"), /** * The class is serializable and changed in a compatible way. */ SERIALIZABLE_COMPATIBLE("compatible"), /** * The serialVersionUID of this class has changed. */ SERIALIZABLE_INCOMPATIBLE_SERIALVERSIONUID_MODIFIED("serialVersionUID modified"), /** * The serialVersionUID has been removed from this class but the new default serialVersionUID does not match * the old one. */ SERIALIZABLE_INCOMPATIBLE_SERIALVERSIONUID_REMOVED_AND_NOT_MACHTES_NEW_DEFAULT("serialVersionUID removed but not matches new default serialVersionUID"), /** * The serialVersionUID has been added but does not match the old default serialVersionUID. */ SERIALIZABLE_INCOMPATIBLE_SERIALVERSIONUID_ADDED_AND_NOT_MATCHES_OLD_DEFAULT("serialVersionUID added but not matches old default serialVersionUID"), /** * The type of the class has changed. */ SERIALIZABLE_INCOMPATIBLE_CLASS_TYPE_MODIFIED("class type modified"), /** * The class now implements Externalizable instead of Serializable. */ SERIALIZABLE_INCOMPATIBLE_CHANGED_FROM_SERIALIZABLE_TO_EXTERNALIZABLE("changed from Serializable to Externalizable"), /** * The class now implements Serializable instead of Externalizable. */ SERIALIZABLE_INCOMPATIBLE_CHANGED_FROM_EXTERNALIZABLE_TO_SERIALIZABLE("changed from Externalizable to Serializable"), /** * The class no longer implements Serializable. */ SERIALIZABLE_INCOMPATIBLE_SERIALIZABLE_REMOVED("Serializable removed"), /** * The class no longer implements Externalizable. */ SERIALIZABLE_INCOMPATIBLE_EXTERNALIZABLE_REMOVED("Externalizable removed"), /** * A field has been removed. */ SERIALIZABLE_INCOMPATIBLE_FIELD_REMOVED("field removed"), /** * A field has been changed from nonstatic to static. */ SERIALIZABLE_INCOMPATIBLE_FIELD_CHANGED_FROM_NONSTATIC_TO_STATIC("field changed from nonstatic to static"), /** * A field has been changed from nontransient to transient. */ SERIALIZABLE_INCOMPATIBLE_FIELD_CHANGED_FROM_NONTRANSIENT_TO_TRANSIENT("field changed from nontransient to transient"), /** * The type of a field has been changed. */ SERIALIZABLE_INCOMPATIBLE_FIELD_TYPE_MODIFIED("type of field has changed"), /** * The class is serializable but changed in an incompatible way * and the serialVersionUID has not been changed. */ SERIALIZABLE_INCOMPATIBLE_BUT_SUID_EQUAL("incompatible but serialVersionUID equal"), /** * The class has been removed. */ SERIALIZABLE_INCOMPATIBLE_CLASS_REMOVED("class removed"), /** * The default serialVersionUID has changed. */ SERIALIZABLE_INCOMPATIBLE_DEFAULT_SERIALVERSIONUID_CHANGED("default serialVersionUID changed"), /** * The superclass has changed. */ SERIALIZABLE_INCOMPATIBLE_SUPERCLASS_MODIFIED("superclass modified"); private final String description; JApiJavaObjectSerializationChangeStatus(String description) { this.description = description; } public boolean isIncompatible() { if (this == NOT_SERIALIZABLE || this == SERIALIZABLE_COMPATIBLE) { return false; } return true; } public String getDescription() { return description; } } /** * Returns if this class is serializable and if it has changed in a compatible * or incompatible way. * * @return the type of change */ JApiJavaObjectSerializationChangeStatus getJavaObjectSerializationCompatible(); /** * Returns the {@link japicmp.model.JApiSerialVersionUid} * * @return the serialVersionUID */ JApiSerialVersionUid getSerialVersionUid(); }