You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by ke...@apache.org on 2016/06/30 16:47:22 UTC

[1/2] incubator-beam git commit: Add FindBugs analysis to the build

Repository: incubator-beam
Updated Branches:
  refs/heads/master 12b6ff8d7 -> ef2c51400


Add FindBugs analysis to the build

FindBugs is a static analysis tool which looks for common
coding issues in Java code. See: http://findbugs.sourceforge.net/

This commit integrates FindBugs into the build process using
findbugs-maven-plugin, and subscribes java-sdk-all for analysis.

The codebase currently generates many Findbugs issues, which have
been added in the findbugs-filter.xml file as a baseline. These issues
should be triaged and fixed over time.

There will be some cases where we choose to ignore issues reported by
FindBugs. In such a case, the issue should be suppressed in code via
the @SuppressFBWarnings annotation with a comment describing why it
is suppressed.


Project: http://git-wip-us.apache.org/repos/asf/incubator-beam/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-beam/commit/58a029a0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-beam/tree/58a029a0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-beam/diff/58a029a0

Branch: refs/heads/master
Commit: 58a029a06aea1030279e5da8f9fa3114f456c1db
Parents: 9d6d622
Author: Scott Wegner <sw...@google.com>
Authored: Mon May 16 15:44:45 2016 -0700
Committer: Scott Wegner <sw...@google.com>
Committed: Wed Jun 29 16:17:58 2016 -0700

----------------------------------------------------------------------
 examples/java/pom.xml                           |   2 +-
 pom.xml                                         |  56 +-
 runners/core-java/pom.xml                       |   4 +-
 runners/direct-java/pom.xml                     |   2 +-
 runners/google-cloud-dataflow-java/pom.xml      |   2 +-
 .../src/main/resources/beam/findbugs-filter.xml | 561 +++++++++++++++++++
 sdks/java/core/pom.xml                          |   7 +-
 .../java/org/apache/beam/sdk/util/ZipFiles.java |  11 +
 sdks/java/io/google-cloud-platform/pom.xml      |  14 +-
 sdks/java/io/hdfs/pom.xml                       |   2 +-
 sdks/java/io/kafka/pom.xml                      |   2 +-
 11 files changed, 651 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/examples/java/pom.xml
----------------------------------------------------------------------
diff --git a/examples/java/pom.xml b/examples/java/pom.xml
index 3b67797..6173ce3 100644
--- a/examples/java/pom.xml
+++ b/examples/java/pom.xml
@@ -240,7 +240,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 6848973..6f1eaac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -122,8 +122,8 @@
     <grpc.version>0.12.0</grpc.version>
     <hamcrest.version>1.3</hamcrest.version>
     <jackson.version>2.7.2</jackson.version>
+    <findbugs.version>3.0.1</findbugs.version>
     <joda.version>2.4</joda.version>
-    <jsr305.version>3.0.1</jsr305.version>
     <junit.version>4.11</junit.version>
     <mockito.version>1.9.5</mockito.version>
     <protobuf.version>3.0.0-beta-1</protobuf.version>
@@ -338,6 +338,10 @@
             <groupId>com.google.guava</groupId>
             <artifactId>guava-jdk5</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -362,6 +366,10 @@
             <groupId>com.google.guava</groupId>
             <artifactId>guava-jdk5</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -469,20 +477,32 @@
 
       <dependency>
         <groupId>com.google.code.findbugs</groupId>
-        <artifactId>jsr305</artifactId>
-        <version>${jsr305.version}</version>
+        <artifactId>annotations</artifactId>
+        <version>${findbugs.version}</version>
       </dependency>
 
       <dependency>
         <groupId>com.google.cloud.bigdataoss</groupId>
         <artifactId>gcsio</artifactId>
         <version>${google-cloud-bigdataoss.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
 
       <dependency>
         <groupId>com.google.cloud.bigdataoss</groupId>
         <artifactId>util</artifactId>
         <version>${google-cloud-bigdataoss.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
 
       <dependency>
@@ -608,6 +628,12 @@
         <artifactId>guava-testlib</artifactId>
         <version>${guava.version}</version>
         <scope>test</scope>
+        <exclusions>
+          <exclusion>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
 
       <dependency>
@@ -911,6 +937,30 @@
             </execution>
           </executions>
         </plugin>
+
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>findbugs-maven-plugin</artifactId>
+          <version>${findbugs.version}</version>
+          <dependencies>
+            <dependency>
+              <groupId>org.apache.beam</groupId>
+              <artifactId>beam-sdks-java-build-tools</artifactId>
+              <version>${project.version}</version>
+            </dependency>
+          </dependencies>
+          <configuration>
+            <excludeFilterFile>beam/findbugs-filter.xml</excludeFilterFile>
+          </configuration>
+          <executions>
+            <execution>
+              <phase>test</phase>
+              <goals>
+                <goal>check</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
       </plugins>
     </pluginManagement>
 

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/runners/core-java/pom.xml
----------------------------------------------------------------------
diff --git a/runners/core-java/pom.xml b/runners/core-java/pom.xml
index 3a91f7e..c7eea4a 100644
--- a/runners/core-java/pom.xml
+++ b/runners/core-java/pom.xml
@@ -199,7 +199,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <dependency>
@@ -216,7 +216,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/runners/direct-java/pom.xml
----------------------------------------------------------------------
diff --git a/runners/direct-java/pom.xml b/runners/direct-java/pom.xml
index 82c1e15..2e45e1d 100644
--- a/runners/direct-java/pom.xml
+++ b/runners/direct-java/pom.xml
@@ -276,7 +276,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/runners/google-cloud-dataflow-java/pom.xml
----------------------------------------------------------------------
diff --git a/runners/google-cloud-dataflow-java/pom.xml b/runners/google-cloud-dataflow-java/pom.xml
index 38ffa49..76e5f80 100644
--- a/runners/google-cloud-dataflow-java/pom.xml
+++ b/runners/google-cloud-dataflow-java/pom.xml
@@ -363,7 +363,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml
----------------------------------------------------------------------
diff --git a/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml b/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml
new file mode 100644
index 0000000..3f15835
--- /dev/null
+++ b/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml
@@ -0,0 +1,561 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<FindBugsFilter>
+  <!-- Ignored bug categories. Bugs in these categories should not block the build. -->
+  <Bug category="I18N"/>
+  <Bug pattern="DM_STRING_CTOR"/>
+  <Bug pattern="SE_NO_SERIALVERSIONID"/>
+
+
+  <!--
+          Baseline issues below. No new issues should be added to this list. Instead, suppress
+          the issue inline using @SuppressFBWarnings and a documented reason, or (preferably) fix
+          the issue.
+        -->
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.AvroCoder"/>
+    <Field name="decoder"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.AvroCoder"/>
+    <Field name="encoder"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.AvroCoder"/>
+    <Field name="reader"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.AvroCoder"/>
+    <Field name="writer"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.AvroCoder"/>
+    <Field name="reader"/>
+    <Bug pattern="SE_BAD_FIELD_STORE"/>
+    <!--Non-serializable value stored into instance field of a serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.AvroCoder"/>
+    <Field name="writer"/>
+    <Bug pattern="SE_BAD_FIELD_STORE"/>
+    <!--Non-serializable value stored into instance field of a serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.Coder$NonDeterministicException"/>
+    <Bug pattern="NM_CLASS_NOT_EXCEPTION"/>
+    <!--Class is not derived from an Exception, even though it is named as such-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.Coder$NonDeterministicException"/>
+    <Method name="getMessage"/>
+    <Bug pattern="VA_FORMAT_STRING_USES_NEWLINE"/>
+    <!--Format string should use %n rather than \n-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.EntityCoder"/>
+    <Method name="decode"/>
+    <Bug pattern="RR_NOT_CHECKED"/>
+    <!--Method ignores results of InputStream.read()-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.JAXBCoder"/>
+    <Method name="getContext"/>
+    <Bug pattern="DC_DOUBLECHECK"/>
+    <!--Possible double check of field-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.JAXBCoder"/>
+    <Field name="jaxbContext"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.InstantCoder$1"/>
+    <Bug pattern="HE_INHERITS_EQUALS_USE_HASHCODE"/>
+    <!--Class inherits equals() and uses Object.hashCode()-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.SerializableCoder"/>
+    <Method name="equals"/>
+    <Bug pattern="NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT"/>
+    <!--equals() method does not check for null argument-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.StandardCoder"/>
+    <Method name="toString"/>
+    <Bug pattern="SBSC_USE_STRINGBUFFER_CONCATENATION"/>
+    <!--Method invokes inefficient new String(String) constructor-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.StructuralByteArray"/>
+    <Method name="getValue"/>
+    <Bug pattern="EI_EXPOSE_REP"/>
+    <!--May expose internal representation by returning reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.coders.StructuralByteArray"/>
+    <Method name="&lt;init&gt;"/>
+    <Bug pattern="EI_EXPOSE_REP2"/>
+    <!--May expose internal representation by incorporating reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.BigQueryIO$StreamingWriteFn"/>
+    <Method name="finishBundle"/>
+    <Bug pattern="WMI_WRONG_MAP_ITERATOR"/>
+    <!--Inefficient use of keySet iterator instead of entrySet iterator-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.PubsubIO$Read$Bound$PubsubBoundedReader"/>
+    <Method name="processElement"/>
+    <Bug pattern="DMI_RANDOM_USED_ONLY_ONCE"/>
+    <!--Random object created and used only once-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.PubsubUnboundedSink$WriterFn"/>
+    <Method name="publishBatch"/>
+    <Bug pattern="DLS_DEAD_LOCAL_STORE"/>
+    <!--Dead store to local variable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.Write$Bound"/>
+    <Method name="createWrite"/>
+    <Bug pattern="DLS_DEAD_LOCAL_STORE"/>
+    <!--Dead store to local variable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.range.OffsetRangeTracker"/>
+    <Field name="done"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.range.OffsetRangeTracker"/>
+    <Field name="lastRecordStart"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.range.OffsetRangeTracker"/>
+    <Field name="offsetOfLastSplitPoint"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.range.OffsetRangeTracker"/>
+    <Field name="splitPointsSeen"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.range.OffsetRangeTracker"/>
+    <Field name="startOffset"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.io.range.OffsetRangeTracker"/>
+    <Field name="stopOffset"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.options.PipelineOptionsFactory$1"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.options.PipelineOptionsFactory$2"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.options.PipelineOptionsFactory$3"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.options.PipelineOptionsFactory$4"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.options.ProxyInvocationHandler"/>
+    <Method name="&lt;init&gt;"/>
+    <Bug pattern="DM_NEXTINT_VIA_NEXTDOUBLE"/>
+    <!--Use the nextInt method of Random rather than nextDouble to generate a random integer-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.runners.DirectPipelineRunner"/>
+    <Method name="&lt;init&gt;"/>
+    <Bug pattern="DMI_RANDOM_USED_ONLY_ONCE"/>
+    <!--Random object created and used only once-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.CoderProperties"/>
+    <Field name="ALL_CONTEXTS"/>
+    <Bug pattern="MS_MUTABLE_COLLECTION_PKGPROTECT"/>
+    <!--Field is a mutable collection which should be package protected-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.PAssert$IterableAssert"/>
+    <Method name="equals"/>
+    <Bug pattern="EQ_UNUSUAL"/>
+    <!--Unusual equals method -->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.PAssert$IterableAssert"/>
+    <Field name="pipeline"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.PAssert$PCollectionContentsAssert"/>
+    <Method name="equals"/>
+    <Bug pattern="EQ_UNUSUAL"/>
+    <!--Unusual equals method-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.PAssert$PCollectionViewAssert"/>
+    <Method name="equals"/>
+    <Bug pattern="EQ_UNUSUAL"/>
+    <!--Unusual equals method-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.PAssert$SingletonAssert"/>
+    <Method name="equals"/>
+    <Bug pattern="EQ_UNUSUAL"/>
+    <!--Unusual equals method -->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.PAssert$SingletonAssert"/>
+    <Field name="pipeline"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.SerializableMatchers$SerializableArrayViaCoder"/>
+    <Field name="value"/>
+    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
+    <!--Transient field that isn't set by deserialization. -->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.testing.WindowSupplier"/>
+    <Field name="windows"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization -->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.ApproximateQuantiles$ApproximateQuantilesCombineFn"/>
+    <Method name="create"/>
+    <Bug pattern="ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL"/>
+    <!--Integral value cast to double and then passed to Math.ceil-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.ApproximateQuantiles$QuantileBuffer"/>
+    <Method name="compareTo"/>
+    <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS"/>
+    <!--Class defines compareTo(...) and uses Object.equals()-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.Create$TimestampedValues"/>
+    <Field name="elems"/>
+    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
+    <!--Transient field that isn't set by deserialization. -->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.DoFnTester"/>
+    <Field name="sideOutputTags"/>
+    <Bug pattern="URF_UNREAD_FIELD"/>
+    <!--Unread field-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.Mean$CountSum"/>
+    <Method name="equals"/>
+    <Bug pattern="FE_FLOATING_POINT_EQUALITY"/>
+    <!--Test for floating point equality-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.display.DisplayData"/>
+    <Field name="entries"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.display.DisplayData$InternalBuilder$PopulateDisplayDataException"/>
+    <Bug pattern="SIC_INNER_SHOULD_BE_STATIC"/>
+    <!--Should be a static inner class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.join.CoGbkResult$UnionValueIterator"/>
+    <Method name="hasNext"/>
+    <Bug pattern="RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN"/>
+    <!--Suspicious reference comparison of Boolean values-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.windowing.AfterDelayFromFirstElement"/>
+    <Method name="prefetchOnElement"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.windowing.AfterDelayFromFirstElement"/>
+    <Method name="prefetchShouldFire"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.transforms.windowing.AfterPane"/>
+    <Method name="prefetchShouldFire"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.AttemptAndTimeBoundedExponentialBackOff"/>
+    <Method name="reset"/>
+    <Bug pattern="UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR"/>
+    <!--Uninitialized read of field method called from constructor of superclass-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.AttemptAndTimeBoundedExponentialBackOff"/>
+    <Method name="reset"/>
+    <Bug pattern="UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR"/>
+    <!--Uninitialized read of field method called from constructor of superclass-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.AvroUtils$AvroMetadata"/>
+    <Method name="getSyncMarker"/>
+    <Bug pattern="EI_EXPOSE_REP"/>
+    <!--May expose internal representation by returning reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.BitSetCoder"/>
+    <Field name="byteArrayCoder"/>
+    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
+    <!--Transient field that isn't set by deserialization. -->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.CombineFnUtil$NonSerializableBoundedKeyedCombineFn"/>
+    <Field name="context"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.ExposedByteArrayInputStream"/>
+    <Method name="readAll"/>
+    <Bug pattern="EI_EXPOSE_REP"/>
+    <!--May expose internal representation by returning reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.ExposedByteArrayOutputStream"/>
+    <Method name="toByteArray"/>
+    <Bug pattern="EI_EXPOSE_REP"/>
+    <!--May expose internal representation by returning reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.ExposedByteArrayOutputStream"/>
+    <Method name="writeAndOwn"/>
+    <Bug pattern="EI_EXPOSE_REP2"/>
+    <!--May expose internal representation by incorporating reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.PCollectionViews$PCollectionViewBase"/>
+    <Method name="equals"/>
+    <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE"/>
+    <!--Redundant nullcheck of value known to be non-null-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.PCollectionViews$SingletonPCollectionView"/>
+    <Field name="defaultValue"/>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    <!--Inconsistent synchronization-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.PaneInfoTracker$1"/>
+    <Method name="readLater"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.PubsubClient$IncomingMessage"/>
+    <Method name="&lt;init&gt;"/>
+    <Bug pattern="EI_EXPOSE_REP2"/>
+    <!--May expose internal representation by incorporating reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.PubsubClient$IncomingMessage"/>
+    <Method name="&lt;init&gt;"/>
+    <Bug pattern="EI_EXPOSE_REP2"/>
+    <!--May expose internal representation by incorporating reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.PubsubClient$OutgoingMessage"/>
+    <Method name="&lt;init&gt;"/>
+    <Bug pattern="EI_EXPOSE_REP2"/>
+    <!--May expose internal representation by incorporating reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.ReleaseInfo"/>
+    <Method name="&lt;init&gt;"/>
+    <Bug pattern="OBL_UNSATISFIED_OBLIGATION"/>
+    <!--Method may fail to clean up stream or resource-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.SystemReduceFn"/>
+    <Method name="prefetchOnTrigger"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.TriggerContextFactory"/>
+    <Field name="activeWindows"/>
+    <Bug pattern="URF_UNREAD_FIELD"/>
+    <!--Unread field-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.TriggerRunner"/>
+    <Method name="prefetchForMerge"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.TriggerRunner"/>
+    <Method name="prefetchForValue"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.TriggerRunner"/>
+    <Method name="prefetchOnFire"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.TriggerRunner"/>
+    <Method name="prefetchShouldFire"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.ValueWithRecordId"/>
+    <Method name="getId"/>
+    <Bug pattern="EI_EXPOSE_REP"/>
+    <!--May expose internal representation by returning reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.ValueWithRecordId"/>
+    <Method name="&lt;init&gt;"/>
+    <Bug pattern="EI_EXPOSE_REP2"/>
+    <!--May expose internal representation by incorporating reference to mutable object-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.WatermarkHold"/>
+    <Field name="timerInternals"/>
+    <Bug pattern="SE_BAD_FIELD"/>
+    <!--Non-transient non-serializable instance field in serializable class-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.WatermarkHold$1"/>
+    <Method name="readLater"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.common.ReflectHelpers$1"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.common.ReflectHelpers$2"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.common.ReflectHelpers$3"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.common.ReflectHelpers$4"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.common.ReflectHelpers$5"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.common.ReflectHelpers$6"/>
+    <Method name="apply"/>
+    <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE"/>
+    <!--Parameter must be non-null but is marked as nullable-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.state.StateMerging"/>
+    <Method name="mergeBags"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.state.StateMerging"/>
+    <Method name="mergeCombiningValues"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.state.StateMerging"/>
+    <Method name="prefetchBags"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.state.StateMerging"/>
+    <Method name="prefetchCombiningValues"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.state.StateMerging"/>
+    <Method name="prefetchWatermarks"/>
+    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+    <!--Return value of method without side effect is ignored-->
+  </Match>
+  <Match>
+    <Class name="org.apache.beam.sdk.util.state.StateTags$CombiningValueStateTag"/>
+    <Method name="equals"/>
+    <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS"/>
+    <!--Class doesn't override equals in superclass-->
+  </Match>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/sdks/java/core/pom.xml
----------------------------------------------------------------------
diff --git a/sdks/java/core/pom.xml b/sdks/java/core/pom.xml
index 3b650c6..67c7fe9 100644
--- a/sdks/java/core/pom.xml
+++ b/sdks/java/core/pom.xml
@@ -234,6 +234,11 @@
         </executions>
       </plugin>
 
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>findbugs-maven-plugin</artifactId>
+      </plugin>
+
       <!-- Coverage analysis for unit tests. -->
       <plugin>
         <groupId>org.jacoco</groupId>
@@ -415,7 +420,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/sdks/java/core/src/main/java/org/apache/beam/sdk/util/ZipFiles.java
----------------------------------------------------------------------
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/util/ZipFiles.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/util/ZipFiles.java
index 038b9cb..c93e18d 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/util/ZipFiles.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/util/ZipFiles.java
@@ -40,6 +40,8 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import java.util.zip.ZipOutputStream;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
 /**
  * Functions for zipping a directory (including a subdirectory) into a ZIP-file
  * or unzipping it again.
@@ -226,6 +228,10 @@ public final class ZipFiles {
    * @throws IOException the zipping failed, e.g. because the input was not
    *     readable.
    */
+  @SuppressFBWarnings(value = "NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE",
+      justification = "File.listFiles() will return null if the File instance is not a directory. "
+          + "Null dereference is not a possibility here since we validate sourceDirectory is "
+          + "directory via sourceDirectory.isDirectory()")
   public static void zipDirectory(
       File sourceDirectory,
       OutputStream outputStream) throws IOException {
@@ -235,6 +241,7 @@ public final class ZipFiles {
         sourceDirectory.isDirectory(),
         "%s is not a valid directory",
         sourceDirectory.getAbsolutePath());
+
     ZipOutputStream zos = new ZipOutputStream(outputStream);
     for (File file : sourceDirectory.listFiles()) {
       zipDirectoryInternal(file, "", zos);
@@ -257,6 +264,10 @@ public final class ZipFiles {
    * @throws IOException the zipping failed, e.g. because the output was not
    *     writeable.
    */
+  @SuppressFBWarnings(value = "NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE",
+      justification = "File.listFiles() will return null if the File instance is not a directory. "
+          + "Null dereference is not a possibility here since we validate inputFile is directory "
+          + "via inputFile.isDirectory()")
   private static void zipDirectoryInternal(
       File inputFile,
       String directoryName,

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/sdks/java/io/google-cloud-platform/pom.xml
----------------------------------------------------------------------
diff --git a/sdks/java/io/google-cloud-platform/pom.xml b/sdks/java/io/google-cloud-platform/pom.xml
index 692ac96..c95ea71 100644
--- a/sdks/java/io/google-cloud-platform/pom.xml
+++ b/sdks/java/io/google-cloud-platform/pom.xml
@@ -112,12 +112,24 @@
       <groupId>com.google.cloud.bigtable</groupId>
       <artifactId>bigtable-protos</artifactId>
       <version>${bigtable.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>com.google.code.findbugs</groupId>
+          <artifactId>jsr305</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <dependency>
       <groupId>com.google.cloud.bigtable</groupId>
       <artifactId>bigtable-client-core</artifactId>
       <version>${bigtable.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>com.google.code.findbugs</groupId>
+          <artifactId>jsr305</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <dependency>
@@ -137,7 +149,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/sdks/java/io/hdfs/pom.xml
----------------------------------------------------------------------
diff --git a/sdks/java/io/hdfs/pom.xml b/sdks/java/io/hdfs/pom.xml
index f2c9f68..2e427b1 100644
--- a/sdks/java/io/hdfs/pom.xml
+++ b/sdks/java/io/hdfs/pom.xml
@@ -78,7 +78,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/58a029a0/sdks/java/io/kafka/pom.xml
----------------------------------------------------------------------
diff --git a/sdks/java/io/kafka/pom.xml b/sdks/java/io/kafka/pom.xml
index cc447cd..9777543 100644
--- a/sdks/java/io/kafka/pom.xml
+++ b/sdks/java/io/kafka/pom.xml
@@ -100,7 +100,7 @@
 
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
+      <artifactId>annotations</artifactId>
     </dependency>
 
     <!-- test dependencies-->


[2/2] incubator-beam git commit: This closes #357

Posted by ke...@apache.org.
This closes #357


Project: http://git-wip-us.apache.org/repos/asf/incubator-beam/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-beam/commit/ef2c5140
Tree: http://git-wip-us.apache.org/repos/asf/incubator-beam/tree/ef2c5140
Diff: http://git-wip-us.apache.org/repos/asf/incubator-beam/diff/ef2c5140

Branch: refs/heads/master
Commit: ef2c514003762cb792d387090ee006d6ed8f772d
Parents: 12b6ff8 58a029a
Author: Kenneth Knowles <kl...@google.com>
Authored: Thu Jun 30 09:45:45 2016 -0700
Committer: Kenneth Knowles <kl...@google.com>
Committed: Thu Jun 30 09:45:45 2016 -0700

----------------------------------------------------------------------
 examples/java/pom.xml                           |   2 +-
 pom.xml                                         |  56 +-
 runners/core-java/pom.xml                       |   4 +-
 runners/direct-java/pom.xml                     |   2 +-
 runners/google-cloud-dataflow-java/pom.xml      |   2 +-
 .../src/main/resources/beam/findbugs-filter.xml | 561 +++++++++++++++++++
 sdks/java/core/pom.xml                          |   7 +-
 .../java/org/apache/beam/sdk/util/ZipFiles.java |  11 +
 sdks/java/io/google-cloud-platform/pom.xml      |  14 +-
 sdks/java/io/hdfs/pom.xml                       |   2 +-
 sdks/java/io/kafka/pom.xml                      |   2 +-
 11 files changed, 651 insertions(+), 12 deletions(-)
----------------------------------------------------------------------