diff --git a/akka-docs-dev/rst/java/code/docs/MigrationsJava.java b/akka-docs-dev/rst/java/code/docs/MigrationsJava.java index af191b552a..93ec165c7a 100644 --- a/akka-docs-dev/rst/java/code/docs/MigrationsJava.java +++ b/akka-docs-dev/rst/java/code/docs/MigrationsJava.java @@ -78,22 +78,22 @@ public class MigrationsJava { //#graph-create-2 FlowGraph.create(builder -> { //... - return new SourceShape<>(outlet); + return SourceShape.of(outlet); }); FlowGraph.create(builder -> { //... - return new SinkShape<>(inlet); + return SinkShape.of(inlet); }); FlowGraph.create(builder -> { //... - return new FlowShape<>(inlet, outlet); + return FlowShape.of(inlet, outlet); }); FlowGraph.create(builder -> { //... - return new BidiShape<>(inlet1, outlet1, inlet2, outlet2); + return BidiShape.of(inlet1, outlet1, inlet2, outlet2); }); //#graph-create-2 } diff --git a/akka-stream/src/main/scala/akka/stream/Shape.scala b/akka-stream/src/main/scala/akka/stream/Shape.scala index b47774cfa1..456c8eef41 100644 --- a/akka-stream/src/main/scala/akka/stream/Shape.scala +++ b/akka-stream/src/main/scala/akka/stream/Shape.scala @@ -206,6 +206,11 @@ final case class SourceShape[+T](outlet: Outlet[T @uncheckedVariance]) extends S SourceShape(outlets.head) } } +object SourceShape { + /** Java API */ + def of[T](outlet: Outlet[T @uncheckedVariance]): SourceShape[T] = + SourceShape(outlet) +} /** * A Flow [[Shape]] has exactly one input and one output, it looks from the @@ -223,6 +228,11 @@ final case class FlowShape[-I, +O](inlet: Inlet[I @uncheckedVariance], outlet: O FlowShape(inlets.head, outlets.head) } } +object FlowShape { + /** Java API */ + def of[I, O](inlet: Inlet[I @uncheckedVariance], outlet: Outlet[O @uncheckedVariance]): FlowShape[I, O] = + FlowShape(inlet, outlet) +} /** * A Sink [[Shape]] has exactly one input and no outputs, it models a data sink. @@ -238,6 +248,11 @@ final case class SinkShape[-T](inlet: Inlet[T @uncheckedVariance]) extends Shape SinkShape(inlets.head) } } +object SinkShape { + /** Java API */ + def of[T](inlet: Inlet[T @uncheckedVariance]): SinkShape[T] = + SinkShape(inlet) +} //#bidi-shape /** @@ -276,8 +291,15 @@ final case class BidiShape[-In1, +Out1, -In2, +Out2](in1: Inlet[In1 @uncheckedVa //#implementation-details-elided } //#bidi-shape - object BidiShape { def fromFlows[I1, O1, I2, O2](top: FlowShape[I1, O1], bottom: FlowShape[I2, O2]): BidiShape[I1, O1, I2, O2] = BidiShape(top.inlet, top.outlet, bottom.inlet, bottom.outlet) + + /** Java API */ + def of[In1, Out1, In2, Out2](in1: Inlet[In1 @uncheckedVariance], + out1: Outlet[Out1 @uncheckedVariance], + in2: Inlet[In2 @uncheckedVariance], + out2: Outlet[Out2 @uncheckedVariance]): BidiShape[In1, Out1, In2, Out2] = + BidiShape(in1, out1, in2, out2) + }