You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/06/14 14:01:13 UTC
[commons-io] branch master updated: [IO-773] RegexFileFilter is no longer Serializable.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git
The following commit(s) were added to refs/heads/master by this push:
new ea1cbedd [IO-773] RegexFileFilter is no longer Serializable.
ea1cbedd is described below
commit ea1cbedd64cfe97fc98f6ef58baaae1125e0b0cd
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 14 10:01:06 2022 -0400
[IO-773] RegexFileFilter is no longer Serializable.
---
src/changes/changes.xml | 3 ++
.../commons/io/filefilter/RegexFileFilter.java | 3 +-
.../commons/io/filefilter/RegexFileFilterTest.java | 43 +++++++++++++++++-----
3 files changed, 39 insertions(+), 10 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7c0336aa..5ce75a7b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -171,6 +171,9 @@ The <action> type attribute can be add,update,fix,remove.
<action issue="IO-768" dev="ggregory" type="fix" due-to="Marcono1234, Michael Osipov">
Add reserved Windows file names CONIN$ and CONOUT$ to FileSystem #355.
</action>
+ <action issue="IO-773" dev="ggregory" type="fix" due-to="Dominik Reinarz, Gary Gregory">
+ RegexFileFilter is no longer Serializable.
+ </action>
<!-- ADD -->
<action type="add" dev="ggregory" due-to="Gary Gregory">
Add GitHub coverage.yml.
diff --git a/src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java b/src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java
index 946a8e04..0cf2a282 100644
--- a/src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java
@@ -104,8 +104,9 @@ public class RegexFileFilter extends AbstractFileFilter implements Serializable
* @param pattern regular expression to match.
* @throws IllegalArgumentException if the pattern is null.
*/
+ @SuppressWarnings("unchecked")
public RegexFileFilter(final Pattern pattern) {
- this(pattern, p -> p.getFileName().toString());
+ this(pattern, (Function<Path, String> & Serializable) p -> p.getFileName().toString());
}
/**
diff --git a/src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java b/src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java
index 17d0870b..e04a5a82 100644
--- a/src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java
+++ b/src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java
@@ -17,15 +17,21 @@
package org.apache.commons.io.filefilter;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.io.File;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.nio.file.FileVisitResult;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.function.Function;
import java.util.regex.Pattern;
import org.apache.commons.io.IOCase;
+import org.apache.commons.io.output.ByteArrayOutputStream;
import org.junit.jupiter.api.Test;
/**
@@ -65,9 +71,21 @@ public class RegexFileFilterTest {
}
}
+ private RegexFileFilter assertSerializable(final RegexFileFilter serializable) throws IOException {
+ try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+ try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
+ oos.writeObject(serializable);
+ }
+ baos.flush();
+ assertTrue(baos.toByteArray().length > 0);
+ }
+ return serializable;
+ }
+
@Test
- public void testRegex() {
- IOFileFilter filter = new RegexFileFilter("^.*[tT]est(-\\d+)?\\.java$");
+ public void testRegex() throws IOException {
+ RegexFileFilter filter = new RegexFileFilter("^.*[tT]est(-\\d+)?\\.java$");
+ assertSerializable(filter);
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test-10.java"), true);
assertFiltering(filter, new File("test-.java"), false);
@@ -77,6 +95,7 @@ public class RegexFileFilterTest {
assertFiltering(filter, new File("test-.java").toPath(), false);
filter = new RegexFileFilter("^[Tt]est.java$");
+ assertSerializable(filter);
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test.java"), true);
assertFiltering(filter, new File("tEST.java"), false);
@@ -86,6 +105,7 @@ public class RegexFileFilterTest {
assertFiltering(filter, new File("tEST.java").toPath(), false);
filter = new RegexFileFilter(Pattern.compile("^test.java$", Pattern.CASE_INSENSITIVE));
+ assertSerializable(filter);
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test.java"), true);
assertFiltering(filter, new File("tEST.java"), true);
@@ -95,6 +115,7 @@ public class RegexFileFilterTest {
assertFiltering(filter, new File("tEST.java").toPath(), true);
filter = new RegexFileFilter("^test.java$", Pattern.CASE_INSENSITIVE);
+ assertSerializable(filter);
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test.java"), true);
assertFiltering(filter, new File("tEST.java"), true);
@@ -104,6 +125,7 @@ public class RegexFileFilterTest {
assertFiltering(filter, new File("tEST.java").toPath(), true);
filter = new RegexFileFilter("^test.java$", IOCase.INSENSITIVE);
+ assertSerializable(filter);
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test.java"), true);
assertFiltering(filter, new File("tEST.java"), true);
@@ -115,21 +137,24 @@ public class RegexFileFilterTest {
@Test
public void testRegexEdgeCases() {
- assertThrows(IllegalArgumentException.class, () -> new RegexFileFilter((String) null));
- assertThrows(IllegalArgumentException.class, () -> new RegexFileFilter(null, Pattern.CASE_INSENSITIVE));
- assertThrows(IllegalArgumentException.class, () -> new RegexFileFilter(null, IOCase.INSENSITIVE));
- assertThrows(IllegalArgumentException.class, () -> new RegexFileFilter((java.util.regex.Pattern) null));
+ assertThrows(IllegalArgumentException.class, () -> assertSerializable(new RegexFileFilter((String) null)));
+ assertThrows(IllegalArgumentException.class, () -> assertSerializable(new RegexFileFilter(null, Pattern.CASE_INSENSITIVE)));
+ assertThrows(IllegalArgumentException.class, () -> assertSerializable(new RegexFileFilter(null, IOCase.INSENSITIVE)));
+ assertThrows(IllegalArgumentException.class, () -> assertSerializable(new RegexFileFilter((java.util.regex.Pattern) null)));
}
/**
* Tests https://issues.apache.org/jira/browse/IO-733.
+ * @throws IOException
*/
+ @SuppressWarnings("unchecked")
@Test
- public void testRegexFileNameOnly() {
+ public void testRegexFileNameOnly() throws IOException {
final Path path = Paths.get("folder", "Foo.java");
final String patternStr = "Foo.*";
- assertFiltering(new RegexFileFilter(patternStr), path, true);
- assertFiltering(new RegexFileFilter(Pattern.compile(patternStr), Path::toString), path, false);
+ assertFiltering(assertSerializable(new RegexFileFilter(patternStr)), path, true);
+ assertFiltering(assertSerializable(new RegexFileFilter(Pattern.compile(patternStr), (Function<Path, String> & Serializable) Path::toString)), path,
+ false);
}
}