This is an automated email from the ASF dual-hosted git repository.

kennknowles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 6572166744e [Java] Make non-extensible classes final instead of 
suppressing CT_CONSTRUCTOR_THROW (#40444)
6572166744e is described below

commit 6572166744efdead363df4a832be35cfc8f40040
Author: Maksym Tymoshyk <[email protected]>
AuthorDate: Fri Oct 16 17:35:07 2026 +0300

    [Java] Make non-extensible classes final instead of suppressing 
CT_CONSTRUCTOR_THROW (#40444)
---
 .../complete/datatokenization/utils/SchemasUtils.java    |  9 +--------
 .../subprocess/utils/CallingSubProcessUtils.java         |  9 +--------
 .../beam/examples/subprocess/utils/ExecutableFile.java   |  9 +--------
 .../beam/it/clickhouse/ClickHouseResourceManager.java    | 11 ++---------
 .../beam/it/gcp/bigtable/BigtableResourceManager.java    |  9 +--------
 .../org/apache/beam/it/splunk/SplunkResourceManager.java |  9 +--------
 .../core/construction/SerializablePipelineOptions.java   |  9 +--------
 .../beam/runners/core/metrics/BoundedTrieData.java       | 16 ++++++----------
 .../flink/FlinkStreamingPortablePipelineTranslator.java  |  9 +--------
 .../wrappers/streaming/io/UnboundedSourceWrapper.java    | 10 ++--------
 .../wrappers/streaming/state/FlinkStateInternals.java    |  9 +--------
 .../flink/FlinkStreamingPortablePipelineTranslator.java  |  9 +--------
 .../wrappers/streaming/io/UnboundedSourceWrapper.java    | 10 ++--------
 .../streaming/io/source/FlinkSourceSplitEnumerator.java  |  9 +--------
 .../io/source/LazyFlinkSourceSplitEnumerator.java        |  9 +--------
 .../streaming/stableinput/BufferingDoFnRunner.java       |  9 +--------
 .../stableinput/KeyedBufferingElementsHandler.java       |  9 +--------
 .../wrappers/streaming/state/FlinkStateInternals.java    |  9 +--------
 .../fnexecution/control/DefaultJobBundleFactory.java     |  9 +--------
 .../main/java/org/apache/beam/runners/jet/JetRunner.java |  9 +--------
 .../beam/runners/jet/processors/AssignWindowP.java       |  9 +--------
 .../runners/spark/metrics/SparkBeamMetricSource.java     |  9 +--------
 .../apache/beam/runners/spark/metrics/sink/CsvSink.java  |  9 +--------
 .../beam/runners/spark/metrics/sink/GraphiteSink.java    |  9 +--------
 .../metrics/SparkBeamMetricSource.java                   |  9 +--------
 .../metrics/sink/CodahaleCsvSink.java                    |  9 +--------
 .../metrics/sink/CodahaleGraphiteSink.java               |  9 +--------
 .../SparkBatchPortablePipelineTranslator.java            |  9 +--------
 .../SparkDatasetPortablePipelineTranslator.java          |  9 +--------
 .../SparkStreamingPortablePipelineTranslator.java        |  9 +--------
 .../main/java/org/apache/beam/sdk/transforms/Sample.java |  9 +--------
 31 files changed, 39 insertions(+), 251 deletions(-)

diff --git 
a/examples/java/src/main/java/org/apache/beam/examples/complete/datatokenization/utils/SchemasUtils.java
 
b/examples/java/src/main/java/org/apache/beam/examples/complete/datatokenization/utils/SchemasUtils.java
index 6388ed9fa0e..3f64edee5c4 100644
--- 
a/examples/java/src/main/java/org/apache/beam/examples/complete/datatokenization/utils/SchemasUtils.java
+++ 
b/examples/java/src/main/java/org/apache/beam/examples/complete/datatokenization/utils/SchemasUtils.java
@@ -21,7 +21,6 @@ import static 
org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils.fromTableSchema;
 import static 
org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.base.Preconditions.checkArgument;
 
 import com.google.api.services.bigquery.model.TableSchema;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
@@ -54,13 +53,7 @@ import org.slf4j.LoggerFactory;
   "argument",
   "return"
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class SchemasUtils {
+public final class SchemasUtils {
 
   /* Logger for class.*/
   private static final Logger LOG = 
LoggerFactory.getLogger(SchemasUtils.class);
diff --git 
a/examples/java/src/main/java/org/apache/beam/examples/subprocess/utils/CallingSubProcessUtils.java
 
b/examples/java/src/main/java/org/apache/beam/examples/subprocess/utils/CallingSubProcessUtils.java
index e04ad4c5a41..6f22bbe6855 100644
--- 
a/examples/java/src/main/java/org/apache/beam/examples/subprocess/utils/CallingSubProcessUtils.java
+++ 
b/examples/java/src/main/java/org/apache/beam/examples/subprocess/utils/CallingSubProcessUtils.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.examples.subprocess.utils;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -89,13 +88,7 @@ public class CallingSubProcessUtils {
   }
 
   /** Permit class for access to worker cpu resources. */
-  @SuppressFBWarnings(
-      value = "CT_CONSTRUCTOR_THROW",
-      justification =
-          "Pre-existing finding, not triaged yet."
-              + " Making the class final or moving the throwing code"
-              + " into a static factory method may fix it.")
-  public static class Permit implements AutoCloseable {
+  public static final class Permit implements AutoCloseable {
 
     private String binaryName;
 
diff --git 
a/examples/java/src/main/java/org/apache/beam/examples/subprocess/utils/ExecutableFile.java
 
b/examples/java/src/main/java/org/apache/beam/examples/subprocess/utils/ExecutableFile.java
index bc409a89581..fbff1af4afd 100644
--- 
a/examples/java/src/main/java/org/apache/beam/examples/subprocess/utils/ExecutableFile.java
+++ 
b/examples/java/src/main/java/org/apache/beam/examples/subprocess/utils/ExecutableFile.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.examples.subprocess.utils;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import 
org.apache.beam.examples.subprocess.configuration.SubProcessConfiguration;
 import org.apache.beam.sdk.coders.DefaultCoder;
 import org.apache.beam.sdk.extensions.avro.coders.AvroCoder;
@@ -27,13 +26,7 @@ import org.apache.beam.sdk.extensions.avro.coders.AvroCoder;
 @SuppressWarnings({
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class ExecutableFile {
+public final class ExecutableFile {
 
   String fileName;
 
diff --git 
a/it/clickhouse/src/main/java/org/apache/beam/it/clickhouse/ClickHouseResourceManager.java
 
b/it/clickhouse/src/main/java/org/apache/beam/it/clickhouse/ClickHouseResourceManager.java
index 9ff7ee92f1f..cd7cbfa45b6 100644
--- 
a/it/clickhouse/src/main/java/org/apache/beam/it/clickhouse/ClickHouseResourceManager.java
+++ 
b/it/clickhouse/src/main/java/org/apache/beam/it/clickhouse/ClickHouseResourceManager.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.it.clickhouse;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -45,14 +44,8 @@ import org.testcontainers.utility.DockerImageName;
  *
  * <p>The class is thread-safe.
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class ClickHouseResourceManager extends 
TestContainerResourceManager<GenericContainer<?>>
-    implements ResourceManager {
+public final class ClickHouseResourceManager
+    extends TestContainerResourceManager<GenericContainer<?>> implements 
ResourceManager {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(ClickHouseResourceManager.class);
 
diff --git 
a/it/google-cloud-platform/src/main/java/org/apache/beam/it/gcp/bigtable/BigtableResourceManager.java
 
b/it/google-cloud-platform/src/main/java/org/apache/beam/it/gcp/bigtable/BigtableResourceManager.java
index 8773e261045..eed85e8d012 100644
--- 
a/it/google-cloud-platform/src/main/java/org/apache/beam/it/gcp/bigtable/BigtableResourceManager.java
+++ 
b/it/google-cloud-platform/src/main/java/org/apache/beam/it/gcp/bigtable/BigtableResourceManager.java
@@ -49,7 +49,6 @@ import com.google.cloud.bigtable.data.v2.models.RowMutation;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -78,13 +77,7 @@ import org.threeten.bp.Duration;
  *
  * <p>The class is thread-safe.
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class BigtableResourceManager implements ResourceManager {
+public final class BigtableResourceManager implements ResourceManager {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(BigtableResourceManager.class);
   private static final String DEFAULT_CLUSTER_ZONE = "us-central1-b";
diff --git 
a/it/splunk/src/main/java/org/apache/beam/it/splunk/SplunkResourceManager.java 
b/it/splunk/src/main/java/org/apache/beam/it/splunk/SplunkResourceManager.java
index a4bdca3dcc3..48937fa94c0 100644
--- 
a/it/splunk/src/main/java/org/apache/beam/it/splunk/SplunkResourceManager.java
+++ 
b/it/splunk/src/main/java/org/apache/beam/it/splunk/SplunkResourceManager.java
@@ -25,7 +25,6 @@ import com.splunk.Job;
 import com.splunk.ResultsReader;
 import com.splunk.ResultsReaderXml;
 import com.splunk.ServiceArgs;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.time.Duration;
@@ -61,13 +60,7 @@ import org.testcontainers.utility.DockerImageName;
  * <p>Note: The Splunk TestContainer will only run on M1 Mac's if the Docker 
version is >= 4.16.0
  * and the "Use Rosetta for x86/amd64 emulation on Apple Silicon" setting is 
enabled.
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class SplunkResourceManager extends 
TestContainerResourceManager<SplunkContainer>
+public final class SplunkResourceManager extends 
TestContainerResourceManager<SplunkContainer>
     implements ResourceManager {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(SplunkResourceManager.class);
diff --git 
a/runners/core-java/src/main/java/org/apache/beam/runners/core/construction/SerializablePipelineOptions.java
 
b/runners/core-java/src/main/java/org/apache/beam/runners/core/construction/SerializablePipelineOptions.java
index 8885974c472..f78913db3ff 100644
--- 
a/runners/core-java/src/main/java/org/apache/beam/runners/core/construction/SerializablePipelineOptions.java
+++ 
b/runners/core-java/src/main/java/org/apache/beam/runners/core/construction/SerializablePipelineOptions.java
@@ -19,7 +19,6 @@ package org.apache.beam.runners.core.construction;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.Serializable;
@@ -33,13 +32,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
  * Holds a {@link PipelineOptions} in JSON serialized form and calls {@link
  * FileSystems#setDefaultPipelineOptions(PipelineOptions)} on construction or 
on deserialization.
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class SerializablePipelineOptions implements Serializable {
+public final class SerializablePipelineOptions implements Serializable {
   private static final ObjectMapper MAPPER =
       new ObjectMapper()
           
.registerModules(ObjectMapper.findModules(ReflectHelpers.findClassLoader()));
diff --git 
a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/BoundedTrieData.java
 
b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/BoundedTrieData.java
index f99dc3e0b5d..6e55411c600 100644
--- 
a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/BoundedTrieData.java
+++ 
b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/BoundedTrieData.java
@@ -57,13 +57,9 @@ import 
org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.collect.Immuta
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
 @SuppressFBWarnings(
-    value = {"IS2_INCONSISTENT_SYNC", "CT_CONSTRUCTOR_THROW"},
-    justification =
-        "Some access on purpose are left unsynchronized."
-            + " Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class BoundedTrieData implements Serializable {
+    value = "IS2_INCONSISTENT_SYNC",
+    justification = "Some access on purpose are left unsynchronized")
+public final class BoundedTrieData implements Serializable {
 
   private static final int DEFAULT_BOUND = 100; // Default maximum size of the 
trie
 
@@ -286,7 +282,7 @@ public class BoundedTrieData implements Serializable {
   }
 
   @Override
-  public final boolean equals(@Nullable Object other) {
+  public boolean equals(@Nullable Object other) {
     if (this == other) {
       return true;
     }
@@ -298,12 +294,12 @@ public class BoundedTrieData implements Serializable {
   }
 
   @Override
-  public final int hashCode() {
+  public int hashCode() {
     return this.asTrie().hashCode();
   }
 
   @Override
-  public final String toString() {
+  public String toString() {
     return "BoundedTrieData(" + this.asTrie() + ")";
   }
 
diff --git 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/FlinkStreamingPortablePipelineTranslator.java
 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/FlinkStreamingPortablePipelineTranslator.java
index 9e24bd779de..6ed13902d92 100644
--- 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/FlinkStreamingPortablePipelineTranslator.java
+++ 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/FlinkStreamingPortablePipelineTranslator.java
@@ -26,7 +26,6 @@ import static 
org.apache.beam.sdk.util.construction.ExecutableStageTranslation.g
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.auto.service.AutoService;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -131,13 +130,7 @@ import org.apache.flink.util.OutputTag;
   "keyfor",
   "nullness"
 }) // TODO(https://github.com/apache/beam/issues/20497)
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class FlinkStreamingPortablePipelineTranslator
+public final class FlinkStreamingPortablePipelineTranslator
     implements FlinkPortablePipelineTranslator<
         FlinkStreamingPortablePipelineTranslator.StreamingTranslationContext> {
 
diff --git 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/UnboundedSourceWrapper.java
 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/UnboundedSourceWrapper.java
index 84790026a76..86a3f406cf0 100644
--- 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/UnboundedSourceWrapper.java
+++ 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/UnboundedSourceWrapper.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.runners.flink.translation.wrappers.streaming.io;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -68,13 +67,8 @@ import org.slf4j.LoggerFactory;
   "rawtypes", // TODO(https://github.com/apache/beam/issues/20447)
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class UnboundedSourceWrapper<OutputT, CheckpointMarkT extends 
UnboundedSource.CheckpointMark>
+public final class UnboundedSourceWrapper<
+        OutputT, CheckpointMarkT extends UnboundedSource.CheckpointMark>
     extends 
RichParallelSourceFunction<WindowedValue<ValueWithRecordId<OutputT>>>
     implements BeamStoppableFunction,
         CheckpointListener,
diff --git 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
index a388d77c4fb..33b098564bb 100644
--- 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
+++ 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.runners.flink.translation.wrappers.streaming.state;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.HashSet;
@@ -104,13 +103,7 @@ import org.joda.time.Instant;
   "rawtypes", // TODO(https://github.com/apache/beam/issues/20447)
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class FlinkStateInternals<K> implements StateInternals {
+public final class FlinkStateInternals<K> implements StateInternals {
 
   private static final StateNamespace globalWindowNamespace =
       StateNamespaces.window(GlobalWindow.Coder.INSTANCE, 
GlobalWindow.INSTANCE);
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkStreamingPortablePipelineTranslator.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkStreamingPortablePipelineTranslator.java
index 133693ec8df..622a7c41e8d 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkStreamingPortablePipelineTranslator.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkStreamingPortablePipelineTranslator.java
@@ -26,7 +26,6 @@ import static 
org.apache.beam.sdk.util.construction.ExecutableStageTranslation.g
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.auto.service.AutoService;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -131,13 +130,7 @@ import org.apache.flink.util.OutputTag;
   "keyfor",
   "nullness"
 }) // TODO(https://github.com/apache/beam/issues/20497)
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class FlinkStreamingPortablePipelineTranslator
+public final class FlinkStreamingPortablePipelineTranslator
     implements FlinkPortablePipelineTranslator<
         FlinkStreamingPortablePipelineTranslator.StreamingTranslationContext> {
 
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/UnboundedSourceWrapper.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/UnboundedSourceWrapper.java
index c5d9b8241ac..5f1630b7a0f 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/UnboundedSourceWrapper.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/UnboundedSourceWrapper.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.runners.flink.translation.wrappers.streaming.io;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -67,13 +66,8 @@ import org.slf4j.LoggerFactory;
   "rawtypes", // TODO(https://github.com/apache/beam/issues/20447)
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class UnboundedSourceWrapper<OutputT, CheckpointMarkT extends 
UnboundedSource.CheckpointMark>
+public final class UnboundedSourceWrapper<
+        OutputT, CheckpointMarkT extends UnboundedSource.CheckpointMark>
     extends 
RichParallelSourceFunction<WindowedValue<ValueWithRecordId<OutputT>>>
     implements BeamStoppableFunction,
         CheckpointListener,
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/source/FlinkSourceSplitEnumerator.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/source/FlinkSourceSplitEnumerator.java
index ed20c7fa525..b3ae5b98862 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/source/FlinkSourceSplitEnumerator.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/source/FlinkSourceSplitEnumerator.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.runners.flink.translation.wrappers.streaming.io.source;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -40,13 +39,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /** Splits a Beam source and assigns its splits to Flink source readers 
round-robin. */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class FlinkSourceSplitEnumerator<T>
+public final class FlinkSourceSplitEnumerator<T>
     implements SplitEnumerator<FlinkSourceSplit<T>, 
FlinkSourceEnumeratorState<T>> {
   private static final Logger LOG = 
LoggerFactory.getLogger(FlinkSourceSplitEnumerator.class);
 
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/source/LazyFlinkSourceSplitEnumerator.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/source/LazyFlinkSourceSplitEnumerator.java
index f298e6534b0..95d789178c0 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/source/LazyFlinkSourceSplitEnumerator.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/io/source/LazyFlinkSourceSplitEnumerator.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.runners.flink.translation.wrappers.streaming.io.source;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -35,13 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /** Splits a bounded Beam source and assigns one split for each reader 
request. */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class LazyFlinkSourceSplitEnumerator<T>
+public final class LazyFlinkSourceSplitEnumerator<T>
     implements SplitEnumerator<FlinkSourceSplit<T>, 
FlinkSourceEnumeratorState<T>> {
   private static final Logger LOG = 
LoggerFactory.getLogger(LazyFlinkSourceSplitEnumerator.class);
 
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/stableinput/BufferingDoFnRunner.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/stableinput/BufferingDoFnRunner.java
index 428ab09f598..46aa1ee9258 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/stableinput/BufferingDoFnRunner.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/stableinput/BufferingDoFnRunner.java
@@ -17,7 +17,6 @@
  */
 package 
org.apache.beam.runners.flink.translation.wrappers.streaming.stableinput;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -57,13 +56,7 @@ import org.joda.time.Instant;
   "rawtypes", // TODO(https://github.com/apache/beam/issues/20447)
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class BufferingDoFnRunner<InputT, OutputT> implements 
DoFnRunner<InputT, OutputT> {
+public final class BufferingDoFnRunner<InputT, OutputT> implements 
DoFnRunner<InputT, OutputT> {
 
   public static <InputT, OutputT> BufferingDoFnRunner<InputT, OutputT> create(
       DoFnRunner<InputT, OutputT> doFnRunner,
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/stableinput/KeyedBufferingElementsHandler.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/stableinput/KeyedBufferingElementsHandler.java
index 1f26c23209d..7c2ac9f9716 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/stableinput/KeyedBufferingElementsHandler.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/stableinput/KeyedBufferingElementsHandler.java
@@ -17,7 +17,6 @@
  */
 package 
org.apache.beam.runners.flink.translation.wrappers.streaming.stableinput;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -32,13 +31,7 @@ import 
org.apache.flink.runtime.state.VoidNamespaceSerializer;
 @SuppressWarnings({
   "rawtypes" // TODO(https://github.com/apache/beam/issues/20447)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class KeyedBufferingElementsHandler implements BufferingElementsHandler 
{
+public final class KeyedBufferingElementsHandler implements 
BufferingElementsHandler {
 
   static KeyedBufferingElementsHandler create(
       KeyedStateBackend backend, ListStateDescriptor<BufferedElement> 
stateDescriptor)
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
index ce8dff37b0e..e2d1217d65b 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
@@ -17,7 +17,6 @@
  */
 package org.apache.beam.runners.flink.translation.wrappers.streaming.state;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.HashSet;
@@ -104,13 +103,7 @@ import org.joda.time.Instant;
   "rawtypes", // TODO(https://github.com/apache/beam/issues/20447)
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class FlinkStateInternals<K> implements StateInternals {
+public final class FlinkStateInternals<K> implements StateInternals {
 
   private static final StateNamespace globalWindowNamespace =
       StateNamespaces.window(GlobalWindow.Coder.INSTANCE, 
GlobalWindow.INSTANCE);
diff --git 
a/runners/java-fn-execution/src/main/java/org/apache/beam/runners/fnexecution/control/DefaultJobBundleFactory.java
 
b/runners/java-fn-execution/src/main/java/org/apache/beam/runners/fnexecution/control/DefaultJobBundleFactory.java
index eb8dca84261..4a1adccd4e6 100644
--- 
a/runners/java-fn-execution/src/main/java/org/apache/beam/runners/fnexecution/control/DefaultJobBundleFactory.java
+++ 
b/runners/java-fn-execution/src/main/java/org/apache/beam/runners/fnexecution/control/DefaultJobBundleFactory.java
@@ -18,7 +18,6 @@
 package org.apache.beam.runners.fnexecution.control;
 
 import com.google.auto.value.AutoValue;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.IdentityHashMap;
 import java.util.Map;
@@ -97,13 +96,7 @@ import org.slf4j.LoggerFactory;
   "rawtypes", // TODO(https://github.com/apache/beam/issues/20447)
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class DefaultJobBundleFactory implements JobBundleFactory {
+public final class DefaultJobBundleFactory implements JobBundleFactory {
   private static final Logger LOG = 
LoggerFactory.getLogger(DefaultJobBundleFactory.class);
   private static final IdGenerator factoryIdGenerator = 
IdGenerators.incrementingLongs();
 
diff --git 
a/runners/jet/src/main/java/org/apache/beam/runners/jet/JetRunner.java 
b/runners/jet/src/main/java/org/apache/beam/runners/jet/JetRunner.java
index 77da05d2893..97d0e6dfbc9 100644
--- a/runners/jet/src/main/java/org/apache/beam/runners/jet/JetRunner.java
+++ b/runners/jet/src/main/java/org/apache/beam/runners/jet/JetRunner.java
@@ -24,7 +24,6 @@ import com.hazelcast.jet.Job;
 import com.hazelcast.jet.config.JobConfig;
 import com.hazelcast.jet.core.DAG;
 import com.hazelcast.map.IMap;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -48,13 +47,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /** Jet specific implementation of Beam's {@link PipelineRunner}. */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class JetRunner extends PipelineRunner<PipelineResult> {
+public final class JetRunner extends PipelineRunner<PipelineResult> {
 
   private static final Logger LOG = LoggerFactory.getLogger(JetRunner.class);
 
diff --git 
a/runners/jet/src/main/java/org/apache/beam/runners/jet/processors/AssignWindowP.java
 
b/runners/jet/src/main/java/org/apache/beam/runners/jet/processors/AssignWindowP.java
index 233266cf9fd..b177c53ccfd 100644
--- 
a/runners/jet/src/main/java/org/apache/beam/runners/jet/processors/AssignWindowP.java
+++ 
b/runners/jet/src/main/java/org/apache/beam/runners/jet/processors/AssignWindowP.java
@@ -21,7 +21,6 @@ import com.hazelcast.function.SupplierEx;
 import com.hazelcast.jet.core.AbstractProcessor;
 import com.hazelcast.jet.core.Processor;
 import com.hazelcast.jet.core.ResettableSingletonTraverser;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
 import javax.annotation.Nonnull;
 import org.apache.beam.runners.jet.Utils;
@@ -44,13 +43,7 @@ import org.joda.time.Instant;
   "nullness",
   "keyfor"
 }) // TODO(https://github.com/apache/beam/issues/20497)
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class AssignWindowP<T> extends AbstractProcessor {
+public final class AssignWindowP<T> extends AbstractProcessor {
 
   @SuppressWarnings({"FieldCanBeLocal", "unused"})
   private final String ownerId; // do not remove, useful for debugging
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/SparkBeamMetricSource.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/SparkBeamMetricSource.java
index bd93ee02339..c49094c695b 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/SparkBeamMetricSource.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/SparkBeamMetricSource.java
@@ -18,20 +18,13 @@
 package org.apache.beam.runners.spark.metrics;
 
 import com.codahale.metrics.MetricRegistry;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import org.apache.spark.metrics.source.Source;
 
 /**
  * A Spark {@link Source} that is tailored to expose a {@link 
SparkBeamMetric}, wrapping an
  * underlying {@link org.apache.beam.sdk.metrics.MetricResults} instance.
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class SparkBeamMetricSource implements Source {
+public final class SparkBeamMetricSource implements Source {
   private static final String METRIC_NAME = "Metrics";
 
   private final String name;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/sink/CsvSink.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/sink/CsvSink.java
index 23635267fda..e24e7b988ca 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/sink/CsvSink.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/sink/CsvSink.java
@@ -18,7 +18,6 @@
 package org.apache.beam.runners.spark.metrics.sink;
 
 import com.codahale.metrics.MetricRegistry;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Properties;
 import org.apache.beam.runners.spark.metrics.WithMetricsSupport;
 import org.apache.spark.SecurityManager;
@@ -37,13 +36,7 @@ import org.apache.spark.metrics.sink.Sink;
  * "spark.metrics.conf.*.sink.csv.unit"=seconds
  * }</pre>
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class CsvSink implements Sink {
+public final class CsvSink implements Sink {
 
   // Initialized reflectively as done by Spark's MetricsSystem
   private final org.apache.spark.metrics.sink.CsvSink delegate;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/sink/GraphiteSink.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/sink/GraphiteSink.java
index 7ffeb723400..c25d8c5ac29 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/sink/GraphiteSink.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/metrics/sink/GraphiteSink.java
@@ -18,7 +18,6 @@
 package org.apache.beam.runners.spark.metrics.sink;
 
 import com.codahale.metrics.MetricRegistry;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Properties;
 import org.apache.beam.runners.spark.metrics.WithMetricsSupport;
 import org.apache.spark.SecurityManager;
@@ -40,13 +39,7 @@ import org.apache.spark.metrics.sink.Sink;
  * 
"spark.metrics.conf.*.sink.graphite.regex"="<optional_regex_to_send_matching_metrics>"
  * }</pre>
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class GraphiteSink implements Sink {
+public final class GraphiteSink implements Sink {
 
   // Initialized reflectively as done by Spark's MetricsSystem
   private final org.apache.spark.metrics.sink.GraphiteSink delegate;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/SparkBeamMetricSource.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/SparkBeamMetricSource.java
index 149e132c56b..b19be4a8ff7 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/SparkBeamMetricSource.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/SparkBeamMetricSource.java
@@ -18,20 +18,13 @@
 package org.apache.beam.runners.spark.structuredstreaming.metrics;
 
 import com.codahale.metrics.MetricRegistry;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import org.apache.spark.metrics.source.Source;
 
 /**
  * A Spark {@link Source} that is tailored to expose a {@link 
SparkBeamMetric}, wrapping an
  * underlying {@link org.apache.beam.sdk.metrics.MetricResults} instance.
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class SparkBeamMetricSource implements Source {
+public final class SparkBeamMetricSource implements Source {
   private final String name;
 
   private final MetricRegistry metricRegistry = new MetricRegistry();
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/sink/CodahaleCsvSink.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/sink/CodahaleCsvSink.java
index b46287acf6f..905916682ea 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/sink/CodahaleCsvSink.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/sink/CodahaleCsvSink.java
@@ -18,7 +18,6 @@
 package org.apache.beam.runners.spark.structuredstreaming.metrics.sink;
 
 import com.codahale.metrics.MetricRegistry;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Properties;
 import 
org.apache.beam.runners.spark.structuredstreaming.metrics.WithMetricsSupport;
 import org.apache.spark.SecurityManager;
@@ -37,13 +36,7 @@ import org.apache.spark.metrics.sink.Sink;
  * "spark.metrics.conf.*.sink.csv.unit"=seconds
  * }</pre>
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class CodahaleCsvSink implements Sink {
+public final class CodahaleCsvSink implements Sink {
 
   // Initialized reflectively as done by Spark's MetricsSystem
   private final org.apache.spark.metrics.sink.CsvSink delegate;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/sink/CodahaleGraphiteSink.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/sink/CodahaleGraphiteSink.java
index 93231a758a3..2da663ad20d 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/sink/CodahaleGraphiteSink.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/structuredstreaming/metrics/sink/CodahaleGraphiteSink.java
@@ -18,7 +18,6 @@
 package org.apache.beam.runners.spark.structuredstreaming.metrics.sink;
 
 import com.codahale.metrics.MetricRegistry;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Properties;
 import 
org.apache.beam.runners.spark.structuredstreaming.metrics.WithMetricsSupport;
 import org.apache.spark.SecurityManager;
@@ -40,13 +39,7 @@ import org.apache.spark.metrics.sink.Sink;
  * 
"spark.metrics.conf.*.sink.graphite.regex"="<optional_regex_to_send_matching_metrics>"
  * }</pre>
  */
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class CodahaleGraphiteSink implements Sink {
+public final class CodahaleGraphiteSink implements Sink {
 
   // Initialized reflectively as done by Spark's MetricsSystem
   private final org.apache.spark.metrics.sink.GraphiteSink delegate;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkBatchPortablePipelineTranslator.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkBatchPortablePipelineTranslator.java
index 2590fb0f8d5..540c6d2ce0f 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkBatchPortablePipelineTranslator.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkBatchPortablePipelineTranslator.java
@@ -26,7 +26,6 @@ import static 
org.apache.beam.runners.fnexecution.translation.PipelineTranslator
 import static 
org.apache.beam.runners.fnexecution.translation.PipelineTranslatorUtils.instantiateCoder;
 
 import com.google.auto.service.AutoService;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.HashMap;
@@ -78,13 +77,7 @@ import scala.Tuple2;
   "rawtypes", // TODO(https://github.com/apache/beam/issues/20447)
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class SparkBatchPortablePipelineTranslator
+public final class SparkBatchPortablePipelineTranslator
     implements SparkPortablePipelineTranslator<SparkTranslationContext> {
 
   private final ImmutableMap<String, PTransformTranslator> 
urnToTransformTranslator;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkDatasetPortablePipelineTranslator.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkDatasetPortablePipelineTranslator.java
index 8aa11037139..4eaf97fa50a 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkDatasetPortablePipelineTranslator.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkDatasetPortablePipelineTranslator.java
@@ -25,7 +25,6 @@ import static 
org.apache.beam.runners.fnexecution.translation.PipelineTranslator
 import static 
org.apache.beam.runners.fnexecution.translation.PipelineTranslatorUtils.hasUnboundedPCollections;
 import static org.apache.spark.sql.functions.col;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -82,13 +81,7 @@ import scala.Tuple2;
   "unchecked",
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class SparkDatasetPortablePipelineTranslator
+public final class SparkDatasetPortablePipelineTranslator
     implements SparkPortablePipelineTranslator<SparkDatasetTranslationContext> 
{
 
   private final ImmutableMap<String, PTransformTranslator> 
urnToTransformTranslator;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkStreamingPortablePipelineTranslator.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkStreamingPortablePipelineTranslator.java
index dbe28ca2e23..7bfad22d9a5 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkStreamingPortablePipelineTranslator.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/translation/SparkStreamingPortablePipelineTranslator.java
@@ -24,7 +24,6 @@ import static 
org.apache.beam.runners.fnexecution.translation.PipelineTranslator
 import static 
org.apache.beam.runners.fnexecution.translation.PipelineTranslatorUtils.getWindowedValueCoder;
 import static 
org.apache.beam.runners.fnexecution.translation.PipelineTranslatorUtils.getWindowingStrategy;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -73,13 +72,7 @@ import scala.collection.JavaConverters;
   "rawtypes", // TODO(https://github.com/apache/beam/issues/20447)
   "nullness" // TODO(https://github.com/apache/beam/issues/20497)
 })
-@SuppressFBWarnings(
-    value = "CT_CONSTRUCTOR_THROW",
-    justification =
-        "Pre-existing finding, not triaged yet."
-            + " Making the class final or moving the throwing code"
-            + " into a static factory method may fix it.")
-public class SparkStreamingPortablePipelineTranslator
+public final class SparkStreamingPortablePipelineTranslator
     implements 
SparkPortablePipelineTranslator<SparkStreamingTranslationContext> {
 
   private final ImmutableMap<String, PTransformTranslator> 
urnToTransformTranslator;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Sample.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Sample.java
index 0d2f35a5a01..e5c18afb9e4 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Sample.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Sample.java
@@ -19,7 +19,6 @@ package org.apache.beam.sdk.transforms;
 
 import static 
org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.base.Preconditions.checkArgument;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -292,13 +291,7 @@ public class Sample {
    *
    * @param <T> the type of the elements
    */
-  @SuppressFBWarnings(
-      value = "CT_CONSTRUCTOR_THROW",
-      justification =
-          "Pre-existing finding, not triaged yet."
-              + " Making the class final or moving the throwing code"
-              + " into a static factory method may fix it.")
-  public static class FixedSizedSampleFn<T>
+  public static final class FixedSizedSampleFn<T>
       extends CombineFn<
           T, Top.BoundedHeap<KV<Integer, T>, 
SerializableComparator<KV<Integer, T>>>, Iterable<T>> {
     private final int sampleSize;

Reply via email to