diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b4924602af..9ca1a67369 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,8 +5,6 @@ on: push: branches: [ master ] pull_request: - branches: [ master ] - jobs: build-and-test: diff --git a/src/main/java/com/amazon/ion/_private/SuppressFBWarnings.kt b/src/main/java/com/amazon/ion/_private/SuppressFBWarnings.kt new file mode 100644 index 0000000000..8cb0e2240f --- /dev/null +++ b/src/main/java/com/amazon/ion/_private/SuppressFBWarnings.kt @@ -0,0 +1,18 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +package com.amazon.ion._private + +/** + * SpotBugs looks for an annotation called `SuppressFBWarnings` regardless of the package it is in. + * This will allow us to disable some SpotBugs rules when we want e.g. to allow switch case fallthrough. + * + * We are implementing our own annotation so that we don't have to declare any dependency on another package just for this. + */ +annotation class SuppressFBWarnings( + /** + * The set of FindBugs/SpotBugs warnings that are to be suppressed in the annotated element. + * The value can be a bug category, kind, or pattern. + * For examples of some bug types, see https://spotbugs.readthedocs.io/en/stable/bugDescriptions.html + */ + vararg val value: String = [] +) diff --git a/src/main/java/com/amazon/ion/impl/IonReaderContinuableCoreBinary.java b/src/main/java/com/amazon/ion/impl/IonReaderContinuableCoreBinary.java index 46eb840208..9ab67d9948 100644 --- a/src/main/java/com/amazon/ion/impl/IonReaderContinuableCoreBinary.java +++ b/src/main/java/com/amazon/ion/impl/IonReaderContinuableCoreBinary.java @@ -9,6 +9,7 @@ import com.amazon.ion.IonException; import com.amazon.ion.IonType; import com.amazon.ion.Timestamp; +import com.amazon.ion._private.SuppressFBWarnings; import com.amazon.ion.impl.bin.IntList; import com.amazon.ion.impl.bin.utf8.Utf8StringDecoder; import com.amazon.ion.impl.bin.utf8.Utf8StringDecoderPool; @@ -672,6 +673,7 @@ private BigDecimal readTimestampFraction_1_1() { * Reads an Ion 1.1 long form timestamp. * @return the value. */ + @SuppressFBWarnings("SF_SWITCH_FALLTHROUGH") private Timestamp readTimestampLongForm_1_1() { int year; int month = 1; @@ -739,6 +741,7 @@ private Timestamp readTimestampLongForm_1_1() { * Reads an Ion 1.1 timestamp in either the long or short form. * @return the value. */ + @SuppressFBWarnings("SF_SWITCH_FALLTHROUGH") private Timestamp readTimestamp_1_1() { if (valueTid.variableLength) { return readTimestampLongForm_1_1(); diff --git a/src/main/java/com/amazon/ion/impl/IonTypeID.java b/src/main/java/com/amazon/ion/impl/IonTypeID.java index 5aa05799b1..f7a0c6f7d7 100644 --- a/src/main/java/com/amazon/ion/impl/IonTypeID.java +++ b/src/main/java/com/amazon/ion/impl/IonTypeID.java @@ -352,6 +352,8 @@ private IonTypeID(byte id, int minorVersion) { case TIMESTAMP_NANOS_PRECISION_WITH_OFFSET: length = 9; break; + default: + // Unreachable } } else { length = lowerNibble; diff --git a/src/main/java/com/amazon/ion/impl/_Private_IonConstants.java b/src/main/java/com/amazon/ion/impl/_Private_IonConstants.java index bde35c56a0..e925616306 100644 --- a/src/main/java/com/amazon/ion/impl/_Private_IonConstants.java +++ b/src/main/java/com/amazon/ion/impl/_Private_IonConstants.java @@ -16,6 +16,7 @@ package com.amazon.ion.impl; import com.amazon.ion.IonException; +import com.amazon.ion._private.SuppressFBWarnings; /** * NOT FOR APPLICATION USE! @@ -108,6 +109,7 @@ public static final boolean isSurrogate(int c) { /** * The byte sequence indicating use of Ion 1.0 binary format. */ + @SuppressFBWarnings("MS_MUTABLE_ARRAY") public static final byte[] BINARY_VERSION_MARKER_1_0 = { (byte) 0xE0, (byte) 0x01, (byte) 0x00, @@ -116,6 +118,7 @@ public static final boolean isSurrogate(int c) { /** * The byte sequence indicating use of Ion 1.1 binary format. */ + @SuppressFBWarnings("MS_MUTABLE_ARRAY") public static final byte[] BINARY_VERSION_MARKER_1_1 = { (byte) 0xE0, (byte) 0x01, (byte) 0x01, diff --git a/src/main/java/com/amazon/ion/impl/bin/Ion_1_1_Constants.java b/src/main/java/com/amazon/ion/impl/bin/Ion_1_1_Constants.java index b1924b7bd2..7aa507e8ae 100644 --- a/src/main/java/com/amazon/ion/impl/bin/Ion_1_1_Constants.java +++ b/src/main/java/com/amazon/ion/impl/bin/Ion_1_1_Constants.java @@ -3,6 +3,7 @@ package com.amazon.ion.impl.bin; import com.amazon.ion.Timestamp; +import com.amazon.ion._private.SuppressFBWarnings; /** * Contains constants (other than OpCodes) which are generally applicable to both reading and writing binary Ion 1.1 @@ -63,7 +64,7 @@ private Ion_1_1_Constants() {} public static final int L_TIMESTAMP_OFFSET_BIAS = 1440; // 24 hours * 60 min/hour //////// Lookup tables //////// - + @SuppressFBWarnings("MS_MUTABLE_ARRAY") public static final Timestamp.Precision[] S_TIMESTAMP_PRECISION_FOR_TYPE_ID_OFFSET = new Timestamp.Precision[] { Timestamp.Precision.YEAR, // 0x70 Timestamp.Precision.MONTH, // 0x71 @@ -80,6 +81,7 @@ private Ion_1_1_Constants() {} Timestamp.Precision.SECOND, // 0x7C (nanosecond offset) }; + @SuppressFBWarnings("MS_MUTABLE_ARRAY") public static final Timestamp.Precision[] L_TIMESTAMP_PRECISION_FOR_LENGTH = new Timestamp.Precision[] { null, // Length 0: illegal null, // Length 1: illegal