Repository: incubator-beam Updated Branches: refs/heads/master 6b408b2a3 -> e3f2d9564
Stop nesting Nullable coders A single layer of nullable coders is sufficient to safely encode possibly-null values. This allows use of NullableCoder#of to wrap any coder, without duplicating null-safety logic applied by NullableCoder. This change is not update compatible. Fixes BEAM-44 Project: http://git-wip-us.apache.org/repos/asf/incubator-beam/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-beam/commit/b74725b4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-beam/tree/b74725b4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-beam/diff/b74725b4 Branch: refs/heads/master Commit: b74725b4e455bacbe89569171dbd69d9229c91a7 Parents: 6b408b2 Author: Thomas Groh <tg...@google.com> Authored: Wed Apr 6 10:07:29 2016 -0700 Committer: Davor Bonaci <da...@google.com> Committed: Wed Apr 6 10:25:42 2016 -0700 ---------------------------------------------------------------------- .../com/google/cloud/dataflow/sdk/coders/NullableCoder.java | 3 +++ .../google/cloud/dataflow/sdk/coders/NullableCoderTest.java | 7 +++++++ 2 files changed, 10 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/b74725b4/sdks/java/core/src/main/java/com/google/cloud/dataflow/sdk/coders/NullableCoder.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/main/java/com/google/cloud/dataflow/sdk/coders/NullableCoder.java b/sdks/java/core/src/main/java/com/google/cloud/dataflow/sdk/coders/NullableCoder.java index c062142..fc12a03 100644 --- a/sdks/java/core/src/main/java/com/google/cloud/dataflow/sdk/coders/NullableCoder.java +++ b/sdks/java/core/src/main/java/com/google/cloud/dataflow/sdk/coders/NullableCoder.java @@ -43,6 +43,9 @@ import javax.annotation.Nullable; */ public class NullableCoder<T> extends StandardCoder<T> { public static <T> NullableCoder<T> of(Coder<T> valueCoder) { + if (valueCoder instanceof NullableCoder) { + return (NullableCoder<T>) valueCoder; + } return new NullableCoder<>(valueCoder); } http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/b74725b4/sdks/java/core/src/test/java/com/google/cloud/dataflow/sdk/coders/NullableCoderTest.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/test/java/com/google/cloud/dataflow/sdk/coders/NullableCoderTest.java b/sdks/java/core/src/test/java/com/google/cloud/dataflow/sdk/coders/NullableCoderTest.java index 8f9bd84..7628dff 100644 --- a/sdks/java/core/src/test/java/com/google/cloud/dataflow/sdk/coders/NullableCoderTest.java +++ b/sdks/java/core/src/test/java/com/google/cloud/dataflow/sdk/coders/NullableCoderTest.java @@ -18,8 +18,10 @@ package com.google.cloud.dataflow.sdk.coders; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.theInstance; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import com.google.cloud.dataflow.sdk.testing.CoderProperties; @@ -130,4 +132,9 @@ public class NullableCoderTest { TEST_CODER.decode(input, Coder.Context.OUTER); } + @Test + public void testNestedNullableCoder() { + NullableCoder<Double> coder = NullableCoder.of(DoubleCoder.of()); + assertThat(NullableCoder.of(coder), theInstance(coder)); + } }