From bd470926cad43aab7c586d41ad0ad83f0fba0b79 Mon Sep 17 00:00:00 2001 From: Project Nayuki Date: Wed, 25 Jan 2017 01:13:57 +0000 Subject: [PATCH] Tweaked all Java code to replace explicit null checks with calls to Objects.requireNonNull() (requires Java SE 7+). --- java/io/nayuki/qrcodegen/BitBuffer.java | 4 +-- java/io/nayuki/qrcodegen/QrCode.java | 28 ++++++++----------- java/io/nayuki/qrcodegen/QrSegment.java | 23 ++++++--------- .../nayuki/qrcodegen/QrSegmentAdvanced.java | 11 ++++---- 4 files changed, 28 insertions(+), 38 deletions(-) diff --git a/java/io/nayuki/qrcodegen/BitBuffer.java b/java/io/nayuki/qrcodegen/BitBuffer.java index e759aeb..d918570 100644 --- a/java/io/nayuki/qrcodegen/BitBuffer.java +++ b/java/io/nayuki/qrcodegen/BitBuffer.java @@ -25,6 +25,7 @@ package io.nayuki.qrcodegen; import java.util.Arrays; +import java.util.Objects; /** @@ -76,8 +77,7 @@ final class BitBuffer { // Appends the data of the given segment to this bit buffer. public void appendData(QrSegment seg) { - if (seg == null) - throw new NullPointerException(); + Objects.requireNonNull(seg); ensureCapacity(bitLength + seg.bitLength); for (int i = 0; i < seg.bitLength; i++, bitLength++) { // Append bit by bit int bit = (seg.getByte(i >>> 3) >>> (7 - (i & 7))) & 1; diff --git a/java/io/nayuki/qrcodegen/QrCode.java b/java/io/nayuki/qrcodegen/QrCode.java index 669c09e..69bf1ee 100644 --- a/java/io/nayuki/qrcodegen/QrCode.java +++ b/java/io/nayuki/qrcodegen/QrCode.java @@ -27,6 +27,7 @@ package io.nayuki.qrcodegen; import java.awt.image.BufferedImage; import java.util.Arrays; import java.util.List; +import java.util.Objects; /** @@ -51,8 +52,8 @@ public final class QrCode { * @throws IllegalArgumentException if the text fails to fit in the largest version QR Code, which means it is too long */ public static QrCode encodeText(String text, Ecc ecl) { - if (text == null || ecl == null) - throw new NullPointerException(); + Objects.requireNonNull(text); + Objects.requireNonNull(ecl); List segs = QrSegment.makeSegments(text); return encodeSegments(segs, ecl); } @@ -70,8 +71,8 @@ public final class QrCode { * @throws IllegalArgumentException if the data fails to fit in the largest version QR Code, which means it is too long */ public static QrCode encodeBinary(byte[] data, Ecc ecl) { - if (data == null || ecl == null) - throw new NullPointerException(); + Objects.requireNonNull(data); + Objects.requireNonNull(ecl); QrSegment seg = QrSegment.makeBytes(data); return encodeSegments(Arrays.asList(seg), ecl); } @@ -112,8 +113,8 @@ public final class QrCode { * < −1 or mask > 7, or if the data is too long to fit in a QR Code at maxVersion at the ECL */ public static QrCode encodeSegments(List segs, Ecc ecl, int minVersion, int maxVersion, int mask, boolean boostEcl) { - if (segs == null || ecl == null) - throw new NullPointerException(); + Objects.requireNonNull(segs); + Objects.requireNonNull(ecl); if (!(1 <= minVersion && minVersion <= maxVersion && maxVersion <= 40) || mask < -1 || mask > 7) throw new IllegalArgumentException("Invalid value"); @@ -201,12 +202,10 @@ public final class QrCode { */ public QrCode(int ver, Ecc ecl, byte[] dataCodewords, int mask) { // Check arguments - if (ecl == null) - throw new NullPointerException(); + Objects.requireNonNull(ecl); if (ver < 1 || ver > 40 || mask < -1 || mask > 7) throw new IllegalArgumentException("Value out of range"); - if (dataCodewords == null) - throw new NullPointerException(); + Objects.requireNonNull(dataCodewords); // Initialize fields version = ver; @@ -234,8 +233,7 @@ public final class QrCode { */ public QrCode(QrCode qr, int mask) { // Check arguments - if (qr == null) - throw new NullPointerException(); + Objects.requireNonNull(qr); if (mask < -1 || mask > 7) throw new IllegalArgumentException("Mask value out of range"); @@ -497,8 +495,7 @@ public final class QrCode { // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire // data area of this QR Code symbol. Function modules need to be marked off before this is called. private void drawCodewords(byte[] data) { - if (data == null) - throw new NullPointerException(); + Objects.requireNonNull(data); if (data.length != getNumRawDataModules(version) / 8) throw new IllegalArgumentException(); @@ -832,8 +829,7 @@ public final class QrCode { * @throws NullPointerException if the data is {@code null} */ public byte[] getRemainder(byte[] data) { - if (data == null) - throw new NullPointerException(); + Objects.requireNonNull(data); // Compute the remainder by performing polynomial division byte[] result = new byte[coefficients.length]; diff --git a/java/io/nayuki/qrcodegen/QrSegment.java b/java/io/nayuki/qrcodegen/QrSegment.java index 35ce18e..b7abb7c 100644 --- a/java/io/nayuki/qrcodegen/QrSegment.java +++ b/java/io/nayuki/qrcodegen/QrSegment.java @@ -28,6 +28,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.regex.Pattern; @@ -50,8 +51,7 @@ public final class QrSegment { * @throws NullPointerException if the array is {@code null} */ public static QrSegment makeBytes(byte[] data) { - if (data == null) - throw new NullPointerException(); + Objects.requireNonNull(data); return new QrSegment(Mode.BYTE, data.length, data, data.length * 8); } @@ -64,8 +64,7 @@ public final class QrSegment { * @throws IllegalArgumentException if the string contains non-digit characters */ public static QrSegment makeNumeric(String digits) { - if (digits == null) - throw new NullPointerException(); + Objects.requireNonNull(digits); if (!NUMERIC_REGEX.matcher(digits).matches()) throw new IllegalArgumentException("String contains non-numeric characters"); @@ -89,8 +88,7 @@ public final class QrSegment { * @throws IllegalArgumentException if the string contains non-encodable characters */ public static QrSegment makeAlphanumeric(String text) { - if (text == null) - throw new NullPointerException(); + Objects.requireNonNull(text); if (!ALPHANUMERIC_REGEX.matcher(text).matches()) throw new IllegalArgumentException("String contains unencodable characters in alphanumeric mode"); @@ -115,8 +113,7 @@ public final class QrSegment { * @throws NullPointerException if the text is {@code null} */ public static List makeSegments(String text) { - if (text == null) - throw new NullPointerException(); + Objects.requireNonNull(text); // Select the most efficient segment encoding automatically List result = new ArrayList<>(); @@ -160,8 +157,8 @@ public final class QrSegment { * @throws IllegalArgumentException if the character count or bit length are negative or invalid */ public QrSegment(Mode md, int numCh, byte[] b, int bitLen) { - if (md == null || b == null) - throw new NullPointerException(); + Objects.requireNonNull(md); + Objects.requireNonNull(b); if (numCh < 0 || bitLen < 0 || bitLen > b.length * 8L) throw new IllegalArgumentException("Invalid value"); mode = md; @@ -188,15 +185,13 @@ public final class QrSegment { // Package-private helper function. static int getTotalBits(List segs, int version) { - if (segs == null) - throw new NullPointerException(); + Objects.requireNonNull(segs); if (version < 1 || version > 40) throw new IllegalArgumentException("Version number out of range"); int result = 0; for (QrSegment seg : segs) { - if (seg == null) - throw new NullPointerException(); + Objects.requireNonNull(seg); int ccbits = seg.mode.numCharCountBits(version); // Fail if segment length value doesn't fit in the length field's bit-width if (seg.numChars >= (1 << ccbits)) diff --git a/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java b/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java index fe7be0e..ef813bd 100644 --- a/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java +++ b/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; import java.util.List; +import java.util.Objects; public final class QrSegmentAdvanced { @@ -57,8 +58,8 @@ public final class QrSegmentAdvanced { */ public static List makeSegmentsOptimally(String text, QrCode.Ecc ecl, int minVersion, int maxVersion) { // Check arguments - if (text == null || ecl == null) - throw new NullPointerException(); + Objects.requireNonNull(text); + Objects.requireNonNull(ecl); if (!(1 <= minVersion && minVersion <= maxVersion && maxVersion <= 40)) throw new IllegalArgumentException("Invalid value"); @@ -238,8 +239,7 @@ public final class QrSegmentAdvanced { * @see #isEncodableAsKanji(String) */ public static QrSegment makeKanjiSegment(String text) { - if (text == null) - throw new NullPointerException(); + Objects.requireNonNull(text); BitBuffer bb = new BitBuffer(); for (int i = 0; i < text.length(); i++) { int val = UNICODE_TO_QR_KANJI[text.charAt(i)]; @@ -262,8 +262,7 @@ public final class QrSegmentAdvanced { * @see #makeKanjiSegment(String) */ public static boolean isEncodableAsKanji(String text) { - if (text == null) - throw new NullPointerException(); + Objects.requireNonNull(text); for (int i = 0; i < text.length(); i++) { if (UNICODE_TO_QR_KANJI[text.charAt(i)] == -1) return false;