NonNull by default for sdk/testing

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

Branch: refs/heads/master
Commit: 3a64e9199c3f64a7e679e726e67079e93dd6cdd9
Parents: 524d824
Author: Kenneth Knowles <[email protected]>
Authored: Thu Oct 19 20:08:36 2017 -0700
Committer: Kenneth Knowles <[email protected]>
Committed: Fri Oct 20 14:51:42 2017 -0700

----------------------------------------------------------------------
 .../beam/sdk/testing/FileChecksumMatcher.java   | 41 +++++++++++++-------
 .../beam/sdk/testing/SuccessOrFailure.java      |  6 +--
 .../apache/beam/sdk/testing/TestPipeline.java   |  4 +-
 .../apache/beam/sdk/testing/WindowSupplier.java |  4 +-
 .../apache/beam/sdk/testing/package-info.java   |  5 +++
 5 files changed, 41 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java
----------------------------------------------------------------------
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java
index 5ed0525..e798841 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Pattern;
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import org.apache.beam.sdk.PipelineResult;
 import org.apache.beam.sdk.util.FluentBackoff;
 import org.apache.beam.sdk.util.NumberedShardedFile;
@@ -71,9 +72,11 @@ public class FileChecksumMatcher extends 
TypeSafeMatcher<PipelineResult>
       Pattern.compile("(?x) \\S* (?<shardnum> \\d+) -of- (?<numshards> \\d+)");
 
   private final String expectedChecksum;
-  private String actualChecksum;
   private final ShardedFile shardedFile;
 
+  /** Access via {@link #getActualChecksum()}. */
+  @Nullable private String actualChecksum;
+
   /**
    * Constructor that uses default shard template.
    *
@@ -123,20 +126,30 @@ public class FileChecksumMatcher extends 
TypeSafeMatcher<PipelineResult>
 
   @Override
   public boolean matchesSafely(PipelineResult pipelineResult) {
-    // Load output data
-    List<String> outputs;
-    try {
-      outputs = shardedFile.readFilesWithRetries(Sleeper.DEFAULT, 
BACK_OFF_FACTORY.backoff());
-    } catch (Exception e) {
-      throw new RuntimeException(
-          String.format("Failed to read from: %s", shardedFile), e);
-    }
+    return getActualChecksum().equals(expectedChecksum);
+  }
 
-    // Verify outputs. Checksum is computed using SHA-1 algorithm
-    actualChecksum = computeHash(outputs);
-    LOG.debug("Generated checksum: {}", actualChecksum);
+  /**
+   * Computes a checksum of the sharded file specified in the constructor. Not 
safe to call until
+   * the writing is complete.
+   */
+  private String getActualChecksum() {
+    if (actualChecksum == null) {
+      // Load output data
+      List<String> outputs;
+      try {
+        outputs = shardedFile.readFilesWithRetries(Sleeper.DEFAULT, 
BACK_OFF_FACTORY.backoff());
+      } catch (Exception e) {
+        throw new RuntimeException(
+            String.format("Failed to read from: %s", shardedFile), e);
+      }
+
+      // Verify outputs. Checksum is computed using SHA-1 algorithm
+      actualChecksum = computeHash(outputs);
+      LOG.debug("Generated checksum: {}", actualChecksum);
+    }
 
-    return actualChecksum.equals(expectedChecksum);
+    return actualChecksum;
   }
 
   private String computeHash(@Nonnull List<String> strs) {
@@ -163,7 +176,7 @@ public class FileChecksumMatcher extends 
TypeSafeMatcher<PipelineResult>
   public void describeMismatchSafely(PipelineResult pResult, Description 
description) {
     description
         .appendText("was (")
-        .appendText(actualChecksum)
+        .appendText(getActualChecksum())
         .appendText(")");
   }
 }

http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java
----------------------------------------------------------------------
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java
index 79e83d6..a63bbcc 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java
@@ -31,10 +31,10 @@ import org.apache.beam.sdk.coders.SerializableCoder;
 @DefaultCoder(SerializableCoder.class)
 public final class SuccessOrFailure implements Serializable {
   private static final class SerializableThrowable implements Serializable {
-    private final Throwable throwable;
-    private final StackTraceElement[] stackTrace;
+    @Nullable private final Throwable throwable;
+    @Nullable private final StackTraceElement[] stackTrace;
 
-    private SerializableThrowable(Throwable t) {
+    private SerializableThrowable(@Nullable Throwable t) {
       this.throwable = t;
       this.stackTrace = (t == null) ? null : t.getStackTrace();
     }

http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java
----------------------------------------------------------------------
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java
index be2f193..f2729e9 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java
@@ -142,7 +142,8 @@ public class TestPipeline extends Pipeline implements 
TestRule {
 
   private static class PipelineAbandonedNodeEnforcement extends 
PipelineRunEnforcement {
 
-    private List<TransformHierarchy.Node> runVisitedNodes;
+    // Null until the pipeline has been run
+    @Nullable private List<TransformHierarchy.Node> runVisitedNodes;
 
     private final Predicate<TransformHierarchy.Node> isPAssertNode =
         new Predicate<TransformHierarchy.Node>() {
@@ -172,6 +173,7 @@ public class TestPipeline extends Pipeline implements 
TestRule {
 
     private PipelineAbandonedNodeEnforcement(final TestPipeline pipeline) {
       super(pipeline);
+      runVisitedNodes = null;
     }
 
     private List<TransformHierarchy.Node> recordPipelineNodes(final Pipeline 
pipeline) {

http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java
----------------------------------------------------------------------
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java
index 96091ef..953dd27 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import java.io.Serializable;
 import java.util.Collection;
+import javax.annotation.Nullable;
 import org.apache.beam.sdk.coders.Coder;
 import org.apache.beam.sdk.coders.CoderException;
 import org.apache.beam.sdk.transforms.windowing.BoundedWindow;
@@ -36,7 +37,8 @@ final class WindowSupplier implements 
Supplier<Collection<BoundedWindow>>, Seria
   private final Coder<? extends BoundedWindow> coder;
   private final Collection<byte[]> encodedWindows;
 
-  private transient Collection<BoundedWindow> windows;
+  /** Access via {@link #get()}.*/
+  @Nullable private transient Collection<BoundedWindow> windows;
 
   public static <W extends BoundedWindow> WindowSupplier of(Coder<W> coder, 
Iterable<W> windows) {
     ImmutableSet.Builder<byte[]> windowsBuilder = ImmutableSet.builder();

http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java
----------------------------------------------------------------------
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java
index e66677d..6a28529 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java
@@ -19,4 +19,9 @@
  * Defines utilities for unit testing Apache Beam pipelines. The tests for the 
{@code PTransform}s
  * and examples included in the Apache Beam SDK provide examples of using 
these utilities.
  */
+@DefaultAnnotation(NonNull.class)
 package org.apache.beam.sdk.testing;
+
+import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
+import edu.umd.cs.findbugs.annotations.NonNull;
+

Reply via email to