Repository: incubator-beam
Updated Branches:
  refs/heads/master a5d343b23 -> 65db44ce6


Improve the inheritance API for OutputTimeFn

Previously, OutputTimeFn.Defaults enforced that any subclass *could not*
return true for dependsOnlyOnWindow(), to encourage such subclasses to
extend OutputTimeFn.DependsOnlyOnWindow. Unfortunately, this is at odds
with compositional style, where all methods need to be forwarded.

Further, OutputTimeFn itself was only instantiable via one of these
subclasses, so there was no way to implement a proper forwarding.

After this change, the API from OutputTimeFn to its subclasses is
that of a simpler abstract superclass, and Defaults no longer restricts
its subclasses.

Note that we intend to remove OutputTimeFn as a userland function anyhow,
replacing it with an enum and OutputTimeFn implementations in runners/core,
so this is low risk. It is just to unblock some current work.


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

Branch: refs/heads/master
Commit: a20786d42b8707504bfc1ffc71f8af71843cfcd6
Parents: a5d343b
Author: Kenneth Knowles <[email protected]>
Authored: Tue May 24 13:06:31 2016 -0700
Committer: Kenneth Knowles <[email protected]>
Committed: Tue May 24 13:06:31 2016 -0700

----------------------------------------------------------------------
 .../beam/sdk/transforms/windowing/OutputTimeFn.java      | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/a20786d4/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/windowing/OutputTimeFn.java
----------------------------------------------------------------------
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/windowing/OutputTimeFn.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/windowing/OutputTimeFn.java
index 7cf870a..497a6fb 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/windowing/OutputTimeFn.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/windowing/OutputTimeFn.java
@@ -52,10 +52,7 @@ import java.util.Objects;
 @Experimental(Experimental.Kind.OUTPUT_TIME)
 public abstract class OutputTimeFn<W extends BoundedWindow> implements 
Serializable {
 
-  /**
-   * Private constructor to prevent subclassing other than provided base 
classes.
-   */
-  private OutputTimeFn() { }
+  protected OutputTimeFn() { }
 
   /**
    * Returns the output timestamp to use for data depending on the given
@@ -179,11 +176,11 @@ public abstract class OutputTimeFn<W extends 
BoundedWindow> implements Serializa
     /**
      * {@inheritDoc}
      *
-     * @return {@code false}. An {@link OutputTimeFn} that depends only on the 
window should extend
-     * {@link OutputTimeFn.DependsOnlyOnWindow}.
+     * @return {@code false} by default. An {@link OutputTimeFn} that is known 
to depend only on the
+     * window should extend {@link OutputTimeFn.DependsOnlyOnWindow}.
      */
     @Override
-    public final boolean dependsOnlyOnWindow() {
+    public boolean dependsOnlyOnWindow() {
       return false;
     }
 

Reply via email to