diff --git a/pom.xml b/pom.xml index f49ee78d..25c30a61 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ HEAD - 0.23.0 + 0.22.1 -SNAPSHOT edu.hm.hafner.coverage diff --git a/src/main/java/edu/hm/hafner/coverage/FileNode.java b/src/main/java/edu/hm/hafner/coverage/FileNode.java index 568ce553..0a9c3405 100644 --- a/src/main/java/edu/hm/hafner/coverage/FileNode.java +++ b/src/main/java/edu/hm/hafner/coverage/FileNode.java @@ -29,7 +29,7 @@ */ @SuppressWarnings("PMD.GodClass") public final class FileNode extends Node { - private static final long serialVersionUID = -3795695377267542624L; + private static final long serialVersionUID = -3795695377267542624L; // Set to 1 when release 1.0.0 is ready private final NavigableMap coveredPerLine = new TreeMap<>(); private final NavigableMap missedPerLine = new TreeMap<>(); @@ -40,7 +40,7 @@ public final class FileNode extends Node { private final NavigableMap indirectCoverageChanges = new TreeMap<>(); private final NavigableMap coverageDelta = new TreeMap<>(); - private TreeString relativePath; + private TreeString relativePath; // @since 0.22.0 /** * Creates a new {@link FileNode} with the given name. @@ -68,6 +68,18 @@ public FileNode(final String name, final String relativePath) { this(name, TreeString.valueOf(relativePath)); } + /** + * Called after de-serialization to retain backward compatibility. + * + * @return this + */ + protected Object readResolve() { + if (relativePath == null) { + relativePath = TreeString.valueOf(StringUtils.EMPTY); + } + return this; + } + @Override public FileNode copy() { var file = new FileNode(getName(), relativePath); diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java deleted file mode 100644 index 5e5174ae..00000000 --- a/src/main/java/module-info.java +++ /dev/null @@ -1,10 +0,0 @@ -module edu.hm.hafner.metric { - requires java.xml; - requires org.apache.commons.lang3; - requires com.github.spotbugs.annotations; - requires com.google.errorprone.annotations; - requires edu.hm.hafner.codingstyle; - - exports edu.hm.hafner.coverage; - exports edu.hm.hafner.coverage.registry; -} diff --git a/src/test/java/edu/hm/hafner/coverage/AbstractNodeTest.java b/src/test/java/edu/hm/hafner/coverage/AbstractNodeTest.java index 7929aef3..a4764c04 100644 --- a/src/test/java/edu/hm/hafner/coverage/AbstractNodeTest.java +++ b/src/test/java/edu/hm/hafner/coverage/AbstractNodeTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import edu.hm.hafner.coverage.Coverage.CoverageBuilder; +import edu.hm.hafner.util.SerializableTest; import nl.jqno.equalsverifier.EqualsVerifier; import nl.jqno.equalsverifier.api.EqualsVerifierApi; @@ -12,7 +13,7 @@ import static edu.hm.hafner.coverage.assertions.Assertions.*; -abstract class AbstractNodeTest { +abstract class AbstractNodeTest extends SerializableTest { private static final String NAME = "Node Name"; private static final String CHILD = "Child"; private static final Coverage MUTATION_COVERAGE = new CoverageBuilder().setMetric(Metric.MUTATION) @@ -20,6 +21,11 @@ abstract class AbstractNodeTest { .setMissed(10) .build(); + @Override + protected Node createSerializable() { + return createNode("Serialized"); + } + abstract Metric getMetric(); abstract Node createNode(String name); diff --git a/src/test/java/edu/hm/hafner/coverage/FileNodeTest.java b/src/test/java/edu/hm/hafner/coverage/FileNodeTest.java index 1be28b0e..00e72567 100644 --- a/src/test/java/edu/hm/hafner/coverage/FileNodeTest.java +++ b/src/test/java/edu/hm/hafner/coverage/FileNodeTest.java @@ -1,5 +1,6 @@ package edu.hm.hafner.coverage; +import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.Test; import edu.hm.hafner.util.TreeString; @@ -19,7 +20,6 @@ Metric getMetric() { void configureEqualsVerifier(final EqualsVerifierApi verifier) { verifier.withPrefabValues(TreeString.class, TreeString.valueOf("src"), TreeString.valueOf("test")) .suppress(Warning.NONFINAL_FIELDS); - } @Override @@ -66,4 +66,13 @@ void shouldGetFilePath() { assertThat(file.matches(Metric.FILE, otherPath.hashCode())).isTrue(); assertThat(file.matches(Metric.FILE, "wrong".hashCode())).isFalse(); } + + @Test + void shouldReadOldVersion() { + byte[] restored = readAllBytes("version-0.21.0.ser"); + + var serializable = (FileNode)createSerializable(); + serializable.setRelativePath(TreeString.valueOf(StringUtils.EMPTY)); + assertThatRestoredInstanceEqualsOriginalInstance(serializable, restore(restored)); + } } diff --git a/src/test/resources/edu/hm/hafner/coverage/version-0.21.0.ser b/src/test/resources/edu/hm/hafner/coverage/version-0.21.0.ser new file mode 100644 index 00000000..8d92b6bd Binary files /dev/null and b/src/test/resources/edu/hm/hafner/coverage/version-0.21.0.ser differ