From 87c38f598cc95bfaa92302e9a894a872c06b77ec Mon Sep 17 00:00:00 2001 From: Philippe Charles Date: Tue, 15 Mar 2022 17:40:43 +0100 Subject: [PATCH 1/8] Update for next development version --- java-io-base/pom.xml | 2 +- java-io-bom/pom.xml | 2 +- java-io-picocsv/pom.xml | 2 +- java-io-win/pom.xml | 2 +- java-io-xml-bind/pom.xml | 2 +- java-io-xml/pom.xml | 2 +- pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/java-io-base/pom.xml b/java-io-base/pom.xml index f6c4e4c..b17e08f 100644 --- a/java-io-base/pom.xml +++ b/java-io-base/pom.xml @@ -5,7 +5,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.18 + 0.0.19-SNAPSHOT java-io-base diff --git a/java-io-bom/pom.xml b/java-io-bom/pom.xml index eb07387..4998aae 100644 --- a/java-io-bom/pom.xml +++ b/java-io-bom/pom.xml @@ -7,7 +7,7 @@ java-io-parent com.github.nbbrd.java-io-util - 0.0.18 + 0.0.19-SNAPSHOT java-io-bom diff --git a/java-io-picocsv/pom.xml b/java-io-picocsv/pom.xml index 7f72836..08def00 100644 --- a/java-io-picocsv/pom.xml +++ b/java-io-picocsv/pom.xml @@ -7,7 +7,7 @@ java-io-parent com.github.nbbrd.java-io-util - 0.0.18 + 0.0.19-SNAPSHOT java-io-picocsv diff --git a/java-io-win/pom.xml b/java-io-win/pom.xml index 340de1f..80d5c14 100644 --- a/java-io-win/pom.xml +++ b/java-io-win/pom.xml @@ -7,7 +7,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.18 + 0.0.19-SNAPSHOT java-io-win diff --git a/java-io-xml-bind/pom.xml b/java-io-xml-bind/pom.xml index 4a1b92f..a1bc2f3 100644 --- a/java-io-xml-bind/pom.xml +++ b/java-io-xml-bind/pom.xml @@ -6,7 +6,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.18 + 0.0.19-SNAPSHOT java-io-xml-bind diff --git a/java-io-xml/pom.xml b/java-io-xml/pom.xml index a204ea8..653607a 100644 --- a/java-io-xml/pom.xml +++ b/java-io-xml/pom.xml @@ -6,7 +6,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.18 + 0.0.19-SNAPSHOT java-io-xml diff --git a/pom.xml b/pom.xml index 76ec674..8fea997 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.18 + 0.0.19-SNAPSHOT pom java-io From 0e9edd98b5d5d000a56a8d435d7b0a0e2511efc7 Mon Sep 17 00:00:00 2001 From: Philippe Charles Date: Thu, 17 Mar 2022 17:29:50 +0100 Subject: [PATCH 2/8] Add convenient CSV methods --- CHANGELOG.md | 4 ++ .../main/java/nbbrd/io/picocsv/Picocsv.java | 15 +++++ .../java/nbbrd/io/picocsv/PicocsvTest.java | 60 ++++++++++++++++--- 3 files changed, 71 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7967f05..f2f7cd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added + +- Add convenient CSV methods + ## [0.0.18] - 2022-03-15 ### Added diff --git a/java-io-picocsv/src/main/java/nbbrd/io/picocsv/Picocsv.java b/java-io-picocsv/src/main/java/nbbrd/io/picocsv/Picocsv.java index 1a68671..92a7d01 100644 --- a/java-io-picocsv/src/main/java/nbbrd/io/picocsv/Picocsv.java +++ b/java-io-picocsv/src/main/java/nbbrd/io/picocsv/Picocsv.java @@ -37,10 +37,12 @@ public static final class Parser implements TextParser { } @lombok.NonNull + @lombok.Getter @lombok.Builder.Default private final Csv.Format format = Csv.Format.DEFAULT; @lombok.NonNull + @lombok.Getter @lombok.Builder.Default private final Csv.ReaderOptions options = Csv.ReaderOptions.DEFAULT; @@ -83,6 +85,11 @@ public static final class Parser implements TextParser { return parse(newBufferedReader(resource, decoder), TextBuffers.of(resource, decoder)); } + public @NonNull T parseCsv(Csv.@NonNull Reader resource) throws IOException { + Objects.requireNonNull(resource, "resource"); + return handler.parse(resource); + } + private T parse(Reader charReader, TextBuffers buffers) throws IOException { try (Csv.Reader csv = Csv.Reader.of(format, options, charReader, buffers.getCharBufferSize())) { return handler.parse(csv); @@ -107,10 +114,12 @@ public static final class Formatter implements TextFormatter { } @lombok.NonNull + @lombok.Getter @lombok.Builder.Default private final Csv.Format format = Csv.Format.DEFAULT; @lombok.NonNull + @lombok.Getter @lombok.Builder.Default private final Csv.WriterOptions options = Csv.WriterOptions.DEFAULT; @@ -157,6 +166,12 @@ public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonN format(value, newBufferedWriter(resource, encoder), TextBuffers.of(resource, encoder)); } + public void formatCsv(@NonNull T value, Csv.@NonNull Writer resource) throws IOException { + Objects.requireNonNull(value, "value"); + Objects.requireNonNull(resource, "resource"); + handler.format(value, resource); + } + private void format(T value, Writer charWriter, TextBuffers buffers) throws IOException { try (Csv.Writer csv = Csv.Writer.of(format, options, charWriter, buffers.getCharBufferSize())) { handler.format(value, csv); diff --git a/java-io-picocsv/src/test/java/nbbrd/io/picocsv/PicocsvTest.java b/java-io-picocsv/src/test/java/nbbrd/io/picocsv/PicocsvTest.java index 0a413be..c3a99a8 100644 --- a/java-io-picocsv/src/test/java/nbbrd/io/picocsv/PicocsvTest.java +++ b/java-io-picocsv/src/test/java/nbbrd/io/picocsv/PicocsvTest.java @@ -1,17 +1,18 @@ package nbbrd.io.picocsv; import _test.io.ResourceId; -import nbbrd.io.text.TextFormatter; -import nbbrd.io.text.TextParser; import nbbrd.picocsv.Csv; import org.checkerframework.checker.nullness.qual.NonNull; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import java.io.BufferedReader; import java.io.IOException; +import java.io.StringWriter; import java.nio.charset.Charset; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import static _test.io.text.TextFormatterAssertions.assertTextFormatterCompliance; @@ -19,6 +20,8 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; +import static nbbrd.picocsv.Csv.DEFAULT_CHAR_BUFFER_SIZE; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatNullPointerException; @SuppressWarnings("ConstantConditions") @@ -28,28 +31,69 @@ public class PicocsvTest { public void testParser(@TempDir Path temp) throws IOException { assertThatNullPointerException().isThrownBy(() -> Picocsv.Parser.builder(null).build()); - TextParser> parser = Picocsv.Parser + Picocsv.Parser> x = Picocsv.Parser .builder(User::parse) - .options(Csv.ReaderOptions.DEFAULT.toBuilder().lenientSeparator(true).build()) + .options(LENIENT) .build(); - assertTextParserCompliance(temp, parser, USERS, charset -> RESOURCE_ID, ENCODINGS, true); + assertTextParserCompliance(temp, x, USERS, charset -> RESOURCE_ID, ENCODINGS, true); + } + + @Test + public void testParseCsv() throws IOException { + Picocsv.Parser> x = Picocsv.Parser + .builder(User::parse) + .options(LENIENT) + .build(); + + assertThatNullPointerException().isThrownBy(() -> x.parseCsv(null)); + + try (BufferedReader chars = RESOURCE_ID.open(UTF_8)) { + try (Csv.Reader csv = Csv.Reader.of(x.getFormat(), x.getOptions(), chars, DEFAULT_CHAR_BUFFER_SIZE)) { + assertThat(x.parseCsv(csv)) + .containsExactlyElementsOf(USERS); + } + } } @Test public void testFormatter(@TempDir Path temp) throws IOException { assertThatNullPointerException().isThrownBy(() -> Picocsv.Formatter.builder(null).build()); - TextFormatter> formatter = Picocsv.Formatter + Picocsv.Formatter> x = Picocsv.Formatter + .builder(User::format) + .format(UNIX) + .build(); + + String expected = RESOURCE_ID.copyByLineToString(UTF_8, Csv.Format.UNIX_SEPARATOR); + + assertTextFormatterCompliance(temp, x, USERS, encoding -> expected, ENCODINGS); + } + + @Test + public void testFormatCsv() throws IOException { + Picocsv.Formatter> x = Picocsv.Formatter .builder(User::format) - .format(Csv.Format.RFC4180.toBuilder().separator(Csv.Format.UNIX_SEPARATOR).build()) + .format(UNIX) .build(); + assertThatNullPointerException().isThrownBy(() -> x.formatCsv(null, Csv.Writer.of(Csv.Format.DEFAULT, Csv.WriterOptions.DEFAULT, new StringWriter(), DEFAULT_CHAR_BUFFER_SIZE))); + assertThatNullPointerException().isThrownBy(() -> x.formatCsv(Collections.emptyList(), null)); + String expected = RESOURCE_ID.copyByLineToString(UTF_8, Csv.Format.UNIX_SEPARATOR); - assertTextFormatterCompliance(temp, formatter, USERS, encoding -> expected, ENCODINGS); + try (StringWriter chars = new StringWriter()) { + try (Csv.Writer csv = Csv.Writer.of(x.getFormat(), x.getOptions(), chars, DEFAULT_CHAR_BUFFER_SIZE)) { + x.formatCsv(USERS, csv); + } + assertThat(chars.toString()).isEqualTo(expected); + } } + private static final Csv.ReaderOptions LENIENT = Csv.ReaderOptions.DEFAULT.toBuilder().lenientSeparator(true).build(); + + private static final Csv.Format UNIX = Csv.Format.RFC4180.toBuilder().separator(Csv.Format.UNIX_SEPARATOR).build(); + private static final ResourceId RESOURCE_ID = new ResourceId(PicocsvTest.class, "/Users.csv"); private static final List ENCODINGS = singletonList(UTF_8); From a0fb0d98eca88a5f02a1dcf2fa64ec75eb327078 Mon Sep 17 00:00:00 2001 From: Philippe Charles Date: Thu, 17 Mar 2022 18:01:23 +0100 Subject: [PATCH 3/8] Add bridge between Text* and Parser/Formatter --- CHANGELOG.md | 1 + .../java/nbbrd/io/text/TextFormatter.java | 26 +++++-- .../main/java/nbbrd/io/text/TextParser.java | 26 +++++-- java-io-base/src/test/java/_test/io/POC.java | 51 ++++++++++++++ .../java/nbbrd/io/text/FormatterTest.java | 2 +- .../test/java/nbbrd/io/text/ParserTest.java | 2 +- .../java/nbbrd/io/text/TextFormatterTest.java | 67 ++++++++++++++---- .../java/nbbrd/io/text/TextParserTest.java | 69 +++++++++++++++---- 8 files changed, 205 insertions(+), 39 deletions(-) create mode 100644 java-io-base/src/test/java/_test/io/POC.java diff --git a/CHANGELOG.md b/CHANGELOG.md index f2f7cd0..da0985a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added - Add convenient CSV methods +- Add bridge between Text* and Parser/Formatter ## [0.0.18] - 2022-03-15 diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java b/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java index b426e55..85c58a7 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java @@ -1,9 +1,6 @@ package nbbrd.io.text; -import internal.io.text.ComposeTextFormatter; -import internal.io.text.FunctionalTextFormatter; -import internal.io.text.LegacyFiles; -import internal.io.text.WithCharsetFileFormatter; +import internal.io.text.*; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.FileFormatter; import nbbrd.io.Resource; @@ -17,6 +14,7 @@ import java.nio.file.Path; import java.util.Objects; import java.util.Optional; +import java.util.function.Consumer; import java.util.function.Function; public interface TextFormatter { @@ -80,10 +78,28 @@ default void formatStream(@NonNull T value, IOSupplier t return new ComposeTextFormatter<>(this, before); } - default @NonNull FileFormatter withCharset(@NonNull Charset encoding) { + default @NonNull FileFormatter asFileFormatter(@NonNull Charset encoding) { return new WithCharsetFileFormatter<>(this, encoding); } + default @NonNull Formatter asFormatter() { + return asFormatter(InternalFormatter::doNothing); + } + + default @NonNull Formatter asFormatter(@NonNull Consumer onError) { + Objects.requireNonNull(onError, "onError"); + return value -> { + if (value != null) { + try { + return formatToString(value); + } catch (Throwable ex) { + onError.accept(ex); + } + } + return null; + }; + } + @StaticFactoryMethod static @NonNull TextFormatter onFormattingWriter(@NonNull IOBiConsumer function) { return new FunctionalTextFormatter<>(function); diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextParser.java b/java-io-base/src/main/java/nbbrd/io/text/TextParser.java index 56912ba..fc418fc 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextParser.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextParser.java @@ -1,9 +1,6 @@ package nbbrd.io.text; -import internal.io.text.AndThenTextParser; -import internal.io.text.FunctionalTextParser; -import internal.io.text.LegacyFiles; -import internal.io.text.WithCharsetFileParser; +import internal.io.text.*; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.FileParser; import nbbrd.io.Resource; @@ -17,6 +14,7 @@ import java.nio.file.Path; import java.util.Objects; import java.util.Optional; +import java.util.function.Consumer; import java.util.function.Function; public interface TextParser { @@ -72,10 +70,28 @@ public interface TextParser { return new AndThenTextParser<>(this, after); } - default @NonNull FileParser withCharset(@NonNull Charset encoding) { + default @NonNull FileParser asFileParser(@NonNull Charset encoding) { return new WithCharsetFileParser<>(this, encoding); } + default @NonNull Parser asParser() { + return asParser(InternalParser::doNothing); + } + + default @NonNull Parser asParser(@NonNull Consumer onError) { + Objects.requireNonNull(onError, "onError"); + return chars -> { + if (chars != null) { + try { + return parseChars(chars); + } catch (Throwable ex) { + onError.accept(ex); + } + } + return null; + }; + } + @StaticFactoryMethod static @NonNull TextParser onParsingReader(@NonNull IOFunction function) { return new FunctionalTextParser<>(function); diff --git a/java-io-base/src/test/java/_test/io/POC.java b/java-io-base/src/test/java/_test/io/POC.java new file mode 100644 index 0000000..69b989f --- /dev/null +++ b/java-io-base/src/test/java/_test/io/POC.java @@ -0,0 +1,51 @@ +package _test.io; + +import nbbrd.io.FileFormatter; +import nbbrd.io.FileParser; +import nbbrd.io.text.TextFormatter; +import nbbrd.io.text.TextParser; +import org.checkerframework.checker.nullness.qual.NonNull; + +import java.io.*; +import java.nio.charset.Charset; +import java.util.function.Function; + +public class POC implements TextFormatter, TextParser, FileFormatter, FileParser { + + @Override + public void formatWriter(@NonNull T value, @NonNull Writer resource) throws IOException { + } + + @Override + public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { + } + + @Override + public @NonNull T parseReader(@NonNull Reader resource) throws IOException { + return null; + } + + @Override + public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { + return null; + } + + @Override + public void formatStream(@NonNull T value, @NonNull OutputStream resource) throws IOException { + } + + @Override + public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { + return null; + } + + @Override + public @NonNull POC compose(@NonNull Function before) { + return null; + } + + @Override + public @NonNull POC andThen(@NonNull Function after) { + return null; + } +} diff --git a/java-io-base/src/test/java/nbbrd/io/text/FormatterTest.java b/java-io-base/src/test/java/nbbrd/io/text/FormatterTest.java index 5f2b689..f1d8c56 100644 --- a/java-io-base/src/test/java/nbbrd/io/text/FormatterTest.java +++ b/java-io-base/src/test/java/nbbrd/io/text/FormatterTest.java @@ -251,7 +251,7 @@ public void testOf2() { assertThat(p2.apply("abc")).isEqualTo("hello"); } - private static void assertCompliance(Formatter f, T value, CharSequence text) { + public static void assertCompliance(Formatter f, T value, CharSequence text) { assertThatCode(() -> f.format(null)).doesNotThrowAnyException(); assertThatCode(() -> f.formatAsString(null)).doesNotThrowAnyException(); assertThatCode(() -> f.formatValue(null)).doesNotThrowAnyException(); diff --git a/java-io-base/src/test/java/nbbrd/io/text/ParserTest.java b/java-io-base/src/test/java/nbbrd/io/text/ParserTest.java index 21e0793..e0a439a 100644 --- a/java-io-base/src/test/java/nbbrd/io/text/ParserTest.java +++ b/java-io-base/src/test/java/nbbrd/io/text/ParserTest.java @@ -399,7 +399,7 @@ public void testOf2() { } @SuppressWarnings({"null", "ConstantConditions"}) - private static void assertCompliance(Parser p, CharSequence input) { + public static void assertCompliance(Parser p, CharSequence input) { assertThatCode(() -> p.parse(null)).doesNotThrowAnyException(); assertThatCode(() -> p.parseValue(null)).doesNotThrowAnyException(); diff --git a/java-io-base/src/test/java/nbbrd/io/text/TextFormatterTest.java b/java-io-base/src/test/java/nbbrd/io/text/TextFormatterTest.java index d231b85..bfb8f08 100644 --- a/java-io-base/src/test/java/nbbrd/io/text/TextFormatterTest.java +++ b/java-io-base/src/test/java/nbbrd/io/text/TextFormatterTest.java @@ -6,10 +6,13 @@ import java.io.IOException; import java.io.Writer; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import static _test.io.text.TextFormatterAssertions.assertTextFormatterCompliance; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Collections.singleton; +import static nbbrd.io.text.TextFormatter.onFormattingWriter; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatNullPointerException; @@ -17,38 +20,76 @@ public class TextFormatterTest { @Test public void testCompliance(@TempDir Path temp) throws IOException { - assertTextFormatterCompliance(temp, TextFormatter.onFormattingWriter(TextFormatterTest::formatFromString), "world", encoding -> "world", singleton(UTF_8)); + assertTextFormatterCompliance(temp, onFormattingWriter(TextFormatterTest::toUpperCase), "world", encoding -> "WORLD", singleton(UTF_8)); } @SuppressWarnings("ConstantConditions") @Test - public void testWithCharset(@TempDir Path temp) throws IOException { - TextFormatter original = TextFormatter.onFormattingWriter(TextFormatterTest::formatFromString); + public void testAsFileFormatter(@TempDir Path temp) throws IOException { + TextFormatter original = onFormattingWriter(TextFormatterTest::toUpperCase); - assertThatNullPointerException().isThrownBy(() -> original.withCharset(null)); + assertThatNullPointerException().isThrownBy(() -> original.asFileFormatter(null)); - original.withCharset(UTF_8).formatPath("world", temp.resolve("x1.txt")); + original.asFileFormatter(UTF_8).formatPath("world", temp.resolve("x1.txt")); assertThat(temp.resolve("x1.txt")) - .hasContent("world"); + .hasContent("WORLD"); - original.compose(String::toUpperCase).withCharset(UTF_8).formatPath("world", temp.resolve("x2.txt")); + original.compose(TextFormatterTest::duplicate).asFileFormatter(UTF_8).formatPath("world", temp.resolve("x2.txt")); assertThat(temp.resolve("x2.txt")) - .hasContent("WORLD"); + .hasContent("WORLDWORLD"); - original.withCharset(UTF_8).compose(String::toUpperCase).formatPath("world", temp.resolve("x3.txt")); + original.asFileFormatter(UTF_8).compose(TextFormatterTest::duplicate).formatPath("world", temp.resolve("x3.txt")); assertThat(temp.resolve("x3.txt")) - .hasContent("WORLD"); + .hasContent("WORLDWORLD"); } @SuppressWarnings("ConstantConditions") @Test public void testOnFormattingWriter() { assertThatNullPointerException() - .isThrownBy(() -> TextFormatter.onFormattingWriter(null)) + .isThrownBy(() -> onFormattingWriter(null)) .withMessageContaining("function"); } - private static void formatFromString(String value, Writer resource) throws IOException { - resource.write(value); + @Test + public void testAsFormatter() { + Formatter ok = onFormattingWriter(TextFormatterTest::toUpperCase).asFormatter(); + assertThat(ok.format("hello")).isEqualTo("HELLO"); + assertThat(ok.format(null)).isNull(); + + Formatter ko = onFormattingWriter(TextFormatterTest::fail).asFormatter(); + assertThat(ko.format("hello")).isNull(); + assertThat(ko.format(null)).isNull(); + } + + @Test + public void testAsFormatterWithListener() { + List errors = new ArrayList<>(); + + Formatter ok = onFormattingWriter(TextFormatterTest::toUpperCase).asFormatter(errors::add); + assertThat(ok.format("hello")).isEqualTo("HELLO"); + assertThat(errors).isEmpty(); + assertThat(ok.format(null)).isNull(); + assertThat(errors).isEmpty(); + FormatterTest.assertCompliance(ok, "hello", "HELLO"); + + Formatter ko = onFormattingWriter(TextFormatterTest::fail).asFormatter(errors::add); + assertThat(ko.format("hello")).isNull(); + assertThat(errors).hasSize(1).element(0).isInstanceOf(IOException.class); + assertThat(ko.format(null)).isNull(); + assertThat(errors).hasSize(1); + FormatterTest.assertCompliance(ko, "hello", null); + } + + private static void toUpperCase(String value, Writer resource) throws IOException { + resource.write(value.toUpperCase()); + } + + private static void fail(String value, Writer resource) throws IOException { + throw new IOException(); + } + + private static String duplicate(String value) { + return value + value; } } diff --git a/java-io-base/src/test/java/nbbrd/io/text/TextParserTest.java b/java-io-base/src/test/java/nbbrd/io/text/TextParserTest.java index 6d2841f..8afde71 100644 --- a/java-io-base/src/test/java/nbbrd/io/text/TextParserTest.java +++ b/java-io-base/src/test/java/nbbrd/io/text/TextParserTest.java @@ -6,10 +6,13 @@ import java.io.*; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import static _test.io.text.TextParserAssertions.assertTextParserCompliance; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Collections.singleton; +import static nbbrd.io.text.TextParser.onParsingReader; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatNullPointerException; @@ -18,46 +21,84 @@ public class TextParserTest { @Test public void testCompliance(@TempDir Path temp) throws IOException { ResourceId resourceId = new ResourceId(TextParserTest.class, "hello.txt"); - assertTextParserCompliance(temp, TextParser.onParsingReader(TextParserTest::parseToString), "world", encoding -> resourceId, singleton(UTF_8), true); + assertTextParserCompliance(temp, onParsingReader(TextParserTest::toUpperCase), "WORLD", encoding -> resourceId, singleton(UTF_8), true); } @SuppressWarnings("ConstantConditions") @Test - public void testWithCharset() throws IOException { - TextParser original = TextParser.onParsingReader(TextParserTest::parseToString); + public void testAsFileParser() throws IOException { + TextParser original = onParsingReader(TextParserTest::toUpperCase); - assertThatNullPointerException().isThrownBy(() -> original.withCharset(null)); + assertThatNullPointerException().isThrownBy(() -> original.asFileParser(null)); - assertThat(original.withCharset(UTF_8).parseResource(TextParserTest.class, "hello.txt")) - .isEqualTo("world"); - - assertThat(original.andThen(String::toUpperCase).withCharset(UTF_8).parseResource(TextParserTest.class, "hello.txt")) + assertThat(original.asFileParser(UTF_8).parseResource(TextParserTest.class, "hello.txt")) .isEqualTo("WORLD"); - assertThat(original.withCharset(UTF_8).andThen(String::toUpperCase).parseResource(TextParserTest.class, "hello.txt")) - .isEqualTo("WORLD"); + assertThat(original.andThen(TextParserTest::duplicate).asFileParser(UTF_8).parseResource(TextParserTest.class, "hello.txt")) + .isEqualTo("WORLDWORLD"); + + assertThat(original.asFileParser(UTF_8).andThen(TextParserTest::duplicate).parseResource(TextParserTest.class, "hello.txt")) + .isEqualTo("WORLDWORLD"); } @SuppressWarnings("ConstantConditions") @Test public void testOnParsingReader() { assertThatNullPointerException() - .isThrownBy(() -> TextParser.onParsingReader(null)) + .isThrownBy(() -> onParsingReader(null)) .withMessageContaining("function"); assertThatNullPointerException() - .isThrownBy(() -> TextParser.onParsingReader(o -> null).parseReader(new StringReader(""))) + .isThrownBy(() -> onParsingReader(o -> null).parseReader(new StringReader(""))) .withMessageContaining("result"); } - private static String parseToString(Reader resource) throws IOException { + @Test + public void testAsParser() { + Parser ok = onParsingReader(TextParserTest::toUpperCase).asParser(); + assertThat(ok.parse("hello")).isEqualTo("HELLO"); + assertThat(ok.parse(null)).isNull(); + + Parser ko = onParsingReader(TextParserTest::fail).asParser(); + assertThat(ko.parse("hello")).isNull(); + assertThat(ko.parse(null)).isNull(); + } + + @Test + public void testAsParserWithListener() { + List errors = new ArrayList<>(); + + Parser ok = onParsingReader(TextParserTest::toUpperCase).asParser(errors::add); + assertThat(ok.parse("hello")).isEqualTo("HELLO"); + assertThat(errors).isEmpty(); + assertThat(ok.parse(null)).isNull(); + assertThat(errors).isEmpty(); + ParserTest.assertCompliance(ok, "hello"); + + Parser ko = onParsingReader(TextParserTest::fail).asParser(errors::add); + assertThat(ko.parse("hello")).isNull(); + assertThat(errors).hasSize(1).element(0).isInstanceOf(IOException.class); + assertThat(ko.parse(null)).isNull(); + assertThat(errors).hasSize(1); + ParserTest.assertCompliance(ko, "hello"); + } + + private static String toUpperCase(Reader resource) throws IOException { try (StringWriter writer = new StringWriter()) { BufferedReader reader = new BufferedReader(resource); int c; while ((c = reader.read()) != -1) { writer.write(c); } - return writer.toString(); + return writer.toString().toUpperCase(); } } + + private static String fail(Reader resource) throws IOException { + throw new IOException(); + } + + private static String duplicate(String value) { + return value + value; + } } From f32cf2398b660484b5d4459dffe1a452d5d7c723 Mon Sep 17 00:00:00 2001 From: Philippe Charles Date: Fri, 18 Mar 2022 10:44:14 +0100 Subject: [PATCH 4/8] Simplify non-null checks --- .../java/internal/io/AndThenFileParser.java | 15 +++-- .../internal/io/ComposeFileFormatter.java | 18 ++--- .../internal/io/DecodingFileFormatter.java | 10 ++- .../internal/io/EncodingFileFormatter.java | 9 +-- .../internal/io/FunctionalFileFormatter.java | 7 +- .../internal/io/FunctionalFileParser.java | 5 +- .../main/java/internal/io/IOIterators.java | 24 +++---- .../src/main/java/internal/io/JdkWithIO.java | 6 +- .../internal/io/text/AndThenTextParser.java | 21 +++--- .../io/text/ComposeTextFormatter.java | 30 ++++----- .../io/text/FunctionalTextFormatter.java | 10 +-- .../io/text/FunctionalTextParser.java | 7 +- .../java/internal/io/text/LegacyFiles.java | 19 +++--- .../java/internal/io/text/NumberFormats.java | 22 +++---- .../io/text/WithCharsetFileFormatter.java | 6 +- .../io/text/WithCharsetFileParser.java | 8 +-- .../java/nbbrd/io/AbstractIOIterator.java | 3 +- .../src/main/java/nbbrd/io/BlockSizer.java | 11 ++-- .../src/main/java/nbbrd/io/FileFormatter.java | 8 +-- .../src/main/java/nbbrd/io/FileParser.java | 9 +-- .../src/main/java/nbbrd/io/IOIterator.java | 4 +- .../src/main/java/nbbrd/io/Resource.java | 9 +-- .../java/nbbrd/io/WrappedIOException.java | 19 +++--- .../java/nbbrd/io/function/IOBiConsumer.java | 6 +- .../java/nbbrd/io/function/IOConsumer.java | 4 +- .../java/nbbrd/io/function/IOFunction.java | 6 +- .../java/nbbrd/io/function/IOPredicate.java | 5 +- .../java/nbbrd/io/function/IORunnable.java | 2 +- .../java/nbbrd/io/function/IOSupplier.java | 5 +- .../nbbrd/io/function/IOUnaryOperator.java | 4 +- .../src/main/java/nbbrd/io/sys/OS.java | 2 +- .../main/java/nbbrd/io/sys/ProcessReader.java | 2 +- .../java/nbbrd/io/sys/SystemProperties.java | 6 +- .../main/java/nbbrd/io/text/BaseProperty.java | 2 +- .../java/nbbrd/io/text/BooleanProperty.java | 6 +- .../java/nbbrd/io/text/DoubleProperty.java | 6 +- .../main/java/nbbrd/io/text/Formatter.java | 11 +--- .../main/java/nbbrd/io/text/IntProperty.java | 6 +- .../main/java/nbbrd/io/text/LongProperty.java | 6 +- .../src/main/java/nbbrd/io/text/Parser.java | 20 ++---- .../src/main/java/nbbrd/io/text/Property.java | 9 ++- .../main/java/nbbrd/io/text/TextBuffers.java | 4 +- .../java/nbbrd/io/text/TextFormatter.java | 21 +----- .../main/java/nbbrd/io/text/TextParser.java | 15 +---- .../main/java/nbbrd/io/text/TextResource.java | 4 +- .../src/main/java/nbbrd/io/zip/Zip.java | 29 ++++---- .../java/_test/io/CountingIOSupplier.java | 3 +- .../java/_test/io/CountingInputStream.java | 4 +- .../_test/io/FileFormatterAssertions.java | 12 ++-- .../java/_test/io/FileParserAssertions.java | 13 ++-- .../java/_test/io/ForwardingInputStream.java | 3 +- .../java/_test/io/ForwardingOutputStream.java | 3 +- .../java/_test/io/IOIteratorAssertions.java | 9 ++- .../test/java/_test/io/IOIteratorFactory.java | 14 ++-- .../test/java/_test/io/IteratorFactory.java | 10 +-- java-io-base/src/test/java/_test/io/POC.java | 2 +- .../src/test/java/_test/io/ResourceId.java | 5 +- .../io/text/TextFormatterAssertions.java | 14 ++-- .../_test/io/text/TextParserAssertions.java | 14 ++-- .../internal/io/text/NumberFormatsTest.java | 10 ++- .../java/nbbrd/io/AbstractIOIteratorTest.java | 4 +- .../test/java/nbbrd/io/IOIteratorTest.java | 16 ++--- .../nbbrd/io/function/IOConsumerTest.java | 24 ++++--- .../nbbrd/io/function/IOFunctionTest.java | 21 +++--- .../nbbrd/io/function/IOPredicateTest.java | 20 +++--- .../nbbrd/io/function/IORunnableTest.java | 21 +++--- .../nbbrd/io/function/IOSupplierTest.java | 21 +++--- .../io/function/IOUnaryOperatorTest.java | 21 +++--- .../java/nbbrd/io/text/BasePropertyTest.java | 6 +- .../main/java/nbbrd/io/picocsv/Picocsv.java | 36 ++-------- .../java/nbbrd/io/picocsv/PicocsvTest.java | 2 +- .../java/nbbrd/io/win/CScriptWrapper.java | 2 +- .../main/java/nbbrd/io/win/RegWrapper.java | 9 ++- .../main/java/nbbrd/io/win/WhereWrapper.java | 2 +- .../src/main/java/nbbrd/io/xml/bind/Jaxb.java | 33 ++-------- .../test/java/nbbrd/io/xml/bind/JaxbTest.java | 10 +-- .../src/main/java/nbbrd/io/xml/Sax.java | 22 +++---- .../src/main/java/nbbrd/io/xml/Stax.java | 66 ++++--------------- .../src/main/java/nbbrd/io/xml/Xml.java | 14 ++-- .../test/java/_test/ForwardingMarshaller.java | 11 ++-- .../src/test/java/_test/ForwardingReader.java | 3 +- .../java/_test/ForwardingUnmarshaller.java | 9 +-- .../src/test/java/_test/ForwardingWriter.java | 3 +- .../_test/ForwardingXMLOutputFactory.java | 4 +- .../test/java/_test/ForwardingXMLReader.java | 3 +- .../src/test/java/_test/JaxbListener.java | 2 +- .../src/test/java/_test/ResourceCounter.java | 18 ++--- .../src/test/java/_test/SaxListener.java | 3 +- .../src/test/java/_test/StaxListener.java | 2 +- .../src/test/java/nbbrd/io/xml/SaxTest.java | 6 +- .../src/test/java/nbbrd/io/xml/StaxTest.java | 15 +++-- .../src/test/java/nbbrd/io/xml/XmlTest.java | 28 ++------ 92 files changed, 399 insertions(+), 635 deletions(-) diff --git a/java-io-base/src/main/java/internal/io/AndThenFileParser.java b/java-io-base/src/main/java/internal/io/AndThenFileParser.java index 3cf5d65..970962f 100644 --- a/java-io-base/src/main/java/internal/io/AndThenFileParser.java +++ b/java-io-base/src/main/java/internal/io/AndThenFileParser.java @@ -1,5 +1,6 @@ package internal.io; +import lombok.NonNull; import nbbrd.io.FileParser; import nbbrd.io.function.IOSupplier; @@ -12,34 +13,34 @@ @lombok.AllArgsConstructor public class AndThenFileParser implements FileParser { - @lombok.NonNull + @NonNull protected final FileParser parser; - @lombok.NonNull + @NonNull protected final Function after; @Override - public V parseFile(File source) throws IOException { + public @NonNull V parseFile(@NonNull File source) throws IOException { return after.apply(parser.parseFile(source)); } @Override - public V parsePath(Path source) throws IOException { + public @NonNull V parsePath(@NonNull Path source) throws IOException { return after.apply(parser.parsePath(source)); } @Override - public V parseResource(Class type, String name) throws IOException { + public @NonNull V parseResource(@NonNull Class type, @NonNull String name) throws IOException { return after.apply(parser.parseResource(type, name)); } @Override - public V parseStream(IOSupplier source) throws IOException { + public @NonNull V parseStream(@NonNull IOSupplier source) throws IOException { return after.apply(parser.parseStream(source)); } @Override - public V parseStream(InputStream resource) throws IOException { + public @NonNull V parseStream(@NonNull InputStream resource) throws IOException { return after.apply(parser.parseStream(resource)); } } diff --git a/java-io-base/src/main/java/internal/io/ComposeFileFormatter.java b/java-io-base/src/main/java/internal/io/ComposeFileFormatter.java index f489e31..07043be 100644 --- a/java-io-base/src/main/java/internal/io/ComposeFileFormatter.java +++ b/java-io-base/src/main/java/internal/io/ComposeFileFormatter.java @@ -1,5 +1,6 @@ package internal.io; +import lombok.NonNull; import nbbrd.io.FileFormatter; import nbbrd.io.function.IOSupplier; @@ -7,39 +8,34 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.file.Path; -import java.util.Objects; import java.util.function.Function; @lombok.AllArgsConstructor public class ComposeFileFormatter implements FileFormatter { - @lombok.NonNull + @NonNull protected final FileFormatter formatter; - @lombok.NonNull + @NonNull protected final Function before; @Override - public void formatFile(V value, File target) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatFile(@NonNull V value, @NonNull File target) throws IOException { formatter.formatFile(before.apply(value), target); } @Override - public void formatPath(V value, Path target) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatPath(@NonNull V value, @NonNull Path target) throws IOException { formatter.formatPath(before.apply(value), target); } @Override - public void formatStream(V value, IOSupplier target) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatStream(@NonNull V value, @NonNull IOSupplier target) throws IOException { formatter.formatStream(before.apply(value), target); } @Override - public void formatStream(V value, OutputStream resource) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatStream(@NonNull V value, @NonNull OutputStream resource) throws IOException { formatter.formatStream(before.apply(value), resource); } } \ No newline at end of file diff --git a/java-io-base/src/main/java/internal/io/DecodingFileFormatter.java b/java-io-base/src/main/java/internal/io/DecodingFileFormatter.java index 1fcf892..50c8442 100644 --- a/java-io-base/src/main/java/internal/io/DecodingFileFormatter.java +++ b/java-io-base/src/main/java/internal/io/DecodingFileFormatter.java @@ -1,23 +1,22 @@ package internal.io; +import lombok.NonNull; import nbbrd.io.FileParser; import nbbrd.io.function.IOSupplier; import nbbrd.io.function.IOUnaryOperator; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Path; -import java.util.Objects; @lombok.RequiredArgsConstructor public final class DecodingFileFormatter implements FileParser { - @lombok.NonNull + @NonNull final FileParser parser; - @lombok.NonNull + @NonNull final IOUnaryOperator decoder; @Override @@ -39,14 +38,13 @@ public final class DecodingFileFormatter implements FileParser { } @Override - public @NonNull T parseStream(IOSupplier source) throws IOException { + public @NonNull T parseStream(@NonNull IOSupplier source) throws IOException { // force use of default impl return FileParser.super.parseStream(source); } @Override public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { - Objects.requireNonNull(resource, "resource"); try (InputStream decoding = decoder.applyWithIO(resource)) { return parser.parseStream(decoding); } diff --git a/java-io-base/src/main/java/internal/io/EncodingFileFormatter.java b/java-io-base/src/main/java/internal/io/EncodingFileFormatter.java index 81f678c..0f20bcb 100644 --- a/java-io-base/src/main/java/internal/io/EncodingFileFormatter.java +++ b/java-io-base/src/main/java/internal/io/EncodingFileFormatter.java @@ -1,23 +1,22 @@ package internal.io; +import lombok.NonNull; import nbbrd.io.FileFormatter; import nbbrd.io.function.IOSupplier; import nbbrd.io.function.IOUnaryOperator; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Path; -import java.util.Objects; @lombok.RequiredArgsConstructor public final class EncodingFileFormatter implements FileFormatter { - @lombok.NonNull + @NonNull final FileFormatter formatter; - @lombok.NonNull + @NonNull final IOUnaryOperator encoder; @Override @@ -40,8 +39,6 @@ public void formatStream(@NonNull T value, @NonNull IOSupplier implements FileFormatter { - @lombok.NonNull + @NonNull private final IOBiConsumer function; @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); function.acceptWithIO(value, resource); } } diff --git a/java-io-base/src/main/java/internal/io/FunctionalFileParser.java b/java-io-base/src/main/java/internal/io/FunctionalFileParser.java index d4221f0..b7364ec 100644 --- a/java-io-base/src/main/java/internal/io/FunctionalFileParser.java +++ b/java-io-base/src/main/java/internal/io/FunctionalFileParser.java @@ -1,8 +1,8 @@ package internal.io; +import lombok.NonNull; import nbbrd.io.FileParser; import nbbrd.io.function.IOFunction; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.IOException; import java.io.InputStream; @@ -11,12 +11,11 @@ @lombok.RequiredArgsConstructor public final class FunctionalFileParser implements FileParser { - @lombok.NonNull + @NonNull private final IOFunction function; @Override public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return Objects.requireNonNull(function.applyWithIO(resource), "result"); } } diff --git a/java-io-base/src/main/java/internal/io/IOIterators.java b/java-io-base/src/main/java/internal/io/IOIterators.java index 464ef5e..472ac8b 100644 --- a/java-io-base/src/main/java/internal/io/IOIterators.java +++ b/java-io-base/src/main/java/internal/io/IOIterators.java @@ -16,6 +16,14 @@ */ package internal.io; +import lombok.NonNull; +import nbbrd.io.IOIterator; +import nbbrd.io.function.IOConsumer; +import nbbrd.io.function.IOPredicate; +import nbbrd.io.function.IOSupplier; +import nbbrd.io.function.IOUnaryOperator; +import org.checkerframework.checker.nullness.qual.Nullable; + import java.io.IOException; import java.io.UncheckedIOException; import java.util.Collections; @@ -25,12 +33,6 @@ import java.util.function.Consumer; import java.util.stream.Stream; import java.util.stream.StreamSupport; -import nbbrd.io.IOIterator; -import nbbrd.io.function.IOConsumer; -import nbbrd.io.function.IOPredicate; -import nbbrd.io.function.IOSupplier; -import nbbrd.io.function.IOUnaryOperator; -import org.checkerframework.checker.nullness.qual.Nullable; /** * @@ -91,7 +93,7 @@ public E nextWithIO() throws NoSuchElementException { public static final class Checked implements IOIterator { @lombok.Getter - @lombok.NonNull + @NonNull private final Iterator delegate; @Override @@ -145,7 +147,7 @@ public Iterator asUnchecked() { public static final class Unchecked implements Iterator { @lombok.Getter - @lombok.NonNull + @NonNull private final IOIterator delegate; @Override @@ -188,13 +190,13 @@ public void forEachRemaining(Consumer action) { @lombok.RequiredArgsConstructor public static final class Functional implements IOIterator { - @lombok.NonNull + @NonNull private final IOSupplier seed; - @lombok.NonNull + @NonNull private final IOPredicate hasNext; - @lombok.NonNull + @NonNull private final IOUnaryOperator next; private boolean seeded = false; diff --git a/java-io-base/src/main/java/internal/io/JdkWithIO.java b/java-io-base/src/main/java/internal/io/JdkWithIO.java index be0d4d3..94406f1 100644 --- a/java-io-base/src/main/java/internal/io/JdkWithIO.java +++ b/java-io-base/src/main/java/internal/io/JdkWithIO.java @@ -16,11 +16,7 @@ */ package internal.io; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.lang.annotation.*; /** * diff --git a/java-io-base/src/main/java/internal/io/text/AndThenTextParser.java b/java-io-base/src/main/java/internal/io/text/AndThenTextParser.java index 0b4a1d7..a8c2cd8 100644 --- a/java-io-base/src/main/java/internal/io/text/AndThenTextParser.java +++ b/java-io-base/src/main/java/internal/io/text/AndThenTextParser.java @@ -1,5 +1,6 @@ package internal.io.text; +import lombok.NonNull; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextParser; @@ -14,49 +15,49 @@ @lombok.AllArgsConstructor public final class AndThenTextParser implements TextParser { - @lombok.NonNull + @NonNull private final TextParser parser; - @lombok.NonNull + @NonNull private final Function after; @Override - public V parseChars(CharSequence source) throws IOException { + public @NonNull V parseChars(@NonNull CharSequence source) throws IOException { return after.apply(parser.parseChars(source)); } @Override - public V parseFile(File source, Charset encoding) throws IOException { + public @NonNull V parseFile(@NonNull File source, @NonNull Charset encoding) throws IOException { return after.apply(parser.parseFile(source, encoding)); } @Override - public V parsePath(Path source, Charset encoding) throws IOException { + public @NonNull V parsePath(@NonNull Path source, @NonNull Charset encoding) throws IOException { return after.apply(parser.parsePath(source, encoding)); } @Override - public V parseResource(Class type, String name, Charset encoding) throws IOException { + public @NonNull V parseResource(@NonNull Class type, @NonNull String name, @NonNull Charset encoding) throws IOException { return after.apply(parser.parseResource(type, name, encoding)); } @Override - public V parseReader(IOSupplier source) throws IOException { + public @NonNull V parseReader(@NonNull IOSupplier source) throws IOException { return after.apply(parser.parseReader(source)); } @Override - public V parseStream(IOSupplier source, Charset encoding) throws IOException { + public @NonNull V parseStream(@NonNull IOSupplier source, @NonNull Charset encoding) throws IOException { return after.apply(parser.parseStream(source, encoding)); } @Override - public V parseReader(Reader resource) throws IOException { + public @NonNull V parseReader(@NonNull Reader resource) throws IOException { return after.apply(parser.parseReader(resource)); } @Override - public V parseStream(InputStream resource, Charset encoding) throws IOException { + public @NonNull V parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { return after.apply(parser.parseStream(resource, encoding)); } } diff --git a/java-io-base/src/main/java/internal/io/text/ComposeTextFormatter.java b/java-io-base/src/main/java/internal/io/text/ComposeTextFormatter.java index 493432d..6565efa 100644 --- a/java-io-base/src/main/java/internal/io/text/ComposeTextFormatter.java +++ b/java-io-base/src/main/java/internal/io/text/ComposeTextFormatter.java @@ -1,5 +1,6 @@ package internal.io.text; +import lombok.NonNull; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextFormatter; @@ -9,63 +10,54 @@ import java.io.Writer; import java.nio.charset.Charset; import java.nio.file.Path; -import java.util.Objects; import java.util.function.Function; @lombok.AllArgsConstructor public final class ComposeTextFormatter implements TextFormatter { - @lombok.NonNull + @NonNull private final TextFormatter formatter; - @lombok.NonNull + @NonNull private final Function before; @Override - public String formatToString(V value) throws IOException { - Objects.requireNonNull(value, "value"); + public @NonNull String formatToString(@NonNull V value) throws IOException { return formatter.formatToString(before.apply(value)); } @Override - public void formatChars(V value, Appendable target) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatChars(@NonNull V value, @NonNull Appendable target) throws IOException { formatter.formatChars(before.apply(value), target); } @Override - public void formatFile(V value, File target, Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatFile(@NonNull V value, @NonNull File target, @NonNull Charset encoding) throws IOException { formatter.formatFile(before.apply(value), target, encoding); } @Override - public void formatPath(V value, Path target, Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatPath(@NonNull V value, @NonNull Path target, @NonNull Charset encoding) throws IOException { formatter.formatPath(before.apply(value), target, encoding); } @Override - public void formatWriter(V value, IOSupplier target) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatWriter(@NonNull V value, @NonNull IOSupplier target) throws IOException { formatter.formatWriter(before.apply(value), target); } @Override - public void formatStream(V value, IOSupplier target, Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatStream(@NonNull V value, @NonNull IOSupplier target, @NonNull Charset encoding) throws IOException { formatter.formatStream(before.apply(value), target, encoding); } @Override - public void formatWriter(V value, Writer resource) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatWriter(@NonNull V value, @NonNull Writer resource) throws IOException { formatter.formatWriter(before.apply(value), resource); } @Override - public void formatStream(V value, OutputStream resource, Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); + public void formatStream(@NonNull V value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { formatter.formatStream(before.apply(value), resource, encoding); } } \ No newline at end of file diff --git a/java-io-base/src/main/java/internal/io/text/FunctionalTextFormatter.java b/java-io-base/src/main/java/internal/io/text/FunctionalTextFormatter.java index e19dcb4..3c240e4 100644 --- a/java-io-base/src/main/java/internal/io/text/FunctionalTextFormatter.java +++ b/java-io-base/src/main/java/internal/io/text/FunctionalTextFormatter.java @@ -1,34 +1,28 @@ package internal.io.text; +import lombok.NonNull; import nbbrd.io.function.IOBiConsumer; import nbbrd.io.text.TextFormatter; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.Charset; -import java.util.Objects; @lombok.RequiredArgsConstructor public final class FunctionalTextFormatter implements TextFormatter { - @lombok.NonNull + @NonNull private final IOBiConsumer function; @Override public void formatWriter(@NonNull T value, @NonNull Writer resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); function.acceptWithIO(value, resource); } @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); try (OutputStreamWriter writer = new OutputStreamWriter(resource, encoding)) { formatWriter(value, writer); } diff --git a/java-io-base/src/main/java/internal/io/text/FunctionalTextParser.java b/java-io-base/src/main/java/internal/io/text/FunctionalTextParser.java index bf1a8c9..6a17f81 100644 --- a/java-io-base/src/main/java/internal/io/text/FunctionalTextParser.java +++ b/java-io-base/src/main/java/internal/io/text/FunctionalTextParser.java @@ -1,8 +1,8 @@ package internal.io.text; +import lombok.NonNull; import nbbrd.io.function.IOFunction; import nbbrd.io.text.TextParser; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.IOException; import java.io.InputStream; @@ -14,19 +14,16 @@ @lombok.RequiredArgsConstructor public final class FunctionalTextParser implements TextParser { - @lombok.NonNull + @NonNull private final IOFunction function; @Override public @NonNull T parseReader(@NonNull Reader resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return Objects.requireNonNull(function.applyWithIO(resource), "result"); } @Override public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); try (InputStreamReader reader = new InputStreamReader(resource, encoding)) { return parseReader(reader); } diff --git a/java-io-base/src/main/java/internal/io/text/LegacyFiles.java b/java-io-base/src/main/java/internal/io/text/LegacyFiles.java index 265f8c7..7f908a1 100644 --- a/java-io-base/src/main/java/internal/io/text/LegacyFiles.java +++ b/java-io-base/src/main/java/internal/io/text/LegacyFiles.java @@ -1,31 +1,30 @@ /* * Copyright 2019 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package internal.io.text; +import lombok.NonNull; + import java.io.*; import java.net.URI; import java.nio.file.AccessDeniedException; import java.nio.file.FileSystemException; import java.nio.file.NoSuchFileException; -import java.util.Objects; -import org.checkerframework.checker.nullness.qual.NonNull; /** - * * @author Philippe Charles */ @lombok.experimental.UtilityClass @@ -42,13 +41,11 @@ public static OutputStream newOutputStream(@NonNull File target) throws IOExcept } public static void checkSource(@NonNull File source) throws FileSystemException { - Objects.requireNonNull(source, "source"); checkExist(source); checkIsFile(source); } public static void checkTarget(@NonNull File target) throws FileSystemException { - Objects.requireNonNull(target, "target"); if (target.exists()) { checkIsFile(target); } diff --git a/java-io-base/src/main/java/internal/io/text/NumberFormats.java b/java-io-base/src/main/java/internal/io/text/NumberFormats.java index 7d354a1..f73ebfa 100644 --- a/java-io-base/src/main/java/internal/io/text/NumberFormats.java +++ b/java-io-base/src/main/java/internal/io/text/NumberFormats.java @@ -1,31 +1,30 @@ /* * Copyright 2019 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package internal.io.text; +import lombok.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; + import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.text.ParsePosition; -import java.util.Objects; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.checkerframework.checker.nullness.qual.Nullable; /** - * * @author Philippe Charles */ @lombok.experimental.UtilityClass @@ -41,10 +40,9 @@ public Number parseAll(@NonNull NumberFormat numberFormat, @NonNull CharSequence @NonNull public CharSequence simplify(@NonNull NumberFormat numberFormat, @NonNull CharSequence input) { - Objects.requireNonNull(numberFormat); return NumberFormats.hasGroupingSpaceChar(numberFormat) ? NumberFormats.removeGroupingSpaceChars(input) - : Objects.requireNonNull(input); + : input; } private boolean hasGroupingSpaceChar(NumberFormat format) { diff --git a/java-io-base/src/main/java/internal/io/text/WithCharsetFileFormatter.java b/java-io-base/src/main/java/internal/io/text/WithCharsetFileFormatter.java index f4df81d..ad221e7 100644 --- a/java-io-base/src/main/java/internal/io/text/WithCharsetFileFormatter.java +++ b/java-io-base/src/main/java/internal/io/text/WithCharsetFileFormatter.java @@ -1,9 +1,9 @@ package internal.io.text; +import lombok.NonNull; import nbbrd.io.FileFormatter; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextFormatter; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.File; import java.io.IOException; @@ -15,10 +15,10 @@ @lombok.AllArgsConstructor public final class WithCharsetFileFormatter implements FileFormatter { - @lombok.NonNull + @NonNull private final TextFormatter delegate; - @lombok.NonNull + @NonNull private final Charset charset; @Override diff --git a/java-io-base/src/main/java/internal/io/text/WithCharsetFileParser.java b/java-io-base/src/main/java/internal/io/text/WithCharsetFileParser.java index a648269..20cfb20 100644 --- a/java-io-base/src/main/java/internal/io/text/WithCharsetFileParser.java +++ b/java-io-base/src/main/java/internal/io/text/WithCharsetFileParser.java @@ -1,9 +1,9 @@ package internal.io.text; +import lombok.NonNull; import nbbrd.io.FileParser; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextParser; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.File; import java.io.IOException; @@ -15,10 +15,10 @@ @lombok.AllArgsConstructor public final class WithCharsetFileParser implements FileParser { - @lombok.NonNull + @NonNull private final TextParser delegate; - @lombok.NonNull + @NonNull private final Charset charset; @Override @@ -37,7 +37,7 @@ public final class WithCharsetFileParser implements FileParser { } @Override - public @NonNull T parseStream(IOSupplier source) throws IOException { + public @NonNull T parseStream(@NonNull IOSupplier source) throws IOException { return delegate.parseStream(source, charset); } diff --git a/java-io-base/src/main/java/nbbrd/io/AbstractIOIterator.java b/java-io-base/src/main/java/nbbrd/io/AbstractIOIterator.java index 2a03531..07fbd9a 100644 --- a/java-io-base/src/main/java/nbbrd/io/AbstractIOIterator.java +++ b/java-io-base/src/main/java/nbbrd/io/AbstractIOIterator.java @@ -16,9 +16,10 @@ */ package nbbrd.io; +import org.checkerframework.checker.nullness.qual.Nullable; + import java.io.IOException; import java.util.NoSuchElementException; -import org.checkerframework.checker.nullness.qual.Nullable; /** * diff --git a/java-io-base/src/main/java/nbbrd/io/BlockSizer.java b/java-io-base/src/main/java/nbbrd/io/BlockSizer.java index 6db1742..04c1bf6 100644 --- a/java-io-base/src/main/java/nbbrd/io/BlockSizer.java +++ b/java-io-base/src/main/java/nbbrd/io/BlockSizer.java @@ -1,11 +1,12 @@ package nbbrd.io; +import lombok.NonNull; + import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Path; -import java.util.Objects; import java.util.concurrent.atomic.AtomicReference; /** @@ -28,8 +29,7 @@ public class BlockSizer { * @throws IOException if an I/O error occurs * @see https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileStore.html#getBlockSize() */ - public long getBlockSize(Path file) throws IOException { - Objects.requireNonNull(file); + public long getBlockSize(@NonNull Path file) throws IOException { return DEFAULT_BLOCK_BUFFER_SIZE; } @@ -40,7 +40,7 @@ public long getBlockSize(Path file) throws IOException { * @return a positive value representing the block size in bytes if available, -1 otherwise * @throws IOException if an I/O error occurs */ - public long getBlockSize(InputStream stream) throws IOException { + public long getBlockSize(@NonNull InputStream stream) throws IOException { return stream.available(); } @@ -51,8 +51,7 @@ public long getBlockSize(InputStream stream) throws IOException { * @return a positive value representing the block size in bytes if available, -1 otherwise * @throws IOException if an I/O error occurs */ - public long getBlockSize(OutputStream stream) throws IOException { - Objects.requireNonNull(stream); + public long getBlockSize(@NonNull OutputStream stream) throws IOException { return stream instanceof BufferedOutputStream ? DEFAULT_BUFFER_OUTPUT_STREAM_SIZE : UNKNOWN_SIZE; } } diff --git a/java-io-base/src/main/java/nbbrd/io/FileFormatter.java b/java-io-base/src/main/java/nbbrd/io/FileFormatter.java index 3218b34..288283b 100644 --- a/java-io-base/src/main/java/nbbrd/io/FileFormatter.java +++ b/java-io-base/src/main/java/nbbrd/io/FileFormatter.java @@ -4,17 +4,16 @@ import internal.io.EncodingFileFormatter; import internal.io.FunctionalFileFormatter; import internal.io.text.LegacyFiles; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.function.IOBiConsumer; import nbbrd.io.function.IOSupplier; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Objects; import java.util.Optional; import java.util.function.Function; import java.util.zip.GZIPOutputStream; @@ -22,14 +21,11 @@ public interface FileFormatter { default void formatFile(@NonNull T value, @NonNull File target) throws IOException { - Objects.requireNonNull(value, "value"); LegacyFiles.checkTarget(target); formatStream(value, () -> LegacyFiles.newOutputStream(target)); } default void formatPath(@NonNull T value, @NonNull Path target) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); Optional file = Resource.getFile(target); if (file.isPresent()) { formatFile(value, file.get()); @@ -39,8 +35,6 @@ default void formatPath(@NonNull T value, @NonNull Path target) throws IOExcepti } default void formatStream(@NonNull T value, @NonNull IOSupplier target) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); try (OutputStream resource = LegacyFiles.checkResource(target.getWithIO(), "Missing OutputStream")) { formatStream(value, resource); } diff --git a/java-io-base/src/main/java/nbbrd/io/FileParser.java b/java-io-base/src/main/java/nbbrd/io/FileParser.java index 9d635dc..1c6fd9b 100644 --- a/java-io-base/src/main/java/nbbrd/io/FileParser.java +++ b/java-io-base/src/main/java/nbbrd/io/FileParser.java @@ -4,17 +4,16 @@ import internal.io.DecodingFileFormatter; import internal.io.FunctionalFileParser; import internal.io.text.LegacyFiles; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Objects; import java.util.Optional; import java.util.function.Function; import java.util.zip.GZIPInputStream; @@ -27,7 +26,6 @@ public interface FileParser { } default @NonNull T parsePath(@NonNull Path source) throws IOException { - Objects.requireNonNull(source, "source"); Optional file = Resource.getFile(source); return file.isPresent() ? parseFile(file.get()) @@ -35,13 +33,10 @@ public interface FileParser { } default @NonNull T parseResource(@NonNull Class type, @NonNull String name) throws IOException { - Objects.requireNonNull(type, "type"); - Objects.requireNonNull(name, "name"); return parseStream(() -> LegacyFiles.checkResource(type.getResourceAsStream(name), "Missing resource '" + name + "' of '" + type.getName() + "'")); } - default @NonNull T parseStream(IOSupplier source) throws IOException { - Objects.requireNonNull(source, "source"); + default @NonNull T parseStream(@NonNull IOSupplier source) throws IOException { try (InputStream resource = LegacyFiles.checkResource(source.getWithIO(), "Missing InputStream")) { return parseStream(resource); } diff --git a/java-io-base/src/main/java/nbbrd/io/IOIterator.java b/java-io-base/src/main/java/nbbrd/io/IOIterator.java index 6f5b458..9b5e136 100644 --- a/java-io-base/src/main/java/nbbrd/io/IOIterator.java +++ b/java-io-base/src/main/java/nbbrd/io/IOIterator.java @@ -18,18 +18,17 @@ import internal.io.IOIterators; import internal.io.JdkWithIO; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.function.IOConsumer; import nbbrd.io.function.IOPredicate; import nbbrd.io.function.IOSupplier; import nbbrd.io.function.IOUnaryOperator; -import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.io.IOException; import java.util.Iterator; import java.util.NoSuchElementException; -import java.util.Objects; import java.util.Spliterators; import java.util.stream.Stream; import java.util.stream.StreamSupport; @@ -53,7 +52,6 @@ default void removeWithIO() throws IOException { @JdkWithIO default void forEachRemainingWithIO(@NonNull IOConsumer action) throws IOException { - Objects.requireNonNull(action); while (hasNextWithIO()) { action.acceptWithIO(nextWithIO()); } diff --git a/java-io-base/src/main/java/nbbrd/io/Resource.java b/java-io-base/src/main/java/nbbrd/io/Resource.java index af3b448..491e0ca 100644 --- a/java-io-base/src/main/java/nbbrd/io/Resource.java +++ b/java-io-base/src/main/java/nbbrd/io/Resource.java @@ -16,11 +16,11 @@ */ package nbbrd.io; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.function.IOConsumer; import nbbrd.io.function.IOFunction; import nbbrd.io.function.IORunnable; -import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.io.*; @@ -28,7 +28,6 @@ import java.nio.file.FileSystem; import java.nio.file.*; import java.util.Collections; -import java.util.Objects; import java.util.Optional; /** @@ -49,14 +48,11 @@ public interface Loader extends Closeable { @StaticFactoryMethod static @NonNull Loader of(@NonNull IOFunction loader, @NonNull Closeable closer) { - Objects.requireNonNull(loader); - Objects.requireNonNull(closer); return new Loader() { boolean closed = false; @Override - public InputStream load(K key) throws IOException { - Objects.requireNonNull(key); + public @NonNull InputStream load(@NonNull K key) throws IOException { if (closed) { throw new IllegalStateException("Closed"); } @@ -113,7 +109,6 @@ public Optional getResourceAsStream(@NonNull Class type, @NonNul @SuppressWarnings("ThrowableResultIgnored") public void ensureClosed(@NonNull Throwable exception, @Nullable Closeable closeable) { - Objects.requireNonNull(exception); if (closeable != null) { try { closeable.close(); diff --git a/java-io-base/src/main/java/nbbrd/io/WrappedIOException.java b/java-io-base/src/main/java/nbbrd/io/WrappedIOException.java index 1a90e73..39ab309 100644 --- a/java-io-base/src/main/java/nbbrd/io/WrappedIOException.java +++ b/java-io-base/src/main/java/nbbrd/io/WrappedIOException.java @@ -1,40 +1,37 @@ /* * Copyright 2020 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package nbbrd.io; +import lombok.NonNull; + import java.io.IOException; -import java.util.Objects; -import org.checkerframework.checker.nullness.qual.NonNull; /** - * * @author Philippe Charles */ public final class WrappedIOException extends IOException { @NonNull public static IOException wrap(@NonNull Throwable ex) { - Objects.requireNonNull(ex); return ex instanceof IOException ? ((IOException) ex) : new WrappedIOException(ex); } @NonNull public static Throwable unwrap(@NonNull IOException ex) { - Objects.requireNonNull(ex); return ex instanceof WrappedIOException ? ex.getCause() : ex; } diff --git a/java-io-base/src/main/java/nbbrd/io/function/IOBiConsumer.java b/java-io-base/src/main/java/nbbrd/io/function/IOBiConsumer.java index a389652..da113ed 100644 --- a/java-io-base/src/main/java/nbbrd/io/function/IOBiConsumer.java +++ b/java-io-base/src/main/java/nbbrd/io/function/IOBiConsumer.java @@ -1,12 +1,11 @@ package nbbrd.io.function; import internal.io.JdkWithIO; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.function.BiConsumer; /** @@ -47,8 +46,7 @@ public interface IOBiConsumer { * @throws NullPointerException if {@code after} is null */ @JdkWithIO - default IOBiConsumer andThen(IOBiConsumer after) { - Objects.requireNonNull(after); + default @NonNull IOBiConsumer andThen(@NonNull IOBiConsumer after) { return (l, r) -> { acceptWithIO(l, r); after.acceptWithIO(l, r); diff --git a/java-io-base/src/main/java/nbbrd/io/function/IOConsumer.java b/java-io-base/src/main/java/nbbrd/io/function/IOConsumer.java index cd43d40..ec9c55d 100644 --- a/java-io-base/src/main/java/nbbrd/io/function/IOConsumer.java +++ b/java-io-base/src/main/java/nbbrd/io/function/IOConsumer.java @@ -17,12 +17,11 @@ package nbbrd.io.function; import internal.io.JdkWithIO; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.function.Consumer; /** @@ -58,7 +57,6 @@ public interface IOConsumer { */ @JdkWithIO default @NonNull IOConsumer andThen(@NonNull IOConsumer after) { - Objects.requireNonNull(after); return (T t) -> { acceptWithIO(t); after.acceptWithIO(t); diff --git a/java-io-base/src/main/java/nbbrd/io/function/IOFunction.java b/java-io-base/src/main/java/nbbrd/io/function/IOFunction.java index 9b614a7..ff138a7 100644 --- a/java-io-base/src/main/java/nbbrd/io/function/IOFunction.java +++ b/java-io-base/src/main/java/nbbrd/io/function/IOFunction.java @@ -17,13 +17,12 @@ package nbbrd.io.function; import internal.io.JdkWithIO; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.function.Function; /** @@ -61,7 +60,6 @@ public interface IOFunction { */ @JdkWithIO default @NonNull IOFunction compose(@NonNull IOFunction before) { - Objects.requireNonNull(before); return (V v) -> applyWithIO(before.applyWithIO(v)); } @@ -81,7 +79,6 @@ public interface IOFunction { */ @JdkWithIO default @NonNull IOFunction andThen(@NonNull IOFunction after) { - Objects.requireNonNull(after); return (T t) -> after.applyWithIO(applyWithIO(t)); } @@ -101,7 +98,6 @@ public interface IOFunction { @StaticFactoryMethod static @NonNull IOFunction checked(@NonNull Function func) { - Objects.requireNonNull(func); return (o) -> { try { return func.apply(o); diff --git a/java-io-base/src/main/java/nbbrd/io/function/IOPredicate.java b/java-io-base/src/main/java/nbbrd/io/function/IOPredicate.java index 9932256..dc2b248 100644 --- a/java-io-base/src/main/java/nbbrd/io/function/IOPredicate.java +++ b/java-io-base/src/main/java/nbbrd/io/function/IOPredicate.java @@ -17,8 +17,8 @@ package nbbrd.io.function; import internal.io.JdkWithIO; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.IOException; import java.io.UncheckedIOException; @@ -62,7 +62,6 @@ public interface IOPredicate { */ @JdkWithIO default @NonNull IOPredicate and(@NonNull IOPredicate other) { - Objects.requireNonNull(other); return (t) -> testWithIO(t) && other.testWithIO(t); } @@ -96,7 +95,6 @@ public interface IOPredicate { */ @JdkWithIO default @NonNull IOPredicate or(@NonNull IOPredicate other) { - Objects.requireNonNull(other); return (t) -> testWithIO(t) || other.testWithIO(t); } @@ -116,7 +114,6 @@ public interface IOPredicate { @StaticFactoryMethod static @NonNull IOPredicate checked(@NonNull Predicate predicate) { - Objects.requireNonNull(predicate); return (o) -> { try { return predicate.test(o); diff --git a/java-io-base/src/main/java/nbbrd/io/function/IORunnable.java b/java-io-base/src/main/java/nbbrd/io/function/IORunnable.java index 64fcff3..df03c63 100644 --- a/java-io-base/src/main/java/nbbrd/io/function/IORunnable.java +++ b/java-io-base/src/main/java/nbbrd/io/function/IORunnable.java @@ -17,8 +17,8 @@ package nbbrd.io.function; import internal.io.JdkWithIO; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.Closeable; import java.io.IOException; diff --git a/java-io-base/src/main/java/nbbrd/io/function/IOSupplier.java b/java-io-base/src/main/java/nbbrd/io/function/IOSupplier.java index 24a52e1..872a47b 100644 --- a/java-io-base/src/main/java/nbbrd/io/function/IOSupplier.java +++ b/java-io-base/src/main/java/nbbrd/io/function/IOSupplier.java @@ -17,13 +17,12 @@ package nbbrd.io.function; import internal.io.JdkWithIO; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.function.Supplier; /** @@ -57,7 +56,6 @@ public interface IOSupplier { * @throws NullPointerException if after is null */ default @NonNull IOSupplier andThen(@NonNull IOFunction after) { - Objects.requireNonNull(after); return () -> after.applyWithIO(getWithIO()); } @@ -77,7 +75,6 @@ public interface IOSupplier { @StaticFactoryMethod static @NonNull IOSupplier checked(@NonNull Supplier o) { - Objects.requireNonNull(o); return () -> { try { return o.get(); diff --git a/java-io-base/src/main/java/nbbrd/io/function/IOUnaryOperator.java b/java-io-base/src/main/java/nbbrd/io/function/IOUnaryOperator.java index 1a83739..280104d 100644 --- a/java-io-base/src/main/java/nbbrd/io/function/IOUnaryOperator.java +++ b/java-io-base/src/main/java/nbbrd/io/function/IOUnaryOperator.java @@ -17,12 +17,11 @@ package nbbrd.io.function; import internal.io.JdkWithIO; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.function.UnaryOperator; /** @@ -52,7 +51,6 @@ public interface IOUnaryOperator extends IOFunction { @StaticFactoryMethod static @NonNull IOUnaryOperator checked(@NonNull UnaryOperator func) { - Objects.requireNonNull(func); return (o) -> { try { return func.apply(o); diff --git a/java-io-base/src/main/java/nbbrd/io/sys/OS.java b/java-io-base/src/main/java/nbbrd/io/sys/OS.java index 68eeb11..fa656ce 100644 --- a/java-io-base/src/main/java/nbbrd/io/sys/OS.java +++ b/java-io-base/src/main/java/nbbrd/io/sys/OS.java @@ -16,7 +16,7 @@ */ package nbbrd.io.sys; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Locale; diff --git a/java-io-base/src/main/java/nbbrd/io/sys/ProcessReader.java b/java-io-base/src/main/java/nbbrd/io/sys/ProcessReader.java index d01f604..c61c420 100644 --- a/java-io-base/src/main/java/nbbrd/io/sys/ProcessReader.java +++ b/java-io-base/src/main/java/nbbrd/io/sys/ProcessReader.java @@ -16,7 +16,7 @@ */ package nbbrd.io.sys; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import java.io.*; import java.nio.charset.Charset; diff --git a/java-io-base/src/main/java/nbbrd/io/sys/SystemProperties.java b/java-io-base/src/main/java/nbbrd/io/sys/SystemProperties.java index 43adff4..db8e2bf 100644 --- a/java-io-base/src/main/java/nbbrd/io/sys/SystemProperties.java +++ b/java-io-base/src/main/java/nbbrd/io/sys/SystemProperties.java @@ -1,6 +1,6 @@ package nbbrd.io.sys; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.net.MalformedURLException; @@ -50,10 +50,10 @@ public final class SystemProperties { public static final SystemProperties DEFAULT = of(System.getProperties(), FileSystems.getDefault()); - @lombok.NonNull + @NonNull private final Properties source; - @lombok.NonNull + @NonNull private final FileSystem fileSystem; /** diff --git a/java-io-base/src/main/java/nbbrd/io/text/BaseProperty.java b/java-io-base/src/main/java/nbbrd/io/text/BaseProperty.java index 8de86e4..768f98c 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/BaseProperty.java +++ b/java-io-base/src/main/java/nbbrd/io/text/BaseProperty.java @@ -1,8 +1,8 @@ package nbbrd.io.text; +import lombok.NonNull; import nbbrd.design.MightBePromoted; import nbbrd.design.SealedType; -import org.checkerframework.checker.nullness.qual.NonNull; import java.util.Collections; import java.util.List; diff --git a/java-io-base/src/main/java/nbbrd/io/text/BooleanProperty.java b/java-io-base/src/main/java/nbbrd/io/text/BooleanProperty.java index afd04b3..c642c67 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/BooleanProperty.java +++ b/java-io-base/src/main/java/nbbrd/io/text/BooleanProperty.java @@ -1,9 +1,8 @@ package nbbrd.io.text; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import java.util.Map; -import java.util.Objects; import java.util.Properties; import java.util.function.BiConsumer; import java.util.function.Function; @@ -11,7 +10,7 @@ @lombok.RequiredArgsConstructor(staticName = "of") public final class BooleanProperty extends BaseProperty { - @lombok.NonNull + @NonNull @lombok.Getter private final String key; @@ -34,7 +33,6 @@ public boolean get(@NonNull Map properties) { } public void set(@NonNull BiConsumer properties, boolean value) { - Objects.requireNonNull(properties); if (value != defaultValue) { String valueAsString = Formatter.onBoolean().formatAsString(value); if (valueAsString != null) properties.accept(key, valueAsString); diff --git a/java-io-base/src/main/java/nbbrd/io/text/DoubleProperty.java b/java-io-base/src/main/java/nbbrd/io/text/DoubleProperty.java index 2fe794b..b4eac7d 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/DoubleProperty.java +++ b/java-io-base/src/main/java/nbbrd/io/text/DoubleProperty.java @@ -1,9 +1,8 @@ package nbbrd.io.text; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import java.util.Map; -import java.util.Objects; import java.util.Properties; import java.util.function.BiConsumer; import java.util.function.Function; @@ -11,7 +10,7 @@ @lombok.RequiredArgsConstructor(staticName = "of") public final class DoubleProperty extends BaseProperty { - @lombok.NonNull + @NonNull @lombok.Getter private final String key; @@ -34,7 +33,6 @@ public double get(@NonNull Map properties) { } public void set(@NonNull BiConsumer properties, double value) { - Objects.requireNonNull(properties); if (value != defaultValue) { String valueAsString = Formatter.onDouble().formatAsString(value); if (valueAsString != null) properties.accept(key, valueAsString); diff --git a/java-io-base/src/main/java/nbbrd/io/text/Formatter.java b/java-io-base/src/main/java/nbbrd/io/text/Formatter.java index 0795d74..0f28783 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/Formatter.java +++ b/java-io-base/src/main/java/nbbrd/io/text/Formatter.java @@ -17,8 +17,8 @@ package nbbrd.io.text; import internal.io.text.InternalFormatter; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.io.File; @@ -31,7 +31,6 @@ import java.time.temporal.TemporalAccessor; import java.util.Date; import java.util.List; -import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -108,25 +107,21 @@ public interface Formatter { * @return a never-null formatter */ default @NonNull Formatter compose(@NonNull Function before) { - Objects.requireNonNull(before); return o -> format(before.apply(o)); } @StaticFactoryMethod static @NonNull Formatter onDateTimeFormatter(@NonNull DateTimeFormatter formatter) { - Objects.requireNonNull(formatter); return o -> InternalFormatter.formatTemporalAccessor(formatter, o); } @StaticFactoryMethod static @NonNull Formatter onDateFormat(@NonNull DateFormat dateFormat) { - Objects.requireNonNull(dateFormat); return o -> InternalFormatter.formatDate(dateFormat, o); } @StaticFactoryMethod static @NonNull Formatter onNumberFormat(@NonNull NumberFormat numberFormat) { - Objects.requireNonNull(numberFormat); return o -> InternalFormatter.formatNumber(numberFormat, o); } @@ -182,7 +177,6 @@ public interface Formatter { @StaticFactoryMethod static @NonNull > Formatter onEnum(@NonNull ToIntFunction function) { - Objects.requireNonNull(function); return onInteger().compose(value -> value != null ? function.applyAsInt(value) : null); } @@ -208,7 +202,6 @@ public interface Formatter { @StaticFactoryMethod static @NonNull Formatter> onStringList(@NonNull Function, String> joiner) { - Objects.requireNonNull(joiner); return o -> InternalFormatter.formatStringList(joiner, o); } @@ -224,8 +217,6 @@ public interface Formatter { @StaticFactoryMethod static @NonNull Formatter of(@NonNull Function formatter, @NonNull Consumer onError) { - Objects.requireNonNull(formatter); - Objects.requireNonNull(onError); return o -> InternalFormatter.formatFailsafe(formatter, onError, o); } diff --git a/java-io-base/src/main/java/nbbrd/io/text/IntProperty.java b/java-io-base/src/main/java/nbbrd/io/text/IntProperty.java index ca1a2b2..937a9ab 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/IntProperty.java +++ b/java-io-base/src/main/java/nbbrd/io/text/IntProperty.java @@ -1,9 +1,8 @@ package nbbrd.io.text; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import java.util.Map; -import java.util.Objects; import java.util.Properties; import java.util.function.BiConsumer; import java.util.function.Function; @@ -11,7 +10,7 @@ @lombok.RequiredArgsConstructor(staticName = "of") public final class IntProperty extends BaseProperty { - @lombok.NonNull + @NonNull @lombok.Getter private final String key; @@ -34,7 +33,6 @@ public int get(@NonNull Map properties) { } public void set(@NonNull BiConsumer properties, int value) { - Objects.requireNonNull(properties); if (value != defaultValue) { String valueAsString = Formatter.onInteger().formatAsString(value); if (valueAsString != null) properties.accept(key, valueAsString); diff --git a/java-io-base/src/main/java/nbbrd/io/text/LongProperty.java b/java-io-base/src/main/java/nbbrd/io/text/LongProperty.java index a2c308b..00bed44 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/LongProperty.java +++ b/java-io-base/src/main/java/nbbrd/io/text/LongProperty.java @@ -1,9 +1,8 @@ package nbbrd.io.text; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import java.util.Map; -import java.util.Objects; import java.util.Properties; import java.util.function.BiConsumer; import java.util.function.Function; @@ -11,7 +10,7 @@ @lombok.RequiredArgsConstructor(staticName = "of") public final class LongProperty extends BaseProperty { - @lombok.NonNull + @NonNull @lombok.Getter private final String key; @@ -34,7 +33,6 @@ public long get(@NonNull Map properties) { } public void set(@NonNull BiConsumer properties, long value) { - Objects.requireNonNull(properties); if (value != defaultValue) { String valueAsString = Formatter.onLong().formatAsString(value); if (valueAsString != null) properties.accept(key, valueAsString); diff --git a/java-io-base/src/main/java/nbbrd/io/text/Parser.java b/java-io-base/src/main/java/nbbrd/io/text/Parser.java index aa05e43..d887eb1 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/Parser.java +++ b/java-io-base/src/main/java/nbbrd/io/text/Parser.java @@ -17,8 +17,8 @@ package nbbrd.io.text; import internal.io.text.InternalParser; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; -import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.io.File; @@ -29,7 +29,10 @@ import java.text.NumberFormat; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalQuery; -import java.util.*; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.ToIntFunction; @@ -76,7 +79,6 @@ public interface Parser { * @return */ default @NonNull Parser orElse(@NonNull Parser other) { - Objects.requireNonNull(other); return o -> { T result = parse(o); return result != null ? result : other.parse(o); @@ -84,27 +86,22 @@ public interface Parser { } default @NonNull Parser andThen(@NonNull Function after) { - Objects.requireNonNull(after); return o -> after.apply(parse(o)); } @SuppressWarnings("unchecked") @StaticFactoryMethod - static @NonNull Parser onDateTimeFormatter(@NonNull DateTimeFormatter formatter, TemporalQuery... queries) { - Objects.requireNonNull(formatter); - Objects.requireNonNull(queries); + static @NonNull Parser onDateTimeFormatter(@NonNull DateTimeFormatter formatter, @NonNull TemporalQuery... queries) { return o -> InternalParser.parseTemporalAccessor(formatter, queries, o); } @StaticFactoryMethod static @NonNull Parser onDateFormat(@NonNull DateFormat dateFormat) { - Objects.requireNonNull(dateFormat); return o -> InternalParser.parseDate(dateFormat, o); } @StaticFactoryMethod static @NonNull Parser onNumberFormat(@NonNull NumberFormat numberFormat) { - Objects.requireNonNull(numberFormat); return o -> InternalParser.parseNumber(numberFormat, o); } @@ -167,14 +164,12 @@ public interface Parser { @StaticFactoryMethod static > @NonNull Parser onEnum(@NonNull Class type) { - Objects.requireNonNull(type); return o -> InternalParser.parseEnum(type, o); } @StaticFactoryMethod static > @NonNull Parser onEnum(@NonNull Class type, @NonNull ToIntFunction function) { final T[] values = type.getEnumConstants(); - Objects.requireNonNull(function); return onInteger().andThen(code -> InternalParser.parse(values, function, code)); } @@ -195,7 +190,6 @@ public interface Parser { @StaticFactoryMethod static @NonNull Parser> onStringList(@NonNull Function> splitter) { - Objects.requireNonNull(splitter); return o -> InternalParser.parseStringList(splitter, o); } @@ -216,8 +210,6 @@ public interface Parser { @StaticFactoryMethod static @NonNull Parser of(@NonNull Function parser, @NonNull Consumer onError) { - Objects.requireNonNull(parser); - Objects.requireNonNull(onError); return o -> InternalParser.parseFailsafe(parser, onError, o); } diff --git a/java-io-base/src/main/java/nbbrd/io/text/Property.java b/java-io-base/src/main/java/nbbrd/io/text/Property.java index f9ea7c1..0e51957 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/Property.java +++ b/java-io-base/src/main/java/nbbrd/io/text/Property.java @@ -16,7 +16,7 @@ */ package nbbrd.io.text; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Map; @@ -31,7 +31,7 @@ @lombok.RequiredArgsConstructor(staticName = "of") public final class Property extends BaseProperty { - @lombok.NonNull + @NonNull @lombok.Getter private final String key; @@ -39,10 +39,10 @@ public final class Property extends BaseProperty { @lombok.Getter private final T defaultValue; - @lombok.NonNull + @NonNull private final Parser parser; - @lombok.NonNull + @NonNull private final Formatter formatter; public @Nullable T get(@NonNull Function properties) { @@ -61,7 +61,6 @@ public final class Property extends BaseProperty { } public void set(@NonNull BiConsumer properties, @Nullable T value) { - Objects.requireNonNull(properties); if (!Objects.equals(value, defaultValue)) { String valueAsString = formatter.formatAsString(value); if (valueAsString != null) properties.accept(key, valueAsString); diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextBuffers.java b/java-io-base/src/main/java/nbbrd/io/text/TextBuffers.java index f695a0e..d1ffe35 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextBuffers.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextBuffers.java @@ -1,10 +1,10 @@ package nbbrd.io.text; import lombok.AccessLevel; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.BlockSizer; import org.checkerframework.checker.index.qual.NonNegative; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.*; import java.nio.channels.Channels; @@ -13,7 +13,6 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.nio.file.Path; -import java.util.Objects; @lombok.AllArgsConstructor(access = AccessLevel.PACKAGE) public final class TextBuffers { @@ -40,7 +39,6 @@ public final class TextBuffers { @StaticFactoryMethod public static @NonNull TextBuffers of(@NonNull OutputStream stream, @NonNull CharsetEncoder encoder) throws IOException { - Objects.requireNonNull(stream); return make(BlockSizer.INSTANCE.get().getBlockSize(stream), 1f / encoder.averageBytesPerChar()); } diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java b/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java index 85c58a7..a9969b6 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java @@ -1,18 +1,17 @@ package nbbrd.io.text; import internal.io.text.*; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.FileFormatter; import nbbrd.io.Resource; import nbbrd.io.function.IOBiConsumer; import nbbrd.io.function.IOSupplier; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.*; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -20,31 +19,23 @@ public interface TextFormatter { default @NonNull String formatToString(@NonNull T value) throws IOException { - Objects.requireNonNull(value, "value"); StringWriter writer = new StringWriter(); formatWriter(value, writer); return writer.toString(); } default void formatChars(@NonNull T value, @NonNull Appendable target) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); StringWriter writer = new StringWriter(); formatWriter(value, writer); target.append(writer.getBuffer()); } default void formatFile(@NonNull T value, @NonNull File target, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); LegacyFiles.checkTarget(target); - Objects.requireNonNull(encoding, "encoding"); formatStream(value, () -> LegacyFiles.newOutputStream(target), encoding); } default void formatPath(@NonNull T value, @NonNull Path target, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); - Objects.requireNonNull(encoding, "encoding"); Optional file = Resource.getFile(target); if (file.isPresent()) { formatFile(value, file.get(), encoding); @@ -53,18 +44,13 @@ default void formatPath(@NonNull T value, @NonNull Path target, @NonNull Charset } } - default void formatWriter(@NonNull T value, IOSupplier target) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); + default void formatWriter(@NonNull T value, @NonNull IOSupplier target) throws IOException { try (Writer resource = LegacyFiles.checkResource(target.getWithIO(), "Missing Writer")) { formatWriter(value, resource); } } - default void formatStream(@NonNull T value, IOSupplier target, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); - Objects.requireNonNull(encoding, "encoding"); + default void formatStream(@NonNull T value, @NonNull IOSupplier target, @NonNull Charset encoding) throws IOException { try (OutputStream resource = LegacyFiles.checkResource(target.getWithIO(), "Missing OutputStream")) { formatStream(value, resource, encoding); } @@ -87,7 +73,6 @@ default void formatStream(@NonNull T value, IOSupplier t } default @NonNull Formatter asFormatter(@NonNull Consumer onError) { - Objects.requireNonNull(onError, "onError"); return value -> { if (value != null) { try { diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextParser.java b/java-io-base/src/main/java/nbbrd/io/text/TextParser.java index fc418fc..b8da601 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextParser.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextParser.java @@ -1,18 +1,17 @@ package nbbrd.io.text; import internal.io.text.*; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.FileParser; import nbbrd.io.Resource; import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.*; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -20,20 +19,15 @@ public interface TextParser { default @NonNull T parseChars(@NonNull CharSequence source) throws IOException { - Objects.requireNonNull(source, "source"); return parseReader(() -> new StringReader(source.toString())); } default @NonNull T parseFile(@NonNull File source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); LegacyFiles.checkSource(source); return parseStream(() -> LegacyFiles.newInputStream(source), encoding); } default @NonNull T parsePath(@NonNull Path source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); Optional file = Resource.getFile(source); return file.isPresent() ? parseFile(file.get(), encoding) @@ -41,22 +35,16 @@ public interface TextParser { } default @NonNull T parseResource(@NonNull Class type, @NonNull String name, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(type, "type"); - Objects.requireNonNull(name, "name"); - Objects.requireNonNull(encoding, "encoding"); return parseStream(() -> LegacyFiles.checkResource(type.getResourceAsStream(name), "Missing resource '" + name + "' of '" + type.getName() + "'"), encoding); } default @NonNull T parseReader(@NonNull IOSupplier source) throws IOException { - Objects.requireNonNull(source, "source"); try (Reader resource = LegacyFiles.checkResource(source.getWithIO(), "Missing Reader")) { return parseReader(resource); } } default @NonNull T parseStream(@NonNull IOSupplier source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); try (InputStream resource = LegacyFiles.checkResource(source.getWithIO(), "Missing InputStream")) { return parseStream(resource, encoding); } @@ -79,7 +67,6 @@ public interface TextParser { } default @NonNull Parser asParser(@NonNull Consumer onError) { - Objects.requireNonNull(onError, "onError"); return chars -> { if (chars != null) { try { diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextResource.java b/java-io-base/src/main/java/nbbrd/io/text/TextResource.java index e17bec5..92ce43a 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextResource.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextResource.java @@ -1,19 +1,17 @@ package nbbrd.io.text; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import java.io.*; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; -import java.util.Objects; import java.util.Optional; @lombok.experimental.UtilityClass public class TextResource { public @NonNull Optional getResourceAsBufferedReader(@NonNull Class anchor, @NonNull String name, @NonNull Charset charset) { - Objects.requireNonNull(charset); return Optional.ofNullable(anchor.getResourceAsStream(name)) .map(stream -> new BufferedReader(new InputStreamReader(stream, charset))); } diff --git a/java-io-base/src/main/java/nbbrd/io/zip/Zip.java b/java-io-base/src/main/java/nbbrd/io/zip/Zip.java index 80b5776..050b0d5 100644 --- a/java-io-base/src/main/java/nbbrd/io/zip/Zip.java +++ b/java-io-base/src/main/java/nbbrd/io/zip/Zip.java @@ -1,36 +1,32 @@ /* * Copyright 2016 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package nbbrd.io.zip; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; +import lombok.NonNull; +import nbbrd.io.Resource; +import nbbrd.io.function.IOPredicate; + +import java.io.*; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import java.util.function.BiConsumer; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; -import nbbrd.io.Resource; -import nbbrd.io.function.IOPredicate; -import org.checkerframework.checker.nullness.qual.NonNull; /** * Set of utilities related to ZIP. @@ -56,7 +52,7 @@ public class Zip { * Creates a new loader by copying the content of a zip file. * * @param inputStream non-null content of zip file - * @param filter non-null filter to avoid copying everything + * @param filter non-null filter to avoid copying everything * @return a non-null loader * @throws IOException */ @@ -90,7 +86,6 @@ private Map copyOf(InputStream stream, IOPredicate filter, BiConsumer consumer) throws IOException { - Objects.requireNonNull(filter); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { if (filter.testWithIO(entry)) { diff --git a/java-io-base/src/test/java/_test/io/CountingIOSupplier.java b/java-io-base/src/test/java/_test/io/CountingIOSupplier.java index f177f34..dd3d35e 100644 --- a/java-io-base/src/test/java/_test/io/CountingIOSupplier.java +++ b/java-io-base/src/test/java/_test/io/CountingIOSupplier.java @@ -1,5 +1,6 @@ package _test.io; +import lombok.NonNull; import nbbrd.io.function.IOSupplier; import java.io.IOException; @@ -7,7 +8,7 @@ @lombok.RequiredArgsConstructor public final class CountingIOSupplier implements IOSupplier { - @lombok.NonNull + @NonNull private final IOSupplier delegate; @lombok.Getter diff --git a/java-io-base/src/test/java/_test/io/CountingInputStream.java b/java-io-base/src/test/java/_test/io/CountingInputStream.java index f45bdac..f76d202 100644 --- a/java-io-base/src/test/java/_test/io/CountingInputStream.java +++ b/java-io-base/src/test/java/_test/io/CountingInputStream.java @@ -1,12 +1,14 @@ package _test.io; +import lombok.NonNull; + import java.io.IOException; import java.io.InputStream; @lombok.RequiredArgsConstructor public class CountingInputStream extends InputStream { - @lombok.NonNull + @NonNull private final InputStream delegate; @lombok.Getter diff --git a/java-io-base/src/test/java/_test/io/FileFormatterAssertions.java b/java-io-base/src/test/java/_test/io/FileFormatterAssertions.java index 4742081..afa6bd6 100644 --- a/java-io-base/src/test/java/_test/io/FileFormatterAssertions.java +++ b/java-io-base/src/test/java/_test/io/FileFormatterAssertions.java @@ -2,6 +2,7 @@ import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; +import lombok.NonNull; import nbbrd.io.FileFormatter; import nbbrd.io.function.IOSupplier; @@ -12,7 +13,6 @@ import java.nio.file.AccessDeniedException; import java.nio.file.FileSystem; import java.nio.file.Path; -import java.util.Objects; import static _test.io.Util.*; import static java.util.Arrays.asList; @@ -21,11 +21,11 @@ @SuppressWarnings("ConstantConditions") public final class FileFormatterAssertions { - public static void assertFileFormatterCompliance(Path temp, FileFormatter p, T value, byte[] expected) throws IOException { - Objects.requireNonNull(temp); - Objects.requireNonNull(p); - Objects.requireNonNull(value); - Objects.requireNonNull(expected); + public static void assertFileFormatterCompliance( + @NonNull Path temp, + @NonNull FileFormatter p, + @NonNull T value, + @NonNull byte[] expected) throws IOException { checkDefaultProvider(temp); diff --git a/java-io-base/src/test/java/_test/io/FileParserAssertions.java b/java-io-base/src/test/java/_test/io/FileParserAssertions.java index 66975fb..4722f92 100644 --- a/java-io-base/src/test/java/_test/io/FileParserAssertions.java +++ b/java-io-base/src/test/java/_test/io/FileParserAssertions.java @@ -2,6 +2,7 @@ import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; +import lombok.NonNull; import nbbrd.io.FileParser; import nbbrd.io.function.IOSupplier; @@ -13,7 +14,6 @@ import java.nio.file.FileSystem; import java.nio.file.NoSuchFileException; import java.nio.file.Path; -import java.util.Objects; import java.util.UUID; import static _test.io.Util.*; @@ -23,11 +23,12 @@ @SuppressWarnings("ConstantConditions") public final class FileParserAssertions { - public static void assertFileParserCompliance(Path temp, FileParser p, T value, ResourceId expected, boolean allowEmpty) throws IOException { - Objects.requireNonNull(temp); - Objects.requireNonNull(p); - Objects.requireNonNull(value); - Objects.requireNonNull(expected); + public static void assertFileParserCompliance( + @NonNull Path temp, + @NonNull FileParser p, + @NonNull T value, + @NonNull ResourceId expected, + boolean allowEmpty) throws IOException { checkDefaultProvider(temp); diff --git a/java-io-base/src/test/java/_test/io/ForwardingInputStream.java b/java-io-base/src/test/java/_test/io/ForwardingInputStream.java index e881c5f..e2ab073 100644 --- a/java-io-base/src/test/java/_test/io/ForwardingInputStream.java +++ b/java-io-base/src/test/java/_test/io/ForwardingInputStream.java @@ -16,9 +16,10 @@ */ package _test.io; +import nbbrd.io.function.IORunnable; + import java.io.IOException; import java.io.InputStream; -import nbbrd.io.function.IORunnable; /** * diff --git a/java-io-base/src/test/java/_test/io/ForwardingOutputStream.java b/java-io-base/src/test/java/_test/io/ForwardingOutputStream.java index 8f7fc3e..b8cb2cc 100644 --- a/java-io-base/src/test/java/_test/io/ForwardingOutputStream.java +++ b/java-io-base/src/test/java/_test/io/ForwardingOutputStream.java @@ -16,9 +16,10 @@ */ package _test.io; +import nbbrd.io.function.IORunnable; + import java.io.IOException; import java.io.OutputStream; -import nbbrd.io.function.IORunnable; /** * diff --git a/java-io-base/src/test/java/_test/io/IOIteratorAssertions.java b/java-io-base/src/test/java/_test/io/IOIteratorAssertions.java index eb0a33a..b967f83 100644 --- a/java-io-base/src/test/java/_test/io/IOIteratorAssertions.java +++ b/java-io-base/src/test/java/_test/io/IOIteratorAssertions.java @@ -1,16 +1,15 @@ package _test.io; +import nbbrd.io.IOIterator; + import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.NoSuchElementException; import java.util.function.Supplier; -import nbbrd.io.IOIterator; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatCode; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatNullPointerException; + +import static org.assertj.core.api.Assertions.*; /** * diff --git a/java-io-base/src/test/java/_test/io/IOIteratorFactory.java b/java-io-base/src/test/java/_test/io/IOIteratorFactory.java index 073cc1e..29ca96e 100644 --- a/java-io-base/src/test/java/_test/io/IOIteratorFactory.java +++ b/java-io-base/src/test/java/_test/io/IOIteratorFactory.java @@ -1,13 +1,15 @@ package _test.io; -import java.io.IOException; -import java.util.NoSuchElementException; +import lombok.NonNull; import nbbrd.io.IOIterator; import nbbrd.io.function.IOPredicate; import nbbrd.io.function.IORunnable; import nbbrd.io.function.IOSupplier; import nbbrd.io.function.IOUnaryOperator; +import java.io.IOException; +import java.util.NoSuchElementException; + /** * * @author Philippe Charles @@ -17,16 +19,16 @@ @lombok.With public class IOIteratorFactory implements IOSupplier> { - @lombok.NonNull + @NonNull private IOSupplier seed; - @lombok.NonNull + @NonNull private IOPredicate hasNext; - @lombok.NonNull + @NonNull private IOUnaryOperator next; - @lombok.NonNull + @NonNull private IORunnable remove; @Override diff --git a/java-io-base/src/test/java/_test/io/IteratorFactory.java b/java-io-base/src/test/java/_test/io/IteratorFactory.java index 3f00340..38cf0f9 100644 --- a/java-io-base/src/test/java/_test/io/IteratorFactory.java +++ b/java-io-base/src/test/java/_test/io/IteratorFactory.java @@ -1,5 +1,7 @@ package _test.io; +import lombok.NonNull; + import java.util.Iterator; import java.util.function.Predicate; import java.util.function.Supplier; @@ -14,16 +16,16 @@ @lombok.With public class IteratorFactory implements Supplier> { - @lombok.NonNull + @NonNull private Supplier seed; - @lombok.NonNull + @NonNull private Predicate hasNext; - @lombok.NonNull + @NonNull private UnaryOperator next; - @lombok.NonNull + @NonNull private Runnable remove; @Override diff --git a/java-io-base/src/test/java/_test/io/POC.java b/java-io-base/src/test/java/_test/io/POC.java index 69b989f..5f1f6d1 100644 --- a/java-io-base/src/test/java/_test/io/POC.java +++ b/java-io-base/src/test/java/_test/io/POC.java @@ -1,10 +1,10 @@ package _test.io; +import lombok.NonNull; import nbbrd.io.FileFormatter; import nbbrd.io.FileParser; import nbbrd.io.text.TextFormatter; import nbbrd.io.text.TextParser; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.*; import java.nio.charset.Charset; diff --git a/java-io-base/src/test/java/_test/io/ResourceId.java b/java-io-base/src/test/java/_test/io/ResourceId.java index 99fe97e..a5a490c 100644 --- a/java-io-base/src/test/java/_test/io/ResourceId.java +++ b/java-io-base/src/test/java/_test/io/ResourceId.java @@ -1,5 +1,6 @@ package _test.io; +import lombok.NonNull; import nbbrd.io.Resource; import nbbrd.io.text.TextResource; @@ -15,10 +16,10 @@ @lombok.Value public class ResourceId { - @lombok.NonNull + @NonNull Class anchor; - @lombok.NonNull + @NonNull String name; public InputStream open() throws IOException { diff --git a/java-io-base/src/test/java/_test/io/text/TextFormatterAssertions.java b/java-io-base/src/test/java/_test/io/text/TextFormatterAssertions.java index 0f3bf20..1d2c940 100644 --- a/java-io-base/src/test/java/_test/io/text/TextFormatterAssertions.java +++ b/java-io-base/src/test/java/_test/io/text/TextFormatterAssertions.java @@ -3,6 +3,7 @@ import _test.io.CountingIOSupplier; import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; +import lombok.NonNull; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextFormatter; @@ -13,7 +14,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Collection; -import java.util.Objects; import java.util.function.Function; import static _test.io.Util.*; @@ -24,12 +24,12 @@ @SuppressWarnings("ConstantConditions") public final class TextFormatterAssertions { - public static void assertTextFormatterCompliance(Path temp, TextFormatter p, T value, Function expected, Collection encodings) throws IOException { - Objects.requireNonNull(temp); - Objects.requireNonNull(p); - Objects.requireNonNull(value); - Objects.requireNonNull(expected); - Objects.requireNonNull(encodings); + public static void assertTextFormatterCompliance( + @NonNull Path temp, + @NonNull TextFormatter p, + @NonNull T value, + @NonNull Function expected, + @NonNull Collection encodings) throws IOException { checkDefaultProvider(temp); diff --git a/java-io-base/src/test/java/_test/io/text/TextParserAssertions.java b/java-io-base/src/test/java/_test/io/text/TextParserAssertions.java index 3bbc179..122906d 100644 --- a/java-io-base/src/test/java/_test/io/text/TextParserAssertions.java +++ b/java-io-base/src/test/java/_test/io/text/TextParserAssertions.java @@ -6,6 +6,7 @@ import _test.io.Util; import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; +import lombok.NonNull; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextParser; @@ -17,7 +18,6 @@ import java.nio.file.Path; import java.nio.file.attribute.FileTime; import java.util.Collection; -import java.util.Objects; import java.util.UUID; import java.util.function.Function; @@ -29,12 +29,12 @@ @SuppressWarnings("ConstantConditions") public final class TextParserAssertions { - public static void assertTextParserCompliance(Path temp, TextParser p, T value, Function expected, Collection encodings, boolean allowEmpty) throws IOException { - Objects.requireNonNull(temp); - Objects.requireNonNull(p); - Objects.requireNonNull(value); - Objects.requireNonNull(expected); - Objects.requireNonNull(encodings); + public static void assertTextParserCompliance( + @NonNull Path temp, + @NonNull TextParser p, + @NonNull T value, + @NonNull Function expected, + @NonNull Collection encodings, boolean allowEmpty) throws IOException { checkDefaultProvider(temp); diff --git a/java-io-base/src/test/java/internal/io/text/NumberFormatsTest.java b/java-io-base/src/test/java/internal/io/text/NumberFormatsTest.java index 79a1172..fb84df1 100644 --- a/java-io-base/src/test/java/internal/io/text/NumberFormatsTest.java +++ b/java-io-base/src/test/java/internal/io/text/NumberFormatsTest.java @@ -16,11 +16,15 @@ */ package internal.io.text; -import static internal.io.text.NumberFormats.*; +import org.junit.jupiter.api.Test; + import java.text.NumberFormat; import java.util.Locale; -import static org.assertj.core.api.Assertions.*; -import org.junit.jupiter.api.Test; + +import static internal.io.text.NumberFormats.parseAll; +import static internal.io.text.NumberFormats.simplify; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatNullPointerException; /** * diff --git a/java-io-base/src/test/java/nbbrd/io/AbstractIOIteratorTest.java b/java-io-base/src/test/java/nbbrd/io/AbstractIOIteratorTest.java index e24089a..48653cb 100644 --- a/java-io-base/src/test/java/nbbrd/io/AbstractIOIteratorTest.java +++ b/java-io-base/src/test/java/nbbrd/io/AbstractIOIteratorTest.java @@ -2,10 +2,12 @@ import _test.io.IOIteratorAssertions; import _test.io.IOIteratorFactory; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.util.function.Supplier; + import static org.assertj.core.api.Assertions.assertThatIOException; -import org.junit.jupiter.api.Test; /** * diff --git a/java-io-base/src/test/java/nbbrd/io/IOIteratorTest.java b/java-io-base/src/test/java/nbbrd/io/IOIteratorTest.java index 91cb45b..a8b4840 100644 --- a/java-io-base/src/test/java/nbbrd/io/IOIteratorTest.java +++ b/java-io-base/src/test/java/nbbrd/io/IOIteratorTest.java @@ -20,6 +20,9 @@ import _test.io.IOIteratorFactory; import _test.io.IteratorFactory; import com.google.common.collect.Iterators; +import nbbrd.io.function.*; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.io.UncheckedIOException; import java.util.ArrayList; @@ -29,13 +32,8 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; import java.util.function.Supplier; -import nbbrd.io.function.IOConsumer; -import nbbrd.io.function.IOPredicate; -import nbbrd.io.function.IORunnable; -import nbbrd.io.function.IOSupplier; -import nbbrd.io.function.IOUnaryOperator; + import static org.assertj.core.api.Assertions.*; -import org.junit.jupiter.api.Test; /** * @@ -69,14 +67,16 @@ public void testSingleton() throws IOException { @Test public void testSingletonNull() throws IOException { - Supplier> sample = () -> IOIterator.singleton(null); + assertThatNullPointerException().isThrownBy(() -> IOIterator.singleton(null)); + + Supplier> sample = () -> IOIterator.singleton(""); IOIteratorAssertions.assertApi(sample); assertThatExceptionOfType(UnsupportedOperationException.class) .isThrownBy(sample.get()::removeWithIO); - IOIteratorAssertions.assertContent(sample, (String) null); + IOIteratorAssertions.assertContent(sample, ""); } @Test diff --git a/java-io-base/src/test/java/nbbrd/io/function/IOConsumerTest.java b/java-io-base/src/test/java/nbbrd/io/function/IOConsumerTest.java index c18a0c4..813738a 100644 --- a/java-io-base/src/test/java/nbbrd/io/function/IOConsumerTest.java +++ b/java-io-base/src/test/java/nbbrd/io/function/IOConsumerTest.java @@ -1,34 +1,34 @@ /* * Copyright 2020 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package nbbrd.io.function; import _test.io.Error1; import _test.io.Error2; +import lombok.NonNull; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; + import static org.assertj.core.api.Assertions.*; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.junit.jupiter.api.Test; /** - * * @author Philippe Charles */ public class IOConsumerTest { @@ -96,9 +96,7 @@ public void testConsumerNoOp() { assertThatCode(() -> IOConsumer.noOp().acceptWithIO(null)).doesNotThrowAnyException(); } - @NonNull - public static IOConsumer throwing(@NonNull Supplier ex) { - Objects.requireNonNull(ex); + public static @NonNull IOConsumer throwing(@NonNull Supplier ex) { return (o) -> { throw ex.get(); }; diff --git a/java-io-base/src/test/java/nbbrd/io/function/IOFunctionTest.java b/java-io-base/src/test/java/nbbrd/io/function/IOFunctionTest.java index 740bd7c..2daf667 100644 --- a/java-io-base/src/test/java/nbbrd/io/function/IOFunctionTest.java +++ b/java-io-base/src/test/java/nbbrd/io/function/IOFunctionTest.java @@ -1,33 +1,33 @@ /* * Copyright 2020 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package nbbrd.io.function; import _test.io.Error1; import _test.io.Error2; +import lombok.NonNull; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.function.Supplier; + import static org.assertj.core.api.Assertions.*; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.junit.jupiter.api.Test; /** - * * @author Philippe Charles */ public class IOFunctionTest { @@ -102,7 +102,6 @@ public void testFunctionOf() throws IOException { @NonNull public static IOFunction throwing(@NonNull Supplier ex) { - Objects.requireNonNull(ex); return (o) -> { throw ex.get(); }; diff --git a/java-io-base/src/test/java/nbbrd/io/function/IOPredicateTest.java b/java-io-base/src/test/java/nbbrd/io/function/IOPredicateTest.java index 63a1d6b..38a7217 100644 --- a/java-io-base/src/test/java/nbbrd/io/function/IOPredicateTest.java +++ b/java-io-base/src/test/java/nbbrd/io/function/IOPredicateTest.java @@ -1,33 +1,34 @@ /* * Copyright 2020 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package nbbrd.io.function; import _test.io.Error1; import _test.io.Error2; +import lombok.NonNull; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.io.UncheckedIOException; import java.util.Objects; import java.util.function.Supplier; + import static org.assertj.core.api.Assertions.*; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.junit.jupiter.api.Test; /** - * * @author Philippe Charles */ public class IOPredicateTest { @@ -125,7 +126,6 @@ public void testPredicateOf() throws IOException { @NonNull public static IOPredicate throwing(@NonNull Supplier ex) { - Objects.requireNonNull(ex); return (o) -> { throw ex.get(); }; diff --git a/java-io-base/src/test/java/nbbrd/io/function/IORunnableTest.java b/java-io-base/src/test/java/nbbrd/io/function/IORunnableTest.java index 48e36ef..a35bdbb 100644 --- a/java-io-base/src/test/java/nbbrd/io/function/IORunnableTest.java +++ b/java-io-base/src/test/java/nbbrd/io/function/IORunnableTest.java @@ -1,33 +1,33 @@ /* * Copyright 2020 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package nbbrd.io.function; import _test.io.Error1; +import lombok.NonNull; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; + import static org.assertj.core.api.Assertions.*; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.junit.jupiter.api.Test; /** - * * @author Philippe Charles */ public class IORunnableTest { @@ -91,7 +91,6 @@ public void testRunnableNoOp() { @NonNull public static IORunnable throwing(@NonNull Supplier ex) { - Objects.requireNonNull(ex); return () -> { throw ex.get(); }; diff --git a/java-io-base/src/test/java/nbbrd/io/function/IOSupplierTest.java b/java-io-base/src/test/java/nbbrd/io/function/IOSupplierTest.java index 9224540..0acc432 100644 --- a/java-io-base/src/test/java/nbbrd/io/function/IOSupplierTest.java +++ b/java-io-base/src/test/java/nbbrd/io/function/IOSupplierTest.java @@ -1,34 +1,34 @@ /* * Copyright 2020 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package nbbrd.io.function; import _test.io.Error1; import _test.io.Error2; +import lombok.NonNull; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; + import static org.assertj.core.api.Assertions.*; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.junit.jupiter.api.Test; /** - * * @author Philippe Charles */ public class IOSupplierTest { @@ -84,7 +84,6 @@ public void testSupplierAndThen() throws IOException { @NonNull public static IOSupplier throwing(@NonNull Supplier ex) { - Objects.requireNonNull(ex); return () -> { throw ex.get(); }; diff --git a/java-io-base/src/test/java/nbbrd/io/function/IOUnaryOperatorTest.java b/java-io-base/src/test/java/nbbrd/io/function/IOUnaryOperatorTest.java index 25a76a1..229b09f 100644 --- a/java-io-base/src/test/java/nbbrd/io/function/IOUnaryOperatorTest.java +++ b/java-io-base/src/test/java/nbbrd/io/function/IOUnaryOperatorTest.java @@ -1,32 +1,32 @@ /* * Copyright 2020 National Bank of Belgium - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * http://ec.europa.eu/idabc/eupl - * - * Unless required by applicable law or agreed to in writing, software + * + * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and + * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package nbbrd.io.function; import _test.io.Error1; +import lombok.NonNull; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.io.UncheckedIOException; -import java.util.Objects; import java.util.function.Supplier; + import static org.assertj.core.api.Assertions.*; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.junit.jupiter.api.Test; /** - * * @author Philippe Charles */ public class IOUnaryOperatorTest { @@ -71,7 +71,6 @@ public void testFunctionIdentity() throws IOException { @NonNull public static IOUnaryOperator throwing(@NonNull Supplier ex) { - Objects.requireNonNull(ex); return (o) -> { throw ex.get(); }; diff --git a/java-io-base/src/test/java/nbbrd/io/text/BasePropertyTest.java b/java-io-base/src/test/java/nbbrd/io/text/BasePropertyTest.java index f0c6fe8..8453c81 100644 --- a/java-io-base/src/test/java/nbbrd/io/text/BasePropertyTest.java +++ b/java-io-base/src/test/java/nbbrd/io/text/BasePropertyTest.java @@ -1,10 +1,9 @@ package nbbrd.io.text; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.jupiter.api.Test; -import java.util.Objects; import java.util.function.Function; import static org.assertj.core.api.Assertions.assertThat; @@ -31,7 +30,7 @@ public void testKeysOf() { private static class MockedBaseProperty extends BaseProperty { @lombok.Getter - @lombok.NonNull + @NonNull private String key; } @@ -40,7 +39,6 @@ private static class MockedBaseProperty extends BaseProperty { } static Function getterOf(@NonNull String key, @Nullable Object value) { - Objects.requireNonNull(key); return input -> input.equals(key) && value != null ? value.toString() : null; } } diff --git a/java-io-picocsv/src/main/java/nbbrd/io/picocsv/Picocsv.java b/java-io-picocsv/src/main/java/nbbrd/io/picocsv/Picocsv.java index 92a7d01..4025c16 100644 --- a/java-io-picocsv/src/main/java/nbbrd/io/picocsv/Picocsv.java +++ b/java-io-picocsv/src/main/java/nbbrd/io/picocsv/Picocsv.java @@ -1,11 +1,11 @@ package nbbrd.io.picocsv; import internal.io.text.LegacyFiles; +import lombok.NonNull; import nbbrd.io.text.TextBuffers; import nbbrd.io.text.TextFormatter; import nbbrd.io.text.TextParser; import nbbrd.picocsv.Csv; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.*; import java.nio.charset.Charset; @@ -15,7 +15,6 @@ import java.nio.file.FileSystemException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Objects; import static nbbrd.io.text.TextResource.newBufferedReader; import static nbbrd.io.text.TextResource.newBufferedWriter; @@ -36,23 +35,21 @@ public static final class Parser implements TextParser { return new Builder().handler(handler); } - @lombok.NonNull + @NonNull @lombok.Getter @lombok.Builder.Default private final Csv.Format format = Csv.Format.DEFAULT; - @lombok.NonNull + @NonNull @lombok.Getter @lombok.Builder.Default private final Csv.ReaderOptions options = Csv.ReaderOptions.DEFAULT; - @lombok.NonNull + @NonNull private final InputHandler handler; @Override public @NonNull T parseFile(@NonNull File source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); LegacyFiles.checkSource(source); CharsetDecoder decoder = encoding.newDecoder(); try (InputStream resource = LegacyFiles.newInputStream(source)) { @@ -62,8 +59,6 @@ public static final class Parser implements TextParser { @Override public @NonNull T parsePath(@NonNull Path source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); checkIsFile(source); CharsetDecoder decoder = encoding.newDecoder(); try (InputStream resource = Files.newInputStream(source)) { @@ -73,20 +68,16 @@ public static final class Parser implements TextParser { @Override public @NonNull T parseReader(@NonNull Reader resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return parse(resource, TextBuffers.UNKNOWN); } @Override public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); CharsetDecoder decoder = encoding.newDecoder(); return parse(newBufferedReader(resource, decoder), TextBuffers.of(resource, decoder)); } public @NonNull T parseCsv(Csv.@NonNull Reader resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return handler.parse(resource); } @@ -113,24 +104,21 @@ public static final class Formatter implements TextFormatter { return new Builder().handler(handler); } - @lombok.NonNull + @NonNull @lombok.Getter @lombok.Builder.Default private final Csv.Format format = Csv.Format.DEFAULT; - @lombok.NonNull + @NonNull @lombok.Getter @lombok.Builder.Default private final Csv.WriterOptions options = Csv.WriterOptions.DEFAULT; - @lombok.NonNull + @NonNull private final OutputHandler handler; @Override public void formatFile(@NonNull T value, @NonNull File target, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); - Objects.requireNonNull(encoding, "encoding"); LegacyFiles.checkTarget(target); CharsetEncoder encoder = encoding.newEncoder(); try (OutputStream resource = LegacyFiles.newOutputStream(target)) { @@ -140,9 +128,6 @@ public void formatFile(@NonNull T value, @NonNull File target, @NonNull Charset @Override public void formatPath(@NonNull T value, @NonNull Path target, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); - Objects.requireNonNull(encoding, "encoding"); checkIsFile(target); CharsetEncoder encoder = encoding.newEncoder(); try (OutputStream resource = Files.newOutputStream(target)) { @@ -152,23 +137,16 @@ public void formatPath(@NonNull T value, @NonNull Path target, @NonNull Charset @Override public void formatWriter(@NonNull T value, @NonNull Writer resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); format(value, resource, TextBuffers.UNKNOWN); } @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); CharsetEncoder encoder = encoding.newEncoder(); format(value, newBufferedWriter(resource, encoder), TextBuffers.of(resource, encoder)); } public void formatCsv(@NonNull T value, Csv.@NonNull Writer resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); handler.format(value, resource); } diff --git a/java-io-picocsv/src/test/java/nbbrd/io/picocsv/PicocsvTest.java b/java-io-picocsv/src/test/java/nbbrd/io/picocsv/PicocsvTest.java index c3a99a8..34a7ed4 100644 --- a/java-io-picocsv/src/test/java/nbbrd/io/picocsv/PicocsvTest.java +++ b/java-io-picocsv/src/test/java/nbbrd/io/picocsv/PicocsvTest.java @@ -1,8 +1,8 @@ package nbbrd.io.picocsv; import _test.io.ResourceId; +import lombok.NonNull; import nbbrd.picocsv.Csv; -import org.checkerframework.checker.nullness.qual.NonNull; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/java-io-win/src/main/java/nbbrd/io/win/CScriptWrapper.java b/java-io-win/src/main/java/nbbrd/io/win/CScriptWrapper.java index 2e9ec2d..e614845 100644 --- a/java-io-win/src/main/java/nbbrd/io/win/CScriptWrapper.java +++ b/java-io-win/src/main/java/nbbrd/io/win/CScriptWrapper.java @@ -16,7 +16,7 @@ */ package nbbrd.io.win; -import org.checkerframework.checker.nullness.qual.NonNull; +import lombok.NonNull; import java.io.File; import java.io.IOException; diff --git a/java-io-win/src/main/java/nbbrd/io/win/RegWrapper.java b/java-io-win/src/main/java/nbbrd/io/win/RegWrapper.java index d2769ba..e0ceec7 100644 --- a/java-io-win/src/main/java/nbbrd/io/win/RegWrapper.java +++ b/java-io-win/src/main/java/nbbrd/io/win/RegWrapper.java @@ -16,10 +16,10 @@ */ package nbbrd.io.win; +import lombok.NonNull; import nbbrd.design.VisibleForTesting; import nbbrd.io.sys.EndOfProcessException; import nbbrd.io.sys.ProcessReader; -import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import java.io.BufferedReader; @@ -37,7 +37,6 @@ public class RegWrapper { public static final String COMMAND = "reg"; public @NonNull Map> query(@NonNull String keyName, boolean recursive) throws IOException { - Objects.requireNonNull(keyName); try (BufferedReader reader = ProcessReader.newReader(getArgs(keyName, recursive))) { return parse(reader); } catch (EndOfProcessException ex) { @@ -100,13 +99,13 @@ public static final class RegValue { return m.matches() ? new RegValue(m.group(1), RegType.valueOf(m.group(2)), m.group(3)) : null; } - @lombok.NonNull + @NonNull private String name; - @lombok.NonNull + @NonNull private RegType dataType; - @lombok.NonNull + @NonNull private String value; } diff --git a/java-io-win/src/main/java/nbbrd/io/win/WhereWrapper.java b/java-io-win/src/main/java/nbbrd/io/win/WhereWrapper.java index 5dcb540..80d5be5 100644 --- a/java-io-win/src/main/java/nbbrd/io/win/WhereWrapper.java +++ b/java-io-win/src/main/java/nbbrd/io/win/WhereWrapper.java @@ -16,8 +16,8 @@ */ package nbbrd.io.win; +import lombok.NonNull; import nbbrd.io.sys.EndOfProcessException; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.IOException; diff --git a/java-io-xml-bind/src/main/java/nbbrd/io/xml/bind/Jaxb.java b/java-io-xml-bind/src/main/java/nbbrd/io/xml/bind/Jaxb.java index 03161d3..536fdb3 100644 --- a/java-io-xml-bind/src/main/java/nbbrd/io/xml/bind/Jaxb.java +++ b/java-io-xml-bind/src/main/java/nbbrd/io/xml/bind/Jaxb.java @@ -17,13 +17,13 @@ package nbbrd.io.xml.bind; import internal.io.text.LegacyFiles; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.WrappedIOException; import nbbrd.io.function.IOSupplier; import nbbrd.io.xml.Sax; import nbbrd.io.xml.Stax; import nbbrd.io.xml.Xml; -import org.checkerframework.checker.nullness.qual.NonNull; import org.xml.sax.SAXParseException; import javax.xml.bind.*; @@ -33,7 +33,6 @@ import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import java.util.Objects; /** * @author Philippe Charles @@ -42,7 +41,6 @@ public class Jaxb { public static @NonNull Unmarshaller createUnmarshaller(@NonNull Class type) throws IOException { - Objects.requireNonNull(type); try { return JAXBContext.newInstance(type).createUnmarshaller(); } catch (JAXBException ex) { @@ -51,7 +49,6 @@ public class Jaxb { } public static @NonNull Unmarshaller createUnmarshaller(@NonNull JAXBContext context) throws IOException { - Objects.requireNonNull(context); try { return context.createUnmarshaller(); } catch (JAXBException ex) { @@ -60,7 +57,6 @@ public class Jaxb { } public static @NonNull Marshaller createMarshaller(@NonNull Class type) throws IOException { - Objects.requireNonNull(type); try { return JAXBContext.newInstance(type).createMarshaller(); } catch (JAXBException ex) { @@ -69,7 +65,6 @@ public class Jaxb { } public static @NonNull Marshaller createMarshaller(@NonNull JAXBContext context) throws IOException { - Objects.requireNonNull(context); try { return context.createMarshaller(); } catch (JAXBException ex) { @@ -83,13 +78,11 @@ public static final class Parser implements Xml.Parser { @StaticFactoryMethod public static @NonNull Parser of(@NonNull Class type) { - Objects.requireNonNull(type); return Parser.builder().factory(() -> createUnmarshaller(type)).build(); } @StaticFactoryMethod public static @NonNull Parser of(@NonNull JAXBContext context) { - Objects.requireNonNull(context); return Parser.builder().factory(() -> createUnmarshaller(context)).build(); } @@ -97,14 +90,14 @@ public final static class Builder { } - @lombok.NonNull + @NonNull private final IOSupplier factory; @lombok.Getter @lombok.Builder.Default private final boolean ignoreXXE = false; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final IOSupplier xxeFactory = Parser::getStaxFactory; @@ -120,8 +113,6 @@ public final static class Builder { @Override public @NonNull T parseFile(@NonNull File source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); LegacyFiles.checkSource(source); Unmarshaller engine = factory.getWithIO(); @@ -132,7 +123,6 @@ public final static class Builder { @Override public @NonNull T parseReader(@NonNull Reader resource) throws IOException { - Objects.requireNonNull(resource, "resource"); Unmarshaller engine = factory.getWithIO(); return cast(!ignoreXXE @@ -142,7 +132,6 @@ public final static class Builder { @Override public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { - Objects.requireNonNull(resource, "resource"); Unmarshaller engine = factory.getWithIO(); return cast(!ignoreXXE @@ -152,8 +141,6 @@ public final static class Builder { @Override public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); Unmarshaller engine = factory.getWithIO(); return cast(!ignoreXXE @@ -256,27 +243,25 @@ public static final class Formatter implements Xml.Formatter { @StaticFactoryMethod public static @NonNull Formatter of(@NonNull Class type) { - Objects.requireNonNull(type); return Formatter.builder().factory(() -> createMarshaller(type)).build(); } @StaticFactoryMethod public static @NonNull Formatter of(@NonNull JAXBContext context) { - Objects.requireNonNull(context); return Formatter.builder().factory(() -> createMarshaller(context)).build(); } public final static class Builder { } - @lombok.NonNull + @NonNull private final IOSupplier factory; @lombok.Getter @lombok.Builder.Default private final boolean formatted = false; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final Charset encoding = StandardCharsets.UTF_8; @@ -287,7 +272,6 @@ public final static class Builder { @Override public void formatFile(@NonNull T value, @NonNull File target) throws IOException { - Objects.requireNonNull(value, "value"); LegacyFiles.checkTarget(target); try { getEngine(getDefaultEncoding()).marshal(value, target); @@ -298,8 +282,6 @@ public void formatFile(@NonNull T value, @NonNull File target) throws IOExceptio @Override public void formatWriter(@NonNull T value, @NonNull Writer resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); try { getEngine(getDefaultEncoding()).marshal(value, resource); } catch (JAXBException ex) { @@ -309,8 +291,6 @@ public void formatWriter(@NonNull T value, @NonNull Writer resource) throws IOEx @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); try { getEngine(getDefaultEncoding()).marshal(value, resource); } catch (JAXBException ex) { @@ -320,9 +300,6 @@ public void formatStream(@NonNull T value, @NonNull OutputStream resource) throw @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); try { getEngine(encoding).marshal(value, resource); } catch (JAXBException ex) { diff --git a/java-io-xml-bind/src/test/java/nbbrd/io/xml/bind/JaxbTest.java b/java-io-xml-bind/src/test/java/nbbrd/io/xml/bind/JaxbTest.java index 0b021b1..fefdb90 100644 --- a/java-io-xml-bind/src/test/java/nbbrd/io/xml/bind/JaxbTest.java +++ b/java-io-xml-bind/src/test/java/nbbrd/io/xml/bind/JaxbTest.java @@ -17,8 +17,8 @@ package nbbrd.io.xml.bind; import _test.*; -import _test.sample.XmlParserAssertions; import _test.sample.Person; +import _test.sample.XmlParserAssertions; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; import com.github.tomakehurst.wiremock.junit5.WireMockExtension; import nbbrd.io.WrappedIOException; @@ -41,12 +41,12 @@ import java.nio.file.Path; import java.util.List; -import static _test.sample.XmlFormatterAssertions.assertXmlFormatterCompliance; -import static _test.sample.XmlFormatterAssertions.assertFormatterSafety; -import static _test.sample.XmlParserAssertions.assertXmlParserCompliance; -import static _test.sample.XmlParserAssertions.assertParserSafety; import static _test.sample.Person.BOOLS; import static _test.sample.Person.ENCODINGS; +import static _test.sample.XmlFormatterAssertions.assertFormatterSafety; +import static _test.sample.XmlFormatterAssertions.assertXmlFormatterCompliance; +import static _test.sample.XmlParserAssertions.assertParserSafety; +import static _test.sample.XmlParserAssertions.assertXmlParserCompliance; import static org.assertj.core.api.Assertions.assertThat; /** diff --git a/java-io-xml/src/main/java/nbbrd/io/xml/Sax.java b/java-io-xml/src/main/java/nbbrd/io/xml/Sax.java index a1b9c00..dab65d4 100644 --- a/java-io-xml/src/main/java/nbbrd/io/xml/Sax.java +++ b/java-io-xml/src/main/java/nbbrd/io/xml/Sax.java @@ -17,11 +17,11 @@ package nbbrd.io.xml; import internal.io.text.LegacyFiles; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.WrappedIOException; import nbbrd.io.function.IORunnable; import nbbrd.io.function.IOSupplier; -import org.checkerframework.checker.nullness.qual.NonNull; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; @@ -117,30 +117,30 @@ public final static class Builder { } - @lombok.NonNull + @NonNull @lombok.Builder.Default private final IOSupplier factory = Sax::createReader; - @lombok.NonNull + @NonNull private final ContentHandler contentHandler; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final DTDHandler dtdHandler = DEFAULT_HANDLER; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final EntityResolver entityResolver = DEFAULT_HANDLER; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final ErrorHandler errorHandler = DEFAULT_HANDLER; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final IORunnable before = IORunnable.noOp(); - @lombok.NonNull + @NonNull private final IOSupplier after; @lombok.Getter @@ -155,28 +155,22 @@ public final static class Builder { @Override public @NonNull T parseFile(@NonNull File source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); LegacyFiles.checkSource(source); return parse(newInputSource(source, encoding)); } @Override public @NonNull T parseReader(@NonNull Reader resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return parse(new InputSource(resource)); } @Override public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return parse(new InputSource(resource)); } @Override public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); InputSource input = new InputSource(resource); input.setEncoding(encoding.name()); return parse(input); diff --git a/java-io-xml/src/main/java/nbbrd/io/xml/Stax.java b/java-io-xml/src/main/java/nbbrd/io/xml/Stax.java index 80010a6..0033a98 100644 --- a/java-io-xml/src/main/java/nbbrd/io/xml/Stax.java +++ b/java-io-xml/src/main/java/nbbrd/io/xml/Stax.java @@ -17,12 +17,12 @@ package nbbrd.io.xml; import internal.io.text.LegacyFiles; +import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.Resource; import nbbrd.io.WrappedIOException; import nbbrd.io.function.IORunnable; import nbbrd.io.function.IOSupplier; -import org.checkerframework.checker.nullness.qual.NonNull; import javax.xml.stream.*; import java.io.*; @@ -124,10 +124,10 @@ public Builder value(ValueHandler handler) { } } - @lombok.NonNull + @NonNull private final FlowHandler handler; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final IOSupplier factory = XMLInputFactory::newFactory; @@ -144,8 +144,6 @@ public Builder value(ValueHandler handler) { @Override public @NonNull T parseFile(@NonNull File source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); LegacyFiles.checkSource(source); InputStream resource = LegacyFiles.newInputStream(source); return parse(o -> o.createXMLStreamReader(LegacyFiles.toSystemId(source), resource), resource); @@ -153,42 +151,34 @@ public Builder value(ValueHandler handler) { @Override public @NonNull T parseReader(@NonNull IOSupplier source) throws IOException { - Objects.requireNonNull(source, "source"); Reader resource = LegacyFiles.checkResource(source.getWithIO(), "Missing Reader"); return parse(o -> o.createXMLStreamReader(resource), resource); } @Override public @NonNull T parseStream(@NonNull IOSupplier source) throws IOException { - Objects.requireNonNull(source, "source"); InputStream resource = LegacyFiles.checkResource(source.getWithIO(), "Missing InputStream"); return parse(o -> o.createXMLStreamReader(resource), resource); } @Override public @NonNull T parseStream(@NonNull IOSupplier source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); InputStream resource = LegacyFiles.checkResource(source.getWithIO(), "Missing InputStream"); return parse(o -> o.createXMLStreamReader(resource, encoding.name()), resource); } @Override public @NonNull T parseReader(@NonNull Reader resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return parse(o -> o.createXMLStreamReader(resource), NOTHING_TO_CLOSE); } @Override public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return parse(o -> o.createXMLStreamReader(resource), NOTHING_TO_CLOSE); } @Override public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); return parse(o -> o.createXMLStreamReader(resource, encoding.name()), NOTHING_TO_CLOSE); } @@ -236,10 +226,10 @@ public Builder value(ValueHandler handler) { } } - @lombok.NonNull + @NonNull private final FlowHandler handler; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final IOSupplier factory = XMLInputFactory::newFactory; @@ -256,8 +246,6 @@ public Builder value(ValueHandler handler) { @Override public @NonNull T parseFile(@NonNull File source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); LegacyFiles.checkSource(source); InputStream resource = LegacyFiles.newInputStream(source); return parse(o -> o.createXMLEventReader(LegacyFiles.toSystemId(source), resource), resource); @@ -265,42 +253,34 @@ public Builder value(ValueHandler handler) { @Override public @NonNull T parseReader(@NonNull IOSupplier source) throws IOException { - Objects.requireNonNull(source, "source"); Reader resource = LegacyFiles.checkResource(source.getWithIO(), "Missing Reader"); return parse(o -> o.createXMLEventReader(resource), resource); } @Override public @NonNull T parseStream(@NonNull IOSupplier source) throws IOException { - Objects.requireNonNull(source, "source"); InputStream resource = LegacyFiles.checkResource(source.getWithIO(), "Missing InputStream"); return parse(o -> o.createXMLEventReader(resource), resource); } @Override public @NonNull T parseStream(@NonNull IOSupplier source, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(source, "source"); - Objects.requireNonNull(encoding, "encoding"); InputStream resource = LegacyFiles.checkResource(source.getWithIO(), "Missing InputStream"); return parse(o -> o.createXMLEventReader(resource, encoding.name()), resource); } @Override public @NonNull T parseReader(@NonNull Reader resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return parse(o -> o.createXMLEventReader(resource), NOTHING_TO_CLOSE); } @Override public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { - Objects.requireNonNull(resource, "resource"); return parse(o -> o.createXMLEventReader(resource), NOTHING_TO_CLOSE); } @Override public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); return parse(o -> o.createXMLEventReader(resource, encoding.name()), NOTHING_TO_CLOSE); } @@ -350,14 +330,14 @@ public StreamFormatter withHandler(OutputHandler handler) return withHandler2(handler.withEncoding()); } - @lombok.NonNull + @NonNull private final OutputHandler2 handler2; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final IOSupplier factory = XMLOutputFactory::newFactory; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final Charset encoding = StandardCharsets.UTF_8; @@ -373,7 +353,6 @@ public boolean isFormatted() { @Override public void formatFile(@NonNull T value, @NonNull File target) throws IOException { - Objects.requireNonNull(value, "value"); LegacyFiles.checkTarget(target); try (OutputStream resource = LegacyFiles.newOutputStream(target)) { format(value, o -> o.createXMLStreamWriter(resource, getDefaultEncoding().name()), getDefaultEncoding()); @@ -382,8 +361,6 @@ public void formatFile(@NonNull T value, @NonNull File target) throws IOExceptio @Override public void formatWriter(@NonNull T value, @NonNull IOSupplier target) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); try (Writer resource = LegacyFiles.checkResource(target.getWithIO(), "Missing Writer")) { format(value, o -> o.createXMLStreamWriter(resource), getDefaultEncoding()); } @@ -391,8 +368,6 @@ public void formatWriter(@NonNull T value, @NonNull IOSupplier @Override public void formatStream(@NonNull T value, @NonNull IOSupplier target) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); try (OutputStream resource = LegacyFiles.checkResource(target.getWithIO(), "Missing OutputStream")) { format(value, o -> o.createXMLStreamWriter(resource, getDefaultEncoding().name()), getDefaultEncoding()); } @@ -400,23 +375,16 @@ public void formatStream(@NonNull T value, @NonNull IOSupplier o.createXMLStreamWriter(resource), getDefaultEncoding()); } @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); format(value, o -> o.createXMLStreamWriter(resource, getDefaultEncoding().name()), getDefaultEncoding()); } @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); format(value, o -> o.createXMLStreamWriter(resource, encoding.name()), encoding); } @@ -463,14 +431,14 @@ public EventFormatter withHandler(OutputHandler handler) { return withHandler2(handler.withEncoding()); } - @lombok.NonNull + @NonNull private final OutputHandler2 handler2; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final IOSupplier factory = XMLOutputFactory::newFactory; - @lombok.NonNull + @NonNull @lombok.Builder.Default private final Charset encoding = StandardCharsets.UTF_8; @@ -486,7 +454,6 @@ public boolean isFormatted() { @Override public void formatFile(@NonNull T value, @NonNull File target) throws IOException { - Objects.requireNonNull(value, "value"); LegacyFiles.checkTarget(target); try (OutputStream resource = LegacyFiles.newOutputStream(target)) { format(value, o -> o.createXMLEventWriter(resource, getDefaultEncoding().name()), getDefaultEncoding()); @@ -495,8 +462,6 @@ public void formatFile(@NonNull T value, @NonNull File target) throws IOExceptio @Override public void formatWriter(@NonNull T value, @NonNull IOSupplier target) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); try (Writer resource = LegacyFiles.checkResource(target.getWithIO(), "Missing Writer")) { format(value, o -> o.createXMLEventWriter(resource), getDefaultEncoding()); } @@ -504,8 +469,6 @@ public void formatWriter(@NonNull T value, @NonNull IOSupplier @Override public void formatStream(@NonNull T value, @NonNull IOSupplier target) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(target, "target"); try (OutputStream resource = LegacyFiles.checkResource(target.getWithIO(), "Missing OutputStream")) { format(value, o -> o.createXMLEventWriter(resource, getDefaultEncoding().name()), getDefaultEncoding()); } @@ -513,23 +476,16 @@ public void formatStream(@NonNull T value, @NonNull IOSupplier o.createXMLEventWriter(resource), getDefaultEncoding()); } @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); format(value, o -> o.createXMLEventWriter(resource, getDefaultEncoding().name()), getDefaultEncoding()); } @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); format(value, o -> o.createXMLEventWriter(resource, encoding.name()), encoding); } diff --git a/java-io-xml/src/main/java/nbbrd/io/xml/Xml.java b/java-io-xml/src/main/java/nbbrd/io/xml/Xml.java index 60b65b2..ca3521c 100644 --- a/java-io-xml/src/main/java/nbbrd/io/xml/Xml.java +++ b/java-io-xml/src/main/java/nbbrd/io/xml/Xml.java @@ -16,12 +16,12 @@ */ package nbbrd.io.xml; +import lombok.NonNull; import nbbrd.io.FileFormatter; import nbbrd.io.FileParser; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextFormatter; import nbbrd.io.text.TextParser; -import org.checkerframework.checker.nullness.qual.NonNull; import java.io.*; import java.nio.charset.Charset; @@ -59,13 +59,13 @@ public interface Formatter extends FileFormatter, TextFormatter { @lombok.RequiredArgsConstructor private static final class AdaptedParser implements Parser { - @lombok.NonNull + @NonNull private final Parser delegate; - @lombok.NonNull + @NonNull private final FileParser fileParser; - @lombok.NonNull + @NonNull private final TextParser textParser; @Override @@ -142,13 +142,13 @@ public boolean isIgnoreXXE() { @lombok.RequiredArgsConstructor private static final class AdaptedFormatter implements Formatter { - @lombok.NonNull + @NonNull private final Formatter delegate; - @lombok.NonNull + @NonNull private final FileFormatter fileFormatter; - @lombok.NonNull + @NonNull private final TextFormatter textFormatter; @Override diff --git a/java-io-xml/src/test/java/_test/ForwardingMarshaller.java b/java-io-xml/src/test/java/_test/ForwardingMarshaller.java index 01d3ba4..7bb2569 100644 --- a/java-io-xml/src/test/java/_test/ForwardingMarshaller.java +++ b/java-io-xml/src/test/java/_test/ForwardingMarshaller.java @@ -16,16 +16,17 @@ */ package _test; -import java.io.File; -import java.io.OutputStream; -import java.io.Writer; +import org.w3c.dom.Node; +import org.xml.sax.ContentHandler; + import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.stream.XMLEventWriter; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.Result; -import org.w3c.dom.Node; -import org.xml.sax.ContentHandler; +import java.io.File; +import java.io.OutputStream; +import java.io.Writer; /** * diff --git a/java-io-xml/src/test/java/_test/ForwardingReader.java b/java-io-xml/src/test/java/_test/ForwardingReader.java index 9ffe6cb..3899451 100644 --- a/java-io-xml/src/test/java/_test/ForwardingReader.java +++ b/java-io-xml/src/test/java/_test/ForwardingReader.java @@ -16,9 +16,10 @@ */ package _test; +import nbbrd.io.function.IORunnable; + import java.io.IOException; import java.io.Reader; -import nbbrd.io.function.IORunnable; /** * diff --git a/java-io-xml/src/test/java/_test/ForwardingUnmarshaller.java b/java-io-xml/src/test/java/_test/ForwardingUnmarshaller.java index 1e96df7..05ec680 100644 --- a/java-io-xml/src/test/java/_test/ForwardingUnmarshaller.java +++ b/java-io-xml/src/test/java/_test/ForwardingUnmarshaller.java @@ -16,13 +16,14 @@ */ package _test; -import java.io.File; -import java.io.InputStream; -import java.io.Reader; +import org.xml.sax.InputSource; + import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import javax.xml.stream.XMLStreamReader; -import org.xml.sax.InputSource; +import java.io.File; +import java.io.InputStream; +import java.io.Reader; /** * diff --git a/java-io-xml/src/test/java/_test/ForwardingWriter.java b/java-io-xml/src/test/java/_test/ForwardingWriter.java index 0ec50dc..f573147 100644 --- a/java-io-xml/src/test/java/_test/ForwardingWriter.java +++ b/java-io-xml/src/test/java/_test/ForwardingWriter.java @@ -16,9 +16,10 @@ */ package _test; +import nbbrd.io.function.IORunnable; + import java.io.IOException; import java.io.Writer; -import nbbrd.io.function.IORunnable; /** * diff --git a/java-io-xml/src/test/java/_test/ForwardingXMLOutputFactory.java b/java-io-xml/src/test/java/_test/ForwardingXMLOutputFactory.java index 2ebf059..a630cc2 100644 --- a/java-io-xml/src/test/java/_test/ForwardingXMLOutputFactory.java +++ b/java-io-xml/src/test/java/_test/ForwardingXMLOutputFactory.java @@ -16,13 +16,13 @@ */ package _test; -import java.io.OutputStream; -import java.io.Writer; import javax.xml.stream.XMLEventWriter; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.Result; +import java.io.OutputStream; +import java.io.Writer; /** * diff --git a/java-io-xml/src/test/java/_test/ForwardingXMLReader.java b/java-io-xml/src/test/java/_test/ForwardingXMLReader.java index 3253578..38a7a83 100644 --- a/java-io-xml/src/test/java/_test/ForwardingXMLReader.java +++ b/java-io-xml/src/test/java/_test/ForwardingXMLReader.java @@ -16,11 +16,12 @@ */ package _test; -import java.io.IOException; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; +import java.io.IOException; + /** * * @author Philippe Charles diff --git a/java-io-xml/src/test/java/_test/JaxbListener.java b/java-io-xml/src/test/java/_test/JaxbListener.java index 6f38bdb..088d1af 100644 --- a/java-io-xml/src/test/java/_test/JaxbListener.java +++ b/java-io-xml/src/test/java/_test/JaxbListener.java @@ -16,8 +16,8 @@ */ package _test; -import java.util.function.Supplier; import javax.xml.bind.JAXBException; +import java.util.function.Supplier; /** * diff --git a/java-io-xml/src/test/java/_test/ResourceCounter.java b/java-io-xml/src/test/java/_test/ResourceCounter.java index 2475184..184b2bd 100644 --- a/java-io-xml/src/test/java/_test/ResourceCounter.java +++ b/java-io-xml/src/test/java/_test/ResourceCounter.java @@ -16,22 +16,16 @@ */ package _test; +import _test.io.ForwardingInputStream; +import _test.io.ForwardingOutputStream; +import nbbrd.io.function.IOSupplier; + +import javax.xml.stream.*; +import javax.xml.transform.Result; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; -import javax.xml.stream.XMLEventReader; -import javax.xml.stream.XMLEventWriter; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import javax.xml.transform.Result; - -import _test.io.ForwardingInputStream; -import _test.io.ForwardingOutputStream; -import nbbrd.io.function.IOSupplier; /** * diff --git a/java-io-xml/src/test/java/_test/SaxListener.java b/java-io-xml/src/test/java/_test/SaxListener.java index 2f01e62..b3a26a2 100644 --- a/java-io-xml/src/test/java/_test/SaxListener.java +++ b/java-io-xml/src/test/java/_test/SaxListener.java @@ -16,9 +16,10 @@ */ package _test; +import org.xml.sax.SAXException; + import java.io.IOException; import java.util.function.Supplier; -import org.xml.sax.SAXException; /** * diff --git a/java-io-xml/src/test/java/_test/StaxListener.java b/java-io-xml/src/test/java/_test/StaxListener.java index 82ef92f..2461b33 100644 --- a/java-io-xml/src/test/java/_test/StaxListener.java +++ b/java-io-xml/src/test/java/_test/StaxListener.java @@ -16,8 +16,8 @@ */ package _test; -import java.util.function.Supplier; import javax.xml.stream.XMLStreamException; +import java.util.function.Supplier; /** * diff --git a/java-io-xml/src/test/java/nbbrd/io/xml/SaxTest.java b/java-io-xml/src/test/java/nbbrd/io/xml/SaxTest.java index 4eba3a2..c4d9088 100644 --- a/java-io-xml/src/test/java/nbbrd/io/xml/SaxTest.java +++ b/java-io-xml/src/test/java/nbbrd/io/xml/SaxTest.java @@ -19,8 +19,8 @@ import _test.ForwardingXMLReader; import _test.Meta; import _test.SaxListener; -import _test.sample.XmlParserAssertions; import _test.sample.Person; +import _test.sample.XmlParserAssertions; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; import com.github.tomakehurst.wiremock.junit5.WireMockExtension; import nbbrd.io.function.IORunnable; @@ -39,9 +39,9 @@ import java.nio.file.Path; import java.util.List; -import static _test.sample.XmlParserAssertions.assertXmlParserCompliance; -import static _test.sample.XmlParserAssertions.assertParserSafety; import static _test.sample.Person.BOOLS; +import static _test.sample.XmlParserAssertions.assertParserSafety; +import static _test.sample.XmlParserAssertions.assertXmlParserCompliance; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatNullPointerException; diff --git a/java-io-xml/src/test/java/nbbrd/io/xml/StaxTest.java b/java-io-xml/src/test/java/nbbrd/io/xml/StaxTest.java index 7462719..5847c5e 100644 --- a/java-io-xml/src/test/java/nbbrd/io/xml/StaxTest.java +++ b/java-io-xml/src/test/java/nbbrd/io/xml/StaxTest.java @@ -18,10 +18,11 @@ import _test.*; import _test.io.ForwardingInputStream; -import _test.sample.XmlParserAssertions; import _test.sample.Person; +import _test.sample.XmlParserAssertions; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; import com.github.tomakehurst.wiremock.junit5.WireMockExtension; +import lombok.NonNull; import nbbrd.io.Resource; import nbbrd.io.WrappedIOException; import nbbrd.io.function.IOSupplier; @@ -44,12 +45,12 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; -import static _test.sample.XmlFormatterAssertions.assertXmlFormatterCompliance; -import static _test.sample.XmlFormatterAssertions.assertFormatterSafety; -import static _test.sample.XmlParserAssertions.assertXmlParserCompliance; -import static _test.sample.XmlParserAssertions.assertParserSafety; import static _test.sample.Person.BOOLS; import static _test.sample.Person.ENCODINGS; +import static _test.sample.XmlFormatterAssertions.assertFormatterSafety; +import static _test.sample.XmlFormatterAssertions.assertXmlFormatterCompliance; +import static _test.sample.XmlParserAssertions.assertParserSafety; +import static _test.sample.XmlParserAssertions.assertXmlParserCompliance; import static org.assertj.core.api.Assertions.*; /** @@ -454,10 +455,10 @@ public void testFormatterSafety(@TempDir Path temp) throws IOException { @lombok.RequiredArgsConstructor private static class CloseablePerson implements Closeable { - @lombok.NonNull + @NonNull private final XMLStreamReader reader; - @lombok.NonNull + @NonNull private final Closeable onClose; public boolean isEndDocument() { diff --git a/java-io-xml/src/test/java/nbbrd/io/xml/XmlTest.java b/java-io-xml/src/test/java/nbbrd/io/xml/XmlTest.java index 2818a3b..da4df18 100644 --- a/java-io-xml/src/test/java/nbbrd/io/xml/XmlTest.java +++ b/java-io-xml/src/test/java/nbbrd/io/xml/XmlTest.java @@ -18,6 +18,7 @@ import _test.sample.Person; import internal.io.text.LegacyFiles.BufferedFileInputStream; +import lombok.NonNull; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -25,7 +26,6 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Path; -import java.util.Objects; import static _test.sample.XmlFormatterAssertions.assertXmlFormatterCompliance; import static _test.sample.XmlParserAssertions.assertXmlParserCompliance; @@ -99,8 +99,7 @@ public boolean isIgnoreXXE() { } @Override - public T parseReader(Reader resource) throws IOException { - Objects.requireNonNull(resource, "resource"); + public @NonNull T parseReader(@NonNull Reader resource) throws IOException { String xml = readtoString(resource); if (isJohnDoe(xml)) { return johnDoe; @@ -112,8 +111,7 @@ public T parseReader(Reader resource) throws IOException { } @Override - public T parseStream(InputStream resource) throws IOException { - Objects.requireNonNull(resource, "resource"); + public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { ByteArrayOutputStream tmp = new ByteArrayOutputStream(); byte[] buffer = new byte[512]; int count = 0; @@ -133,9 +131,7 @@ public T parseStream(InputStream resource) throws IOException { } @Override - public T parseStream(InputStream resource, Charset encoding) throws IOException { - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); + public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { String xml = readtoString(new InputStreamReader(resource, encoding)); if (isJohnDoe(xml)) { return johnDoe; @@ -190,10 +186,7 @@ public Charset getDefaultEncoding() { } @Override - public void formatWriter(T value, Writer resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); - + public void formatWriter(@NonNull T value, @NonNull Writer resource) throws IOException { if (!johnDoe.equals(value)) { throw new IOException(); } @@ -202,10 +195,7 @@ public void formatWriter(T value, Writer resource) throws IOException { } @Override - public void formatStream(T value, OutputStream resource) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); - + public void formatStream(@NonNull T value, @NonNull OutputStream resource) throws IOException { if (!johnDoe.equals(value)) { throw new IOException(); } @@ -214,11 +204,7 @@ public void formatStream(T value, OutputStream resource) throws IOException { } @Override - public void formatStream(T value, OutputStream resource, Charset encoding) throws IOException { - Objects.requireNonNull(value, "value"); - Objects.requireNonNull(resource, "resource"); - Objects.requireNonNull(encoding, "encoding"); - + public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { if (!johnDoe.equals(value)) { throw new IOException(); } From cb5efd6b854b072e3477f7e2b75c09eb23683ad1 Mon Sep 17 00:00:00 2001 From: Philippe Charles Date: Fri, 18 Mar 2022 14:11:28 +0100 Subject: [PATCH 5/8] Code cleanup --- CHANGELOG.md | 2 +- .../main/java/internal/io/IOIterators.java | 10 ++-- .../internal/io/text/InternalFormatter.java | 8 ++-- .../java/internal/io/text/InternalParser.java | 14 +++--- .../src/main/java/nbbrd/io/Resource.java | 48 +++++++++++-------- .../java/nbbrd/io/function/IOBiConsumer.java | 2 +- .../main/java/nbbrd/io/text/Formatter.java | 4 +- .../src/main/java/nbbrd/io/text/Parser.java | 2 +- .../main/java/nbbrd/io/text/TextBuffers.java | 2 +- .../main/java/nbbrd/io/win/RegWrapper.java | 11 ++--- .../src/test/java/nbbrd/io/xml/XmlTest.java | 2 +- 11 files changed, 56 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da0985a..9610c0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -156,7 +156,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Changed -- Improve XXE desambiguation +- Improve XXE disambiguation - Improve XML error reporting ### Fixed diff --git a/java-io-base/src/main/java/internal/io/IOIterators.java b/java-io-base/src/main/java/internal/io/IOIterators.java index 472ac8b..04596b1 100644 --- a/java-io-base/src/main/java/internal/io/IOIterators.java +++ b/java-io-base/src/main/java/internal/io/IOIterators.java @@ -56,12 +56,12 @@ public Object nextWithIO() throws NoSuchElementException { } @Override - public Stream asStream() { + public @NonNull Stream asStream() { return Stream.empty(); } @Override - public Iterator asUnchecked() { + public @NonNull Iterator asUnchecked() { return Collections.emptyIterator(); } } @@ -124,7 +124,7 @@ public void removeWithIO() throws IOException { } @Override - public void forEachRemainingWithIO(IOConsumer action) throws IOException { + public void forEachRemainingWithIO(@NonNull IOConsumer action) throws IOException { try { delegate.forEachRemaining(action.asUnchecked()); } catch (UncheckedIOException ex) { @@ -133,12 +133,12 @@ public void forEachRemainingWithIO(IOConsumer action) throws IOExcept } @Override - public Stream asStream() { + public @NonNull Stream asStream() { return StreamSupport.stream(Spliterators.spliteratorUnknownSize(delegate, 0), false); } @Override - public Iterator asUnchecked() { + public @NonNull Iterator asUnchecked() { return delegate; } } diff --git a/java-io-base/src/main/java/internal/io/text/InternalFormatter.java b/java-io-base/src/main/java/internal/io/text/InternalFormatter.java index 1a25e47..6b0ee14 100644 --- a/java-io-base/src/main/java/internal/io/text/InternalFormatter.java +++ b/java-io-base/src/main/java/internal/io/text/InternalFormatter.java @@ -76,11 +76,12 @@ public CharSequence formatStringList(Function, String> join return null; } - public CharSequence formatConstant(CharSequence constant, T value) { + public CharSequence formatConstant(CharSequence constant, T ignoredValue) { return constant; } - public CharSequence formatNull(T value) { + @SuppressWarnings("SameReturnValue") + public CharSequence formatNull(T ignoredValue) { return null; } @@ -143,6 +144,7 @@ public CharSequence formatFailsafe(Function T parseConstant(T constant, CharSequence input) { return constant; } - public T parseNull(CharSequence input) { + @SuppressWarnings("SameReturnValue") + public T parseNull(CharSequence ignoredInput) { return null; } @@ -261,7 +262,7 @@ public Locale parseLocale(CharSequence input) { if (len != 2 && len != 5 && len < 7) { return null; } - if (!isLocaleLetter(str.charAt(0)) || !isLocaleLetter(str.charAt(1))) { + if (isNotLocaleLetter(str.charAt(0)) || isNotLocaleLetter(str.charAt(1))) { return null; } if (len == 2) { @@ -275,7 +276,7 @@ public Locale parseLocale(CharSequence input) { return new Locale(str.substring(0, 2), "", str.substring(4)); } char ch4 = str.charAt(4); - if (!isLocaleLetter(ch3) || !isLocaleLetter(ch4)) { + if (isNotLocaleLetter(ch3) || isNotLocaleLetter(ch4)) { return null; } if (len == 5) { @@ -289,8 +290,8 @@ public Locale parseLocale(CharSequence input) { } } - private boolean isLocaleLetter(char c) { - return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); + private boolean isNotLocaleLetter(char c) { + return ('a' > c || c > 'z') && ('A' > c || c > 'Z'); } private boolean isLocaleSeparator(char c) { @@ -330,6 +331,7 @@ public T parseFailsafe(Function parser, C return null; } - public void doNothing(Throwable ex) { + @SuppressWarnings("EmptyMethod") + public void doNothing(Throwable ignoredEx) { } } diff --git a/java-io-base/src/main/java/nbbrd/io/Resource.java b/java-io-base/src/main/java/nbbrd/io/Resource.java index 491e0ca..9a8f7d7 100644 --- a/java-io-base/src/main/java/nbbrd/io/Resource.java +++ b/java-io-base/src/main/java/nbbrd/io/Resource.java @@ -48,27 +48,7 @@ public interface Loader extends Closeable { @StaticFactoryMethod static @NonNull Loader of(@NonNull IOFunction loader, @NonNull Closeable closer) { - return new Loader() { - boolean closed = false; - - @Override - public @NonNull InputStream load(@NonNull K key) throws IOException { - if (closed) { - throw new IllegalStateException("Closed"); - } - InputStream result = loader.applyWithIO(key); - if (result == null) { - throw new IOException("Null stream"); - } - return result; - } - - @Override - public void close() throws IOException { - closed = true; - closer.close(); - } - }; + return new FunctionalLoader<>(loader, closer); } } @@ -152,4 +132,30 @@ public void process(@NonNull URI uri, @NonNull IOConsumer action) } } } + + @lombok.RequiredArgsConstructor + private static final class FunctionalLoader implements Loader { + + private final @NonNull IOFunction loader; + private final @NonNull Closeable closer; + private boolean closed = false; + + @Override + public @NonNull InputStream load(@NonNull K key) throws IOException { + if (closed) { + throw new IllegalStateException("Closed"); + } + InputStream result = loader.applyWithIO(key); + if (result == null) { + throw new IOException("Null stream"); + } + return result; + } + + @Override + public void close() throws IOException { + closed = true; + closer.close(); + } + } } diff --git a/java-io-base/src/main/java/nbbrd/io/function/IOBiConsumer.java b/java-io-base/src/main/java/nbbrd/io/function/IOBiConsumer.java index da113ed..a1f1926 100644 --- a/java-io-base/src/main/java/nbbrd/io/function/IOBiConsumer.java +++ b/java-io-base/src/main/java/nbbrd/io/function/IOBiConsumer.java @@ -12,7 +12,7 @@ * Represents an operation that accepts two input arguments and returns no * result. This is the two-arity specialization of {@link IOConsumer}. * Unlike most other functional interfaces, {@code IOBiConsumer} is expected - * to operate via side-effects. + * to operate via side effects. * *

This is a functional interface * whose functional method is {@link #acceptWithIO(Object, Object)}. diff --git a/java-io-base/src/main/java/nbbrd/io/text/Formatter.java b/java-io-base/src/main/java/nbbrd/io/text/Formatter.java index 0f28783..8e37319 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/Formatter.java +++ b/java-io-base/src/main/java/nbbrd/io/text/Formatter.java @@ -73,7 +73,7 @@ public interface Formatter { } /** - * Returns an {@link Optional} containing the CharSequence that has bean + * Returns an {@link Optional} containing the CharSequence that has been * created by the formatting if this formatting was possible.

* Use this instead of {@link #format(java.lang.Object)} to increase * readability and prevent NullPointerExceptions. @@ -86,7 +86,7 @@ public interface Formatter { } /** - * Returns an {@link Optional} containing the String that has bean created + * Returns an {@link Optional} containing the String that has been created * by the formatting if this formatting was possible.

* Use this instead of {@link #format(java.lang.Object)} to increase * readability and prevent NullPointerExceptions. diff --git a/java-io-base/src/main/java/nbbrd/io/text/Parser.java b/java-io-base/src/main/java/nbbrd/io/text/Parser.java index d887eb1..800fea3 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/Parser.java +++ b/java-io-base/src/main/java/nbbrd/io/text/Parser.java @@ -62,7 +62,7 @@ public interface Parser { @Nullable T parse(@Nullable CharSequence input); /** - * Returns an {@link Optional} containing the object that has bean created + * Returns an {@link Optional} containing the object that has been created * by the parsing if this parsing was possible.

* Use this instead of {@link #parse(java.lang.CharSequence)} to increase * readability and prevent NullPointerExceptions. diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextBuffers.java b/java-io-base/src/main/java/nbbrd/io/text/TextBuffers.java index d1ffe35..9e19068 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextBuffers.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextBuffers.java @@ -60,7 +60,7 @@ private static TextBuffers make(long blockSize, float averageCharsPerByte) { return chars > 0 ? chars : DEFAULT_CHAR_BUFFER_SIZE; } - public @NonNegative int getChannelMinBufferCap() { + public int getChannelMinBufferCap() { return bytes > 0 ? bytes : IMPL_DEPENDENT_MIN_BUFFER_CAP; } diff --git a/java-io-win/src/main/java/nbbrd/io/win/RegWrapper.java b/java-io-win/src/main/java/nbbrd/io/win/RegWrapper.java index e0ceec7..145ed55 100644 --- a/java-io-win/src/main/java/nbbrd/io/win/RegWrapper.java +++ b/java-io-win/src/main/java/nbbrd/io/win/RegWrapper.java @@ -89,7 +89,7 @@ Map> parse(BufferedReader reader) throws IOException { } @lombok.Value - public static final class RegValue { + public static class RegValue { private static final Pattern PATTERN = Pattern.compile("^[ ]{4}(.+)[ ]{4}(REG_(?:SZ|MULTI_SZ|EXPAND_SZ|DWORD|QWORD|BINARY|NONE))[ ]{4}(.*)$"); @@ -99,14 +99,11 @@ public static final class RegValue { return m.matches() ? new RegValue(m.group(1), RegType.valueOf(m.group(2)), m.group(3)) : null; } - @NonNull - private String name; + @NonNull String name; - @NonNull - private RegType dataType; + @NonNull RegType dataType; - @NonNull - private String value; + @NonNull String value; } public enum RegType { diff --git a/java-io-xml/src/test/java/nbbrd/io/xml/XmlTest.java b/java-io-xml/src/test/java/nbbrd/io/xml/XmlTest.java index da4df18..8bc5e38 100644 --- a/java-io-xml/src/test/java/nbbrd/io/xml/XmlTest.java +++ b/java-io-xml/src/test/java/nbbrd/io/xml/XmlTest.java @@ -181,7 +181,7 @@ public boolean isFormatted() { } @Override - public Charset getDefaultEncoding() { + public @NonNull Charset getDefaultEncoding() { return StandardCharsets.UTF_8; } From 35b69117815b9f035832d7582b15d59f81d53e25 Mon Sep 17 00:00:00 2001 From: Philippe Charles Date: Fri, 18 Mar 2022 14:55:14 +0100 Subject: [PATCH 6/8] Replace composition functions with IO functions --- CHANGELOG.md | 4 ++ .../java/internal/io/AndThenFileParser.java | 14 +++---- .../internal/io/ComposeFileFormatter.java | 12 +++--- .../internal/io/text/AndThenTextParser.java | 20 +++++----- .../io/text/ComposeTextFormatter.java | 20 +++++----- .../io/text/WithCharsetFileFormatter.java | 4 +- .../io/text/WithCharsetFileParser.java | 4 +- .../src/main/java/nbbrd/io/FileFormatter.java | 4 +- .../src/main/java/nbbrd/io/FileParser.java | 2 +- .../java/nbbrd/io/text/TextFormatter.java | 4 +- .../main/java/nbbrd/io/text/TextParser.java | 2 +- java-io-base/src/test/java/_test/io/POC.java | 38 ++++++++++++++----- .../src/main/java/nbbrd/io/xml/Xml.java | 6 +-- 13 files changed, 79 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9610c0a..88234df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Add convenient CSV methods - Add bridge between Text* and Parser/Formatter +### Changed + +- Replace composition functions with IO functions + ## [0.0.18] - 2022-03-15 ### Added diff --git a/java-io-base/src/main/java/internal/io/AndThenFileParser.java b/java-io-base/src/main/java/internal/io/AndThenFileParser.java index 970962f..08feecc 100644 --- a/java-io-base/src/main/java/internal/io/AndThenFileParser.java +++ b/java-io-base/src/main/java/internal/io/AndThenFileParser.java @@ -2,13 +2,13 @@ import lombok.NonNull; import nbbrd.io.FileParser; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Path; -import java.util.function.Function; @lombok.AllArgsConstructor public class AndThenFileParser implements FileParser { @@ -17,30 +17,30 @@ public class AndThenFileParser implements FileParser { protected final FileParser parser; @NonNull - protected final Function after; + protected final IOFunction after; @Override public @NonNull V parseFile(@NonNull File source) throws IOException { - return after.apply(parser.parseFile(source)); + return after.applyWithIO(parser.parseFile(source)); } @Override public @NonNull V parsePath(@NonNull Path source) throws IOException { - return after.apply(parser.parsePath(source)); + return after.applyWithIO(parser.parsePath(source)); } @Override public @NonNull V parseResource(@NonNull Class type, @NonNull String name) throws IOException { - return after.apply(parser.parseResource(type, name)); + return after.applyWithIO(parser.parseResource(type, name)); } @Override public @NonNull V parseStream(@NonNull IOSupplier source) throws IOException { - return after.apply(parser.parseStream(source)); + return after.applyWithIO(parser.parseStream(source)); } @Override public @NonNull V parseStream(@NonNull InputStream resource) throws IOException { - return after.apply(parser.parseStream(resource)); + return after.applyWithIO(parser.parseStream(resource)); } } diff --git a/java-io-base/src/main/java/internal/io/ComposeFileFormatter.java b/java-io-base/src/main/java/internal/io/ComposeFileFormatter.java index 07043be..593205b 100644 --- a/java-io-base/src/main/java/internal/io/ComposeFileFormatter.java +++ b/java-io-base/src/main/java/internal/io/ComposeFileFormatter.java @@ -2,13 +2,13 @@ import lombok.NonNull; import nbbrd.io.FileFormatter; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Path; -import java.util.function.Function; @lombok.AllArgsConstructor public class ComposeFileFormatter implements FileFormatter { @@ -17,25 +17,25 @@ public class ComposeFileFormatter implements FileFormatter { protected final FileFormatter formatter; @NonNull - protected final Function before; + protected final IOFunction before; @Override public void formatFile(@NonNull V value, @NonNull File target) throws IOException { - formatter.formatFile(before.apply(value), target); + formatter.formatFile(before.applyWithIO(value), target); } @Override public void formatPath(@NonNull V value, @NonNull Path target) throws IOException { - formatter.formatPath(before.apply(value), target); + formatter.formatPath(before.applyWithIO(value), target); } @Override public void formatStream(@NonNull V value, @NonNull IOSupplier target) throws IOException { - formatter.formatStream(before.apply(value), target); + formatter.formatStream(before.applyWithIO(value), target); } @Override public void formatStream(@NonNull V value, @NonNull OutputStream resource) throws IOException { - formatter.formatStream(before.apply(value), resource); + formatter.formatStream(before.applyWithIO(value), resource); } } \ No newline at end of file diff --git a/java-io-base/src/main/java/internal/io/text/AndThenTextParser.java b/java-io-base/src/main/java/internal/io/text/AndThenTextParser.java index a8c2cd8..55b20ae 100644 --- a/java-io-base/src/main/java/internal/io/text/AndThenTextParser.java +++ b/java-io-base/src/main/java/internal/io/text/AndThenTextParser.java @@ -1,6 +1,7 @@ package internal.io.text; import lombok.NonNull; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextParser; @@ -10,7 +11,6 @@ import java.io.Reader; import java.nio.charset.Charset; import java.nio.file.Path; -import java.util.function.Function; @lombok.AllArgsConstructor public final class AndThenTextParser implements TextParser { @@ -19,45 +19,45 @@ public final class AndThenTextParser implements TextParser { private final TextParser parser; @NonNull - private final Function after; + private final IOFunction after; @Override public @NonNull V parseChars(@NonNull CharSequence source) throws IOException { - return after.apply(parser.parseChars(source)); + return after.applyWithIO(parser.parseChars(source)); } @Override public @NonNull V parseFile(@NonNull File source, @NonNull Charset encoding) throws IOException { - return after.apply(parser.parseFile(source, encoding)); + return after.applyWithIO(parser.parseFile(source, encoding)); } @Override public @NonNull V parsePath(@NonNull Path source, @NonNull Charset encoding) throws IOException { - return after.apply(parser.parsePath(source, encoding)); + return after.applyWithIO(parser.parsePath(source, encoding)); } @Override public @NonNull V parseResource(@NonNull Class type, @NonNull String name, @NonNull Charset encoding) throws IOException { - return after.apply(parser.parseResource(type, name, encoding)); + return after.applyWithIO(parser.parseResource(type, name, encoding)); } @Override public @NonNull V parseReader(@NonNull IOSupplier source) throws IOException { - return after.apply(parser.parseReader(source)); + return after.applyWithIO(parser.parseReader(source)); } @Override public @NonNull V parseStream(@NonNull IOSupplier source, @NonNull Charset encoding) throws IOException { - return after.apply(parser.parseStream(source, encoding)); + return after.applyWithIO(parser.parseStream(source, encoding)); } @Override public @NonNull V parseReader(@NonNull Reader resource) throws IOException { - return after.apply(parser.parseReader(resource)); + return after.applyWithIO(parser.parseReader(resource)); } @Override public @NonNull V parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { - return after.apply(parser.parseStream(resource, encoding)); + return after.applyWithIO(parser.parseStream(resource, encoding)); } } diff --git a/java-io-base/src/main/java/internal/io/text/ComposeTextFormatter.java b/java-io-base/src/main/java/internal/io/text/ComposeTextFormatter.java index 6565efa..845ee6d 100644 --- a/java-io-base/src/main/java/internal/io/text/ComposeTextFormatter.java +++ b/java-io-base/src/main/java/internal/io/text/ComposeTextFormatter.java @@ -1,6 +1,7 @@ package internal.io.text; import lombok.NonNull; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextFormatter; @@ -10,7 +11,6 @@ import java.io.Writer; import java.nio.charset.Charset; import java.nio.file.Path; -import java.util.function.Function; @lombok.AllArgsConstructor public final class ComposeTextFormatter implements TextFormatter { @@ -19,45 +19,45 @@ public final class ComposeTextFormatter implements TextFormatter { private final TextFormatter formatter; @NonNull - private final Function before; + private final IOFunction before; @Override public @NonNull String formatToString(@NonNull V value) throws IOException { - return formatter.formatToString(before.apply(value)); + return formatter.formatToString(before.applyWithIO(value)); } @Override public void formatChars(@NonNull V value, @NonNull Appendable target) throws IOException { - formatter.formatChars(before.apply(value), target); + formatter.formatChars(before.applyWithIO(value), target); } @Override public void formatFile(@NonNull V value, @NonNull File target, @NonNull Charset encoding) throws IOException { - formatter.formatFile(before.apply(value), target, encoding); + formatter.formatFile(before.applyWithIO(value), target, encoding); } @Override public void formatPath(@NonNull V value, @NonNull Path target, @NonNull Charset encoding) throws IOException { - formatter.formatPath(before.apply(value), target, encoding); + formatter.formatPath(before.applyWithIO(value), target, encoding); } @Override public void formatWriter(@NonNull V value, @NonNull IOSupplier target) throws IOException { - formatter.formatWriter(before.apply(value), target); + formatter.formatWriter(before.applyWithIO(value), target); } @Override public void formatStream(@NonNull V value, @NonNull IOSupplier target, @NonNull Charset encoding) throws IOException { - formatter.formatStream(before.apply(value), target, encoding); + formatter.formatStream(before.applyWithIO(value), target, encoding); } @Override public void formatWriter(@NonNull V value, @NonNull Writer resource) throws IOException { - formatter.formatWriter(before.apply(value), resource); + formatter.formatWriter(before.applyWithIO(value), resource); } @Override public void formatStream(@NonNull V value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { - formatter.formatStream(before.apply(value), resource, encoding); + formatter.formatStream(before.applyWithIO(value), resource, encoding); } } \ No newline at end of file diff --git a/java-io-base/src/main/java/internal/io/text/WithCharsetFileFormatter.java b/java-io-base/src/main/java/internal/io/text/WithCharsetFileFormatter.java index ad221e7..0a8b719 100644 --- a/java-io-base/src/main/java/internal/io/text/WithCharsetFileFormatter.java +++ b/java-io-base/src/main/java/internal/io/text/WithCharsetFileFormatter.java @@ -2,6 +2,7 @@ import lombok.NonNull; import nbbrd.io.FileFormatter; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextFormatter; @@ -10,7 +11,6 @@ import java.io.OutputStream; import java.nio.charset.Charset; import java.nio.file.Path; -import java.util.function.Function; @lombok.AllArgsConstructor public final class WithCharsetFileFormatter implements FileFormatter { @@ -42,7 +42,7 @@ public void formatStream(@NonNull T value, @NonNull OutputStream resource) throw } @Override - public @NonNull FileFormatter compose(@NonNull Function before) { + public @NonNull FileFormatter compose(@NonNull IOFunction before) { return new WithCharsetFileFormatter<>(delegate.compose(before), charset); } } diff --git a/java-io-base/src/main/java/internal/io/text/WithCharsetFileParser.java b/java-io-base/src/main/java/internal/io/text/WithCharsetFileParser.java index 20cfb20..39d1d66 100644 --- a/java-io-base/src/main/java/internal/io/text/WithCharsetFileParser.java +++ b/java-io-base/src/main/java/internal/io/text/WithCharsetFileParser.java @@ -2,6 +2,7 @@ import lombok.NonNull; import nbbrd.io.FileParser; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextParser; @@ -10,7 +11,6 @@ import java.io.InputStream; import java.nio.charset.Charset; import java.nio.file.Path; -import java.util.function.Function; @lombok.AllArgsConstructor public final class WithCharsetFileParser implements FileParser { @@ -47,7 +47,7 @@ public final class WithCharsetFileParser implements FileParser { } @Override - public @NonNull FileParser andThen(@NonNull Function after) { + public @NonNull FileParser andThen(@NonNull IOFunction after) { return new WithCharsetFileParser<>(delegate.andThen(after), charset); } } diff --git a/java-io-base/src/main/java/nbbrd/io/FileFormatter.java b/java-io-base/src/main/java/nbbrd/io/FileFormatter.java index 288283b..8300a0f 100644 --- a/java-io-base/src/main/java/nbbrd/io/FileFormatter.java +++ b/java-io-base/src/main/java/nbbrd/io/FileFormatter.java @@ -7,6 +7,7 @@ import lombok.NonNull; import nbbrd.design.StaticFactoryMethod; import nbbrd.io.function.IOBiConsumer; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import java.io.File; @@ -15,7 +16,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Optional; -import java.util.function.Function; import java.util.zip.GZIPOutputStream; public interface FileFormatter { @@ -42,7 +42,7 @@ default void formatStream(@NonNull T value, @NonNull IOSupplier @NonNull FileFormatter compose(@NonNull Function before) { + default @NonNull FileFormatter compose(@NonNull IOFunction before) { return new ComposeFileFormatter<>(this, before); } diff --git a/java-io-base/src/main/java/nbbrd/io/FileParser.java b/java-io-base/src/main/java/nbbrd/io/FileParser.java index 1c6fd9b..686af2c 100644 --- a/java-io-base/src/main/java/nbbrd/io/FileParser.java +++ b/java-io-base/src/main/java/nbbrd/io/FileParser.java @@ -44,7 +44,7 @@ public interface FileParser { @NonNull T parseStream(@NonNull InputStream resource) throws IOException; - default @NonNull FileParser andThen(@NonNull Function after) { + default @NonNull FileParser andThen(@NonNull IOFunction after) { return new AndThenFileParser<>(this, after); } diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java b/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java index a9969b6..effdf57 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextFormatter.java @@ -6,6 +6,7 @@ import nbbrd.io.FileFormatter; import nbbrd.io.Resource; import nbbrd.io.function.IOBiConsumer; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import java.io.*; @@ -14,7 +15,6 @@ import java.nio.file.Path; import java.util.Optional; import java.util.function.Consumer; -import java.util.function.Function; public interface TextFormatter { @@ -60,7 +60,7 @@ default void formatStream(@NonNull T value, @NonNull IOSupplier @NonNull TextFormatter compose(@NonNull Function before) { + default @NonNull TextFormatter compose(@NonNull IOFunction before) { return new ComposeTextFormatter<>(this, before); } diff --git a/java-io-base/src/main/java/nbbrd/io/text/TextParser.java b/java-io-base/src/main/java/nbbrd/io/text/TextParser.java index b8da601..de9fbd9 100644 --- a/java-io-base/src/main/java/nbbrd/io/text/TextParser.java +++ b/java-io-base/src/main/java/nbbrd/io/text/TextParser.java @@ -54,7 +54,7 @@ public interface TextParser { @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException; - default @NonNull TextParser andThen(@NonNull Function after) { + default @NonNull TextParser andThen(@NonNull IOFunction after) { return new AndThenTextParser<>(this, after); } diff --git a/java-io-base/src/test/java/_test/io/POC.java b/java-io-base/src/test/java/_test/io/POC.java index 5f1f6d1..628aff4 100644 --- a/java-io-base/src/test/java/_test/io/POC.java +++ b/java-io-base/src/test/java/_test/io/POC.java @@ -3,49 +3,69 @@ import lombok.NonNull; import nbbrd.io.FileFormatter; import nbbrd.io.FileParser; +import nbbrd.io.function.IOFunction; +import nbbrd.io.text.Formatter; +import nbbrd.io.text.Parser; import nbbrd.io.text.TextFormatter; import nbbrd.io.text.TextParser; import java.io.*; import java.nio.charset.Charset; -import java.util.function.Function; -public class POC implements TextFormatter, TextParser, FileFormatter, FileParser { +@lombok.RequiredArgsConstructor +final class POC implements TextFormatter, TextParser, FileFormatter, FileParser { + + private final Formatter formatter; + private final Parser parser; + private final Charset defaultEncoding; + + private CharSequence readAll(Reader ignore) throws IOException { + throw new IOException("POC"); + } @Override public void formatWriter(@NonNull T value, @NonNull Writer resource) throws IOException { + resource.append(formatter.formatValue(value).orElseThrow(IOException::new)); } @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource, @NonNull Charset encoding) throws IOException { + try (OutputStreamWriter writer = new OutputStreamWriter(resource, encoding)) { + formatWriter(value, writer); + } } @Override public @NonNull T parseReader(@NonNull Reader resource) throws IOException { - return null; + return parser.parseValue(readAll(resource)).orElseThrow(IOException::new); } @Override public @NonNull T parseStream(@NonNull InputStream resource, @NonNull Charset encoding) throws IOException { - return null; + try (InputStreamReader reader = new InputStreamReader(resource, encoding)) { + return parseReader(reader); + } } @Override public void formatStream(@NonNull T value, @NonNull OutputStream resource) throws IOException { + formatStream(value, resource, defaultEncoding); } @Override public @NonNull T parseStream(@NonNull InputStream resource) throws IOException { - return null; + return parseStream(resource, defaultEncoding); } @Override - public @NonNull POC compose(@NonNull Function before) { - return null; + public @NonNull POC compose(@NonNull IOFunction before) { + // FIXME: how to derive a parser from compose? + return new POC<>(formatter.compose(before.asUnchecked()), null, defaultEncoding); } @Override - public @NonNull POC andThen(@NonNull Function after) { - return null; + public @NonNull POC andThen(@NonNull IOFunction after) { + // FIXME: how to derive a formatter from andThen? + return new POC<>(null, parser.andThen(after.asUnchecked()), defaultEncoding); } } diff --git a/java-io-xml/src/main/java/nbbrd/io/xml/Xml.java b/java-io-xml/src/main/java/nbbrd/io/xml/Xml.java index ca3521c..ba06c6a 100644 --- a/java-io-xml/src/main/java/nbbrd/io/xml/Xml.java +++ b/java-io-xml/src/main/java/nbbrd/io/xml/Xml.java @@ -19,6 +19,7 @@ import lombok.NonNull; import nbbrd.io.FileFormatter; import nbbrd.io.FileParser; +import nbbrd.io.function.IOFunction; import nbbrd.io.function.IOSupplier; import nbbrd.io.text.TextFormatter; import nbbrd.io.text.TextParser; @@ -26,7 +27,6 @@ import java.io.*; import java.nio.charset.Charset; import java.nio.file.Path; -import java.util.function.Function; /** * Set of utilities related to XML. @@ -40,7 +40,7 @@ public interface Parser extends FileParser, TextParser { boolean isIgnoreXXE(); - default @NonNull Parser andThen(@NonNull Function after) { + default @NonNull Parser andThen(@NonNull IOFunction after) { return new AdaptedParser<>(this, FileParser.super.andThen(after), TextParser.super.andThen(after)); } } @@ -51,7 +51,7 @@ public interface Formatter extends FileFormatter, TextFormatter { @NonNull Charset getDefaultEncoding(); - default @NonNull Formatter compose(@NonNull Function before) { + default @NonNull Formatter compose(@NonNull IOFunction before) { return new AdaptedFormatter<>(this, FileFormatter.super.compose(before), TextFormatter.super.compose(before)); } } From 978b979b8343b309666c566dd05e8cfb69112e1e Mon Sep 17 00:00:00 2001 From: Philippe Charles Date: Fri, 18 Mar 2022 15:35:05 +0100 Subject: [PATCH 7/8] Update CHANGELOG.md for next release --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88234df..c6154a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.0.19] - 2022-03-18 ### Added @@ -173,7 +173,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Initial release -[Unreleased]: https://github.com/nbbrd/java-io-util/compare/v0.0.18...HEAD +[Unreleased]: https://github.com/nbbrd/java-io-util/compare/v0.0.19...HEAD +[0.0.19]: https://github.com/nbbrd/java-io-util/compare/v0.0.18...v0.0.19 [0.0.18]: https://github.com/nbbrd/java-io-util/compare/v0.0.17...v0.0.18 [0.0.17]: https://github.com/nbbrd/java-io-util/compare/v0.0.16...v0.0.17 [0.0.16]: https://github.com/nbbrd/java-io-util/compare/v0.0.15...v0.0.16 From be5e27908db7bf6d117e077dabee8088722009e1 Mon Sep 17 00:00:00 2001 From: Philippe Charles Date: Fri, 18 Mar 2022 15:39:27 +0100 Subject: [PATCH 8/8] Update versions for release --- java-io-base/pom.xml | 2 +- java-io-bom/pom.xml | 2 +- java-io-picocsv/pom.xml | 2 +- java-io-win/pom.xml | 2 +- java-io-xml-bind/pom.xml | 2 +- java-io-xml/pom.xml | 2 +- pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/java-io-base/pom.xml b/java-io-base/pom.xml index b17e08f..8b9c600 100644 --- a/java-io-base/pom.xml +++ b/java-io-base/pom.xml @@ -5,7 +5,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.19-SNAPSHOT + 0.0.19 java-io-base diff --git a/java-io-bom/pom.xml b/java-io-bom/pom.xml index 4998aae..5c686c7 100644 --- a/java-io-bom/pom.xml +++ b/java-io-bom/pom.xml @@ -7,7 +7,7 @@ java-io-parent com.github.nbbrd.java-io-util - 0.0.19-SNAPSHOT + 0.0.19 java-io-bom diff --git a/java-io-picocsv/pom.xml b/java-io-picocsv/pom.xml index 08def00..c215a84 100644 --- a/java-io-picocsv/pom.xml +++ b/java-io-picocsv/pom.xml @@ -7,7 +7,7 @@ java-io-parent com.github.nbbrd.java-io-util - 0.0.19-SNAPSHOT + 0.0.19 java-io-picocsv diff --git a/java-io-win/pom.xml b/java-io-win/pom.xml index 80d5c14..aeb0975 100644 --- a/java-io-win/pom.xml +++ b/java-io-win/pom.xml @@ -7,7 +7,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.19-SNAPSHOT + 0.0.19 java-io-win diff --git a/java-io-xml-bind/pom.xml b/java-io-xml-bind/pom.xml index a1bc2f3..328a5fb 100644 --- a/java-io-xml-bind/pom.xml +++ b/java-io-xml-bind/pom.xml @@ -6,7 +6,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.19-SNAPSHOT + 0.0.19 java-io-xml-bind diff --git a/java-io-xml/pom.xml b/java-io-xml/pom.xml index 653607a..dd88e22 100644 --- a/java-io-xml/pom.xml +++ b/java-io-xml/pom.xml @@ -6,7 +6,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.19-SNAPSHOT + 0.0.19 java-io-xml diff --git a/pom.xml b/pom.xml index 8fea997..17dc25b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.github.nbbrd.java-io-util java-io-parent - 0.0.19-SNAPSHOT + 0.0.19 pom java-io