This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-imaging.git
commit 01240c4a7a4e3b4bc6e534d60246e9d94dd29670 Author: Gary Gregory <[email protected]> AuthorDate: Tue May 9 08:45:28 2023 -0400 Use switch instead of cascading if-else Use final Reduce nesting Better lambda --- .../java/org/apache/commons/imaging/Imaging.java | 2 +- .../commons/imaging/common/BasicCParser.java | 52 ++++++++++------------ .../common/BigEndianBinaryOutputStream.java | 2 +- .../commons/imaging/common/BinaryOutputStream.java | 3 +- .../common/LittleEndianBinaryOutputStream.java | 2 +- .../imaging/common/mylzw/MyLzwDecompressor.java | 20 ++++----- .../imaging/formats/bmp/PixelParserRgb.java | 30 +++++-------- .../imaging/formats/ico/IcoImageParser.java | 30 ++++++------- .../imaging/formats/jpeg/JpegImageParser.java | 40 ++++++++++++----- .../imaging/formats/pnm/PnmImageParser.java | 18 ++++---- .../formats/tiff/write/TiffImageWriterBase.java | 27 +++++++---- .../imaging/examples/tiff/ReadTagsAndImages.java | 10 +++-- .../imaging/formats/jpeg/exif/TextFieldTest.java | 6 +-- .../commons/imaging/formats/png/PngReadTest.java | 6 +-- .../imaging/test/util/FileSystemTraversal.java | 8 ++-- 15 files changed, 131 insertions(+), 125 deletions(-) diff --git a/src/main/java/org/apache/commons/imaging/Imaging.java b/src/main/java/org/apache/commons/imaging/Imaging.java index 1bf0a079..fd86e310 100644 --- a/src/main/java/org/apache/commons/imaging/Imaging.java +++ b/src/main/java/org/apache/commons/imaging/Imaging.java @@ -761,7 +761,7 @@ public final class Imaging { .of(ImageFormats.values()) .filter(imageFormat -> Stream .of(imageFormat.getExtensions()) - .anyMatch((extension) -> { + .anyMatch(extension -> { final String fileName = byteSource.getFileName(); if (fileName == null || fileName.trim().length() == 0) { return false; diff --git a/src/main/java/org/apache/commons/imaging/common/BasicCParser.java b/src/main/java/org/apache/commons/imaging/common/BasicCParser.java index 78a30806..9e1ce784 100644 --- a/src/main/java/org/apache/commons/imaging/common/BasicCParser.java +++ b/src/main/java/org/apache/commons/imaging/common/BasicCParser.java @@ -187,10 +187,8 @@ public class BasicCParser { hadStar = false; inComment = false; seenFirstComment = true; - } else { - if (!seenFirstComment) { - firstComment.append((char) c); - } + } else if (!seenFirstComment) { + firstComment.append((char) c); } } else { if (hadStar && !seenFirstComment) { @@ -382,15 +380,13 @@ public class BasicCParser { if (hadBackSlash) { i = parseEscape(i, stringBuilder, string); hadBackSlash = false; + } else if (c == '\\') { + hadBackSlash = true; + } else if (c == '"') { + throw new ImageReadException("Parsing XPM file failed, " + + "extra '\"' found in string"); } else { - if (c == '\\') { - hadBackSlash = true; - } else if (c == '"') { - throw new ImageReadException("Parsing XPM file failed, " - + "extra '\"' found in string"); - } else { - stringBuilder.append(c); - } + stringBuilder.append(c); } } if (hadBackSlash) { @@ -443,24 +439,22 @@ public class BasicCParser { return token.toString(); } token.append((char) c); + } else if (c == '"') { + token.append('"'); + inString = true; + } else if (Character.isLetterOrDigit(c) || c == '_') { + token.append((char) c); + inIdentifier = true; + } else if (c == '{' || c == '}' || c == '[' || c == ']' + || c == '*' || c == ';' || c == '=' || c == ',') { + token.append((char) c); + return token.toString(); + } else if (c == ' ' || c == '\t' || c == '\r' || c == '\n') { + // ignore } else { - if (c == '"') { - token.append('"'); - inString = true; - } else if (Character.isLetterOrDigit(c) || c == '_') { - token.append((char) c); - inIdentifier = true; - } else if (c == '{' || c == '}' || c == '[' || c == ']' - || c == '*' || c == ';' || c == '=' || c == ',') { - token.append((char) c); - return token.toString(); - } else if (c == ' ' || c == '\t' || c == '\r' || c == '\n') { - // ignore - } else { - throw new ImageReadException( - "Unhandled/invalid character '" + ((char) c) - + "' found in XPM file"); - } + throw new ImageReadException( + "Unhandled/invalid character '" + ((char) c) + + "' found in XPM file"); } } diff --git a/src/main/java/org/apache/commons/imaging/common/BigEndianBinaryOutputStream.java b/src/main/java/org/apache/commons/imaging/common/BigEndianBinaryOutputStream.java index 983c6a14..8d95ab71 100644 --- a/src/main/java/org/apache/commons/imaging/common/BigEndianBinaryOutputStream.java +++ b/src/main/java/org/apache/commons/imaging/common/BigEndianBinaryOutputStream.java @@ -22,7 +22,7 @@ import java.io.OutputStream; final class BigEndianBinaryOutputStream extends BinaryOutputStream { - BigEndianBinaryOutputStream(OutputStream os) { + BigEndianBinaryOutputStream(final OutputStream os) { super(os); } diff --git a/src/main/java/org/apache/commons/imaging/common/BinaryOutputStream.java b/src/main/java/org/apache/commons/imaging/common/BinaryOutputStream.java index 107b1b4e..641f7c18 100644 --- a/src/main/java/org/apache/commons/imaging/common/BinaryOutputStream.java +++ b/src/main/java/org/apache/commons/imaging/common/BinaryOutputStream.java @@ -34,7 +34,8 @@ public abstract class BinaryOutputStream extends FilterOutputStream { Objects.requireNonNull(byteOrder, "byteOrder"); if (byteOrder == ByteOrder.LITTLE_ENDIAN) { return littleEndian(outputStream); - } else if (byteOrder == ByteOrder.BIG_ENDIAN) { + } + if (byteOrder == ByteOrder.BIG_ENDIAN) { return bigEndian(outputStream); } throw new UnsupportedOperationException(byteOrder.toString()); diff --git a/src/main/java/org/apache/commons/imaging/common/LittleEndianBinaryOutputStream.java b/src/main/java/org/apache/commons/imaging/common/LittleEndianBinaryOutputStream.java index b2ad7aa4..abdf84c3 100644 --- a/src/main/java/org/apache/commons/imaging/common/LittleEndianBinaryOutputStream.java +++ b/src/main/java/org/apache/commons/imaging/common/LittleEndianBinaryOutputStream.java @@ -22,7 +22,7 @@ import java.io.OutputStream; final class LittleEndianBinaryOutputStream extends BinaryOutputStream { - LittleEndianBinaryOutputStream(OutputStream os) { + LittleEndianBinaryOutputStream(final OutputStream os) { super(os); } diff --git a/src/main/java/org/apache/commons/imaging/common/mylzw/MyLzwDecompressor.java b/src/main/java/org/apache/commons/imaging/common/mylzw/MyLzwDecompressor.java index 1aa607ef..5054e67f 100644 --- a/src/main/java/org/apache/commons/imaging/common/mylzw/MyLzwDecompressor.java +++ b/src/main/java/org/apache/commons/imaging/common/mylzw/MyLzwDecompressor.java @@ -125,18 +125,16 @@ public final class MyLzwDecompressor { break; } writeToResult(baos, stringFromCode(code)); + } else if (isInTable(code)) { + writeToResult(baos, stringFromCode(code)); + + addStringToTable(appendBytes(stringFromCode(oldCode), + firstChar(stringFromCode(code)))); } else { - if (isInTable(code)) { - writeToResult(baos, stringFromCode(code)); - - addStringToTable(appendBytes(stringFromCode(oldCode), - firstChar(stringFromCode(code)))); - } else { - final byte[] outString = appendBytes(stringFromCode(oldCode), - firstChar(stringFromCode(oldCode))); - writeToResult(baos, outString); - addStringToTable(outString); - } + final byte[] outString = appendBytes(stringFromCode(oldCode), + firstChar(stringFromCode(oldCode))); + writeToResult(baos, outString); + addStringToTable(outString); } oldCode = code; diff --git a/src/main/java/org/apache/commons/imaging/formats/bmp/PixelParserRgb.java b/src/main/java/org/apache/commons/imaging/formats/bmp/PixelParserRgb.java index dd125206..441f6b48 100644 --- a/src/main/java/org/apache/commons/imaging/formats/bmp/PixelParserRgb.java +++ b/src/main/java/org/apache/commons/imaging/formats/bmp/PixelParserRgb.java @@ -37,8 +37,9 @@ class PixelParserRgb extends PixelParserSimple { @Override public int getNextRGB() throws ImageReadException, IOException { - if ((bhi.bitsPerPixel == 1) - || (bhi.bitsPerPixel == 4)) { // always grayscale? + switch (bhi.bitsPerPixel) { + case 1: + case 4: { if (cachedBitCount < bhi.bitsPerPixel) { if (cachedBitCount != 0) { throw new ImageReadException("Unexpected leftover bits: " @@ -53,56 +54,45 @@ class PixelParserRgb extends PixelParserSimple { final int sample = cacheMask & (cachedByte >> (8 - bhi.bitsPerPixel)); cachedByte = 0xff & (cachedByte << bhi.bitsPerPixel); cachedBitCount -= bhi.bitsPerPixel; - return getColorTableRGB(sample); } - if (bhi.bitsPerPixel == 8) { // always grayscale? + case 8: { final int sample = 0xff & imageData[byteCount + 0]; - final int rgb = getColorTableRGB(sample); - byteCount += 1; - return rgb; } - if (bhi.bitsPerPixel == 16) { + case 16: { final int data = read2Bytes("Pixel", is, "BMP Image Data", ByteOrder.LITTLE_ENDIAN); - final int blue = (0x1f & (data >> 0)) << 3; final int green = (0x1f & (data >> 5)) << 3; final int red = (0x1f & (data >> 10)) << 3; final int alpha = 0xff; - final int rgb = (alpha << 24) | (red << 16) | (green << 8) | (blue << 0); - byteCount += 2; - return rgb; } - if (bhi.bitsPerPixel == 24) { + case 24: { final int blue = 0xff & imageData[byteCount + 0]; final int green = 0xff & imageData[byteCount + 1]; final int red = 0xff & imageData[byteCount + 2]; final int alpha = 0xff; - final int rgb = (alpha << 24) | (red << 16) | (green << 8) | (blue << 0); - byteCount += 3; - return rgb; } - if (bhi.bitsPerPixel == 32) { + case 32: { final int blue = 0xff & imageData[byteCount + 0]; final int green = 0xff & imageData[byteCount + 1]; final int red = 0xff & imageData[byteCount + 2]; final int alpha = 0xff; - final int rgb = (alpha << 24) | (red << 16) | (green << 8) | (blue << 0); - byteCount += 4; - return rgb; } + default: + break; + } throw new ImageReadException("Unknown BitsPerPixel: " + bhi.bitsPerPixel); diff --git a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java index c5b15c17..dfe8dca9 100644 --- a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java +++ b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java @@ -722,23 +722,21 @@ public class IcoImageParser extends ImageParser<IcoImagingParameters> { } else if (bitCount == 32) { bos.write4Bytes(argb); } - } else { - if (bitCount < 8) { - final int rgb = 0xffffff & argb; - final int index = palette.getPaletteIndex(rgb); - bitCache <<= bitCount; - bitCache |= index; - bitsInCache += bitCount; - if (bitsInCache >= 8) { - bos.write(0xff & bitCache); - bitCache = 0; - bitsInCache = 0; - } - } else if (bitCount == 8) { - final int rgb = 0xffffff & argb; - final int index = palette.getPaletteIndex(rgb); - bos.write(0xff & index); + } else if (bitCount < 8) { + final int rgb = 0xffffff & argb; + final int index = palette.getPaletteIndex(rgb); + bitCache <<= bitCount; + bitCache |= index; + bitsInCache += bitCount; + if (bitsInCache >= 8) { + bos.write(0xff & bitCache); + bitCache = 0; + bitsInCache = 0; } + } else if (bitCount == 8) { + final int rgb = 0xffffff & argb; + final int index = palette.getPaletteIndex(rgb); + bos.write(0xff & index); } } diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java index e5ff874c..ba16d914 100644 --- a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java +++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java @@ -531,16 +531,22 @@ public class JpegImageParser extends ImageParser<JpegImagingParameters> implemen boolean haveOther = false; for (final SofnSegment.Component component : fSOFNSegment.getComponents()) { final int id = component.componentIdentifier; - if (id == 1) { + switch (id) { + case 1: have1 = true; - } else if (id == 2) { + break; + case 2: have2 = true; - } else if (id == 3) { + break; + case 3: have3 = true; - } else if (id == 4) { + break; + case 4: have4 = true; - } else { + break; + default: haveOther = true; + break; } } if (numberOfComponents == 3 && have1 && have2 && have3 && !have4 && !haveOther) { @@ -558,20 +564,30 @@ public class JpegImageParser extends ImageParser<JpegImagingParameters> implemen boolean haveY = false; for (final SofnSegment.Component component : fSOFNSegment.getComponents()) { final int id = component.componentIdentifier; - if (id == 'R') { + switch (id) { + case 'R': haveR = true; - } else if (id == 'G') { + break; + case 'G': haveG = true; - } else if (id == 'B') { + break; + case 'B': haveB = true; - } else if (id == 'A') { + break; + case 'A': haveA = true; - } else if (id == 'C') { + break; + case 'C': haveC = true; - } else if (id == 'c') { + break; + case 'c': havec = true; - } else if (id == 'Y') { + break; + case 'Y': haveY = true; + break; + default: + break; } } if (haveR && haveG && haveB && !haveA && !haveC && !havec && !haveY) { diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java index caee4f77..6b023caa 100644 --- a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java +++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java @@ -214,28 +214,30 @@ public class PnmImageParser extends ImageParser<PnmImagingParameters> { throw new ImageReadException("Invalid height specified." , e); } - if (identifier2 == PnmConstants.PBM_TEXT_CODE) { + switch (identifier2) { + case PnmConstants.PBM_TEXT_CODE: return new PbmFileInfo(width, height, false); - } - if (identifier2 == PnmConstants.PBM_RAW_CODE) { + case PnmConstants.PBM_RAW_CODE: return new PbmFileInfo(width, height, true); - } - if (identifier2 == PnmConstants.PGM_TEXT_CODE) { + case PnmConstants.PGM_TEXT_CODE: { final int maxgray = Integer.parseInt(wsr.readtoWhiteSpace()); return new PgmFileInfo(width, height, false, maxgray); } - if (identifier2 == PnmConstants.PGM_RAW_CODE) { + case PnmConstants.PGM_RAW_CODE: { final int maxgray = Integer.parseInt(wsr.readtoWhiteSpace()); return new PgmFileInfo(width, height, true, maxgray); } - if (identifier2 == PnmConstants.PPM_TEXT_CODE) { + case PnmConstants.PPM_TEXT_CODE: { final int max = Integer.parseInt(wsr.readtoWhiteSpace()); return new PpmFileInfo(width, height, false, max); } - if (identifier2 == PnmConstants.PPM_RAW_CODE) { + case PnmConstants.PPM_RAW_CODE: { final int max = Integer.parseInt(wsr.readtoWhiteSpace()); return new PpmFileInfo(width, height, true, max); } + default: + break; + } } else if (identifier2 == PnmConstants.PAM_RAW_CODE) { int width = -1; boolean seenWidth = false; diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/write/TiffImageWriterBase.java b/src/main/java/org/apache/commons/imaging/formats/tiff/write/TiffImageWriterBase.java index cc924cd7..6a5da9a2 100644 --- a/src/main/java/org/apache/commons/imaging/formats/tiff/write/TiffImageWriterBase.java +++ b/src/main/java/org/apache/commons/imaging/formats/tiff/write/TiffImageWriterBase.java @@ -479,11 +479,13 @@ public abstract class TiffImageWriterBase { int t4Options = 0; int t6Options = 0; - if (compression == TIFF_COMPRESSION_CCITT_1D) { + switch (compression) { + case TIFF_COMPRESSION_CCITT_1D: for (int i = 0; i < strips.length; i++) { strips[i] = T4AndT6Compression.compressModifiedHuffman(strips[i], width, strips[i].length / ((width + 7) / 8)); } - } else if (compression == TIFF_COMPRESSION_CCITT_GROUP_3) { + break; + case TIFF_COMPRESSION_CCITT_GROUP_3: { final Integer t4Parameter = params.getT4Options(); if (t4Parameter != null) { t4Options = t4Parameter.intValue(); @@ -507,7 +509,9 @@ public abstract class TiffImageWriterBase { hasFillBitsBeforeEOL); } } - } else if (compression == TIFF_COMPRESSION_CCITT_GROUP_4) { + break; + } + case TIFF_COMPRESSION_CCITT_GROUP_4: { final Integer t6Parameter = params.getT6Options(); if (t6Parameter != null) { t6Options = t6Parameter.intValue(); @@ -521,11 +525,14 @@ public abstract class TiffImageWriterBase { for (int i = 0; i < strips.length; i++) { strips[i] = T4AndT6Compression.compressT6(strips[i], width, strips[i].length / ((width + 7) / 8)); } - } else if (compression == TIFF_COMPRESSION_PACKBITS) { + break; + } + case TIFF_COMPRESSION_PACKBITS: for (int i = 0; i < strips.length; i++) { strips[i] = new PackBits().compress(strips[i]); } - } else if (compression == TIFF_COMPRESSION_LZW) { + break; + case TIFF_COMPRESSION_LZW: predictor = TiffTagConstants.PREDICTOR_VALUE_HORIZONTAL_DIFFERENCING; for (int i = 0; i < strips.length; i++) { final byte[] uncompressed = strips[i]; @@ -537,15 +544,17 @@ public abstract class TiffImageWriterBase { final byte[] compressed = compressor.compress(uncompressed); strips[i] = compressed; } - } else if (compression == TIFF_COMPRESSION_DEFLATE_ADOBE) { + break; + case TIFF_COMPRESSION_DEFLATE_ADOBE: predictor = TiffTagConstants.PREDICTOR_VALUE_HORIZONTAL_DIFFERENCING; for (int i = 0; i < strips.length; i++) { this.applyPredictor(width, samplesPerPixel, strips[i]); strips[i] = ZlibDeflate.compress(strips[i]); } - } else if (compression == TIFF_COMPRESSION_UNCOMPRESSED) { - // do nothing. - } else { + break; + case TIFF_COMPRESSION_UNCOMPRESSED: + break; + default: throw new ImageWriteException( "Invalid compression parameter (Only CCITT 1D/Group 3/Group 4, LZW, Packbits, Zlib Deflate and uncompressed supported)."); } diff --git a/src/test/java/org/apache/commons/imaging/examples/tiff/ReadTagsAndImages.java b/src/test/java/org/apache/commons/imaging/examples/tiff/ReadTagsAndImages.java index 5048dbeb..ca509131 100644 --- a/src/test/java/org/apache/commons/imaging/examples/tiff/ReadTagsAndImages.java +++ b/src/test/java/org/apache/commons/imaging/examples/tiff/ReadTagsAndImages.java @@ -304,11 +304,13 @@ public class ReadTagsAndImages { // in original spec was "ProjectedCSTypeGeoKey" if (0 <= valueOrPosition && valueOrPosition <= 1023) { return "Reserved"; - } else if (1024 <= valueOrPosition && valueOrPosition <= 32766) { - return "EPSG Code #" + valueOrPosition; - } else if (valueOrPosition == 32767) { - return "User-Defined Projection"; } + if (1024 <= valueOrPosition && valueOrPosition <= 32766) { + return "EPSG Code #" + valueOrPosition; + } + if (valueOrPosition == 32767) { + return "User-Defined Projection"; + } break; case ProjectionGeoKey: if(valueOrPosition==32767){ diff --git a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/TextFieldTest.java b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/TextFieldTest.java index 512defd0..168117f9 100644 --- a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/TextFieldTest.java +++ b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/TextFieldTest.java @@ -34,11 +34,9 @@ public class TextFieldTest extends SpecificExifTagTest { @Override protected void checkField(final File imageFile, final TiffField field) throws IOException, ImageReadException, ImageWriteException { - if (field.getTag() == ExifTagConstants.EXIF_TAG_USER_COMMENT.tag) { + if ((field.getTag() == ExifTagConstants.EXIF_TAG_USER_COMMENT.tag) || (field.getTag() == GpsTagConstants.GPS_TAG_GPS_PROCESSING_METHOD.tag + && field.getDirectoryType() == TiffDirectoryType.EXIF_DIRECTORY_GPS.directoryType)) { // do nothing - } else if (field.getTag() == GpsTagConstants.GPS_TAG_GPS_PROCESSING_METHOD.tag - && field.getDirectoryType() == TiffDirectoryType.EXIF_DIRECTORY_GPS.directoryType) { - // do nothing } else if (field.getTag() == GpsTagConstants.GPS_TAG_GPS_AREA_INFORMATION.tag && field.getDirectoryType() == TiffDirectoryType.EXIF_DIRECTORY_GPS.directoryType) { // do nothing diff --git a/src/test/java/org/apache/commons/imaging/formats/png/PngReadTest.java b/src/test/java/org/apache/commons/imaging/formats/png/PngReadTest.java index bbc063b1..429f2186 100644 --- a/src/test/java/org/apache/commons/imaging/formats/png/PngReadTest.java +++ b/src/test/java/org/apache/commons/imaging/formats/png/PngReadTest.java @@ -92,11 +92,11 @@ public class PngReadTest extends PngBaseTest { final String file = PngReadTest.class.getResource(input).getFile(); final PngImageParser parser = new PngImageParser(); - ImageMetadata metadata = parser.getMetadata(new File(file)); - List<?> items = metadata.getItems(); + final ImageMetadata metadata = parser.getMetadata(new File(file)); + final List<?> items = metadata.getItems(); assertEquals(1, items.size()); - GenericImageMetadata.GenericImageMetadataItem item = ((GenericImageMetadata.GenericImageMetadataItem) items.get(0)); + final GenericImageMetadata.GenericImageMetadataItem item = ((GenericImageMetadata.GenericImageMetadataItem) items.get(0)); assertEquals("Comment", item.getKeyword()); assertEquals("\u2192 UTF-8 Test", item.getText()); } diff --git a/src/test/java/org/apache/commons/imaging/test/util/FileSystemTraversal.java b/src/test/java/org/apache/commons/imaging/test/util/FileSystemTraversal.java index c9d8229d..19bc7c14 100644 --- a/src/test/java/org/apache/commons/imaging/test/util/FileSystemTraversal.java +++ b/src/test/java/org/apache/commons/imaging/test/util/FileSystemTraversal.java @@ -87,11 +87,9 @@ public class FileSystemTraversal { return false; } } - } else { - if (mode == MODE_ALL) { - if (!visitor.visit(file, estimate)) { - return false; - } + } else if (mode == MODE_ALL) { + if (!visitor.visit(file, estimate)) { + return false; } }
