Reify { public static <T> PTransform<PCollection<T>, PCollection<TimestampedValue<T>>> timestamps() { return new Timestamp<>(); } private  Reify(); static PTransform<PCollection<T>, PCollection<TimestampedValue<T>>> timestamps(); static PTransform<PCollection<KV<K, V>>, PCollection<KV<K, TimestampedValue<V>>>> timestampsInValue(); static PTransform<PCollection<T>, PCollection<ValueInSingleWindow<T>>> windows(); static PTransform<PCollection<KV<K, V>>, PCollection<KV<K, ValueInSingleWindow<V>>>> windowsInValue(); static PTransform<PCollection<KV<K, TimestampedValue<V>>>, PCollection<KV<K, V>>> extractTimestampsFromValues(); static PTransform<PCollection<K>, PCollection<KV<K, V>>> viewAsValues(
      PCollectionView<V> view, Coder<V> coder); static PTransform<PBegin, PCollection<V>> viewInGlobalWindow(
      PCollectionView<V> view, Coder<V> coder);  }
@Test @Category(NeedsRunner.class) public void timestampsSucceeds() { PCollection<String> timestamped = pipeline.apply( Create.timestamped( TimestampedValue.of("foo", new Instant(0L)), TimestampedValue.of("bar", new Instant(1L)))); PCollection<TimestampedValue<String>> reified = timestamped.apply(Reify.timestamps()); PAssert.that(reified) .containsInAnyOrder( TimestampedValue.of("foo", new Instant(0)), TimestampedValue.of("bar", new Instant(1))); pipeline.run(); }