+act #17719 introduce Tuple3-22 classes for java api

This commit is contained in:
Konrad Malawski 2015-06-15 12:21:44 +02:00
parent 2c606383e5
commit 9e3a9983a7
4 changed files with 52 additions and 7 deletions

View file

@ -7,6 +7,10 @@ package akka.actor;
import akka.event.Logging; import akka.event.Logging;
import akka.event.Logging.LoggerInitialized; import akka.event.Logging.LoggerInitialized;
import akka.japi.Creator; import akka.japi.Creator;
import akka.japi.Pair;
import akka.japi.tuple.Tuple22;
import akka.japi.tuple.Tuple3;
import akka.japi.tuple.Tuple4;
import akka.routing.GetRoutees; import akka.routing.GetRoutees;
import akka.routing.FromConfig; import akka.routing.FromConfig;
import akka.routing.NoRouter; import akka.routing.NoRouter;
@ -121,6 +125,14 @@ public class JavaAPI {
probe.expectMsg("a-null-0-0"); probe.expectMsg("a-null-0-0");
} }
@Test
@SuppressWarnings("unused")
public void mustCompileTupleCreation() {
final Pair<Integer, String> p = Pair.create(1, "2");
final Tuple4<Integer, String, Integer, Long> t4 = Tuple4.create(1, "2", 3, 4L);
Tuple22.create(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22);
}
public static class ActorWithConstructorParams extends UntypedActor { public static class ActorWithConstructorParams extends UntypedActor {
private final String a; private final String a;

View file

@ -0,0 +1,21 @@
/*
* Copyright (C) 2015 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.japi.tuple
[3..22#/**
* Used to create tuples with 1 elements in Java.
*/
object Tuple1 {
def create[[#T1#]]([#t1: T1#]) = new Tuple1([#t1#])
}
/**
* Java API Tuple container.
*/
@SerialVersionUID(##1L)
final case class Tuple1[[#T1#]]([#t1: T1#]) {
val toScala: ([#T1#]) = ([#t1#])
}#
]

View file

@ -4,14 +4,15 @@
package akka.japi package akka.japi
import language.implicitConversions import java.util.Collections.{ emptyList, singletonList }
import akka.util.Collections.EmptyImmutableSeq
import scala.collection.immutable import scala.collection.immutable
import scala.language.implicitConversions
import scala.reflect.ClassTag import scala.reflect.ClassTag
import scala.util.control.NoStackTrace
import scala.runtime.AbstractPartialFunction import scala.runtime.AbstractPartialFunction
import akka.util.Collections.EmptyImmutableSeq import scala.util.control.NoStackTrace
import java.util.Collections.{ emptyList, singletonList }
/** /**
* A Function interface. Used to create first-class-functions is Java. * A Function interface. Used to create first-class-functions is Java.
@ -53,10 +54,18 @@ trait Predicate[T] {
} }
/** /**
* Java API: Represents a tuple of two elements. * Java API
* Represents a pair (tuple) of two elements.
*
* Additional tuple types for 3 to 22 values are defined in the `akka.japi.tuple` package, e.g. [[akka.japi.tuple.Tuple3]].
*/ */
@SerialVersionUID(1L) @SerialVersionUID(1L)
case class Pair[A, B](first: A, second: B) case class Pair[A, B](first: A, second: B) {
def toScala: (A, B) = (first, second)
}
object Pair {
def create[A, B](first: A, second: B): Pair[A, B] = new Pair(first, second)
}
/** /**
* A constructor/factory, takes no parameters but creates a new value of type T every call. * A constructor/factory, takes no parameters but creates a new value of type T every call.

View file

@ -534,7 +534,10 @@ object MiMa extends AutoPlugin {
FilterAnyProblem("akka.remote.RemoteWatcher$UnwatchRemote"), FilterAnyProblem("akka.remote.RemoteWatcher$UnwatchRemote"),
FilterAnyProblem("akka.remote.RemoteWatcher$Rewatch"), FilterAnyProblem("akka.remote.RemoteWatcher$Rewatch"),
FilterAnyProblem("akka.remote.RemoteWatcher$RewatchRemote"), FilterAnyProblem("akka.remote.RemoteWatcher$RewatchRemote"),
FilterAnyProblem("akka.remote.RemoteWatcher$Stats") FilterAnyProblem("akka.remote.RemoteWatcher$Stats"),
// toString is available on any object, mima is confused due to a generated toString appearing #17722
ProblemFilters.exclude[MissingMethodProblem]("akka.japi.Pair.toString")
) )
} }