summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actors-migration/scala/actors/migration/ActorDSL.scala56
-rw-r--r--src/actors-migration/scala/actors/migration/MigrationSystem.scala37
-rw-r--r--src/actors-migration/scala/actors/migration/StashingActor.scala12
-rw-r--r--src/actors/scala/actors/ActorRef.scala2
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala4
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala2
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala2
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala2
-rw-r--r--src/compiler/scala/tools/nsc/interactive/CompilerControl.scala6
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Infer.scala15
-rw-r--r--src/library/rootdoc.txt21
-rw-r--r--src/library/scala/StringContext.scala17
-rw-r--r--src/library/scala/annotation/migration.scala2
-rw-r--r--src/library/scala/collection/TraversableOnce.scala4
-rw-r--r--src/library/scala/collection/immutable/BitSet.scala4
-rw-r--r--src/library/scala/collection/immutable/RedBlack.scala2
-rw-r--r--src/library/scala/collection/immutable/TreeMap.scala2
-rw-r--r--src/library/scala/collection/immutable/TreeSet.scala2
-rw-r--r--src/library/scala/language.scala79
-rw-r--r--src/library/scala/testing/Show.scala2
-rw-r--r--src/library/scala/util/Either.scala2
-rwxr-xr-xsrc/library/scala/xml/Elem.scala2
-rwxr-xr-xsrc/library/scala/xml/Utility.scala2
-rw-r--r--test/files/jvm/actmig-PinS_1.scala21
-rw-r--r--test/files/jvm/actmig-PinS_2.scala23
-rw-r--r--test/files/jvm/actmig-PinS_3.scala24
-rw-r--r--test/files/jvm/actmig-instantiation.check4
-rw-r--r--test/files/jvm/actmig-instantiation.scala33
-rw-r--r--test/files/jvm/actmig-loop-react.scala19
-rw-r--r--test/files/jvm/actmig-public-methods.scala3
-rw-r--r--test/files/jvm/actmig-public-methods_1.scala4
-rw-r--r--test/files/jvm/actmig-react-receive.scala9
-rw-r--r--test/files/jvm/actmig-react-within.scala5
-rw-r--r--test/files/jvm/actmig-receive.scala1
-rw-r--r--test/files/neg/t5845.check5
-rw-r--r--test/files/pos/t4881.scala31
-rw-r--r--test/files/pos/t6311.scala5
37 files changed, 249 insertions, 217 deletions
diff --git a/src/actors-migration/scala/actors/migration/ActorDSL.scala b/src/actors-migration/scala/actors/migration/ActorDSL.scala
new file mode 100644
index 0000000000..b8cb8ec998
--- /dev/null
+++ b/src/actors-migration/scala/actors/migration/ActorDSL.scala
@@ -0,0 +1,56 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2005-2011, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+package scala.actors
+package migration
+
+import scala.actors.{ Actor, ActorRef, InternalActorRef }
+import scala.collection.immutable
+import scala.reflect.ClassTag
+
+object ActorDSL {
+
+ private[migration] val contextStack = new ThreadLocal[immutable.Stack[Boolean]] {
+ override def initialValue() = immutable.Stack[Boolean]()
+ }
+
+ private[this] def withCleanContext(block: => ActorRef): ActorRef = {
+ // push clean marker
+ val old = contextStack.get
+ contextStack.set(old.push(true))
+ try {
+ val instance = block
+
+ if (instance eq null)
+ throw new Exception("ActorRef can't be 'null'")
+
+ instance
+ } finally {
+ val stackAfter = contextStack.get
+ if (stackAfter.nonEmpty)
+ contextStack.set(if (!stackAfter.head) stackAfter.pop.pop else stackAfter.pop)
+ }
+ }
+
+ /**
+ * Create an actor from the given thunk which must produce an [[scala.actors.Actor]].
+ *
+ * @param ctor is a by-name argument which captures an [[scala.actors.Actor]]
+ * factory; <b>do not make the generated object accessible to code
+ * outside and do not return the same object upon subsequent invocations.</b>
+ */
+ def actor[T <: InternalActor: ClassTag](ctor: ⇒ T): ActorRef = {
+ withCleanContext {
+ val newActor = ctor
+ val newRef = new InternalActorRef(newActor)
+ newActor.start()
+ newRef
+ }
+ }
+
+}
diff --git a/src/actors-migration/scala/actors/migration/MigrationSystem.scala b/src/actors-migration/scala/actors/migration/MigrationSystem.scala
deleted file mode 100644
index 3dcb38e634..0000000000
--- a/src/actors-migration/scala/actors/migration/MigrationSystem.scala
+++ /dev/null
@@ -1,37 +0,0 @@
-package scala.actors.migration
-
-import scala.actors._
-import scala.collection._
-
-object MigrationSystem {
-
- private[migration] val contextStack = new ThreadLocal[immutable.Stack[Boolean]] {
- override def initialValue() = immutable.Stack[Boolean]()
- }
-
- private[this] def withCleanContext(block: => ActorRef): ActorRef = {
- // push clean marker
- val old = contextStack.get
- contextStack.set(old.push(true))
- try {
- val instance = block
-
- if (instance eq null)
- throw new Exception("Actor instance passed to actorOf can't be 'null'")
-
- instance
- } finally {
- val stackAfter = contextStack.get
- if (stackAfter.nonEmpty)
- contextStack.set(if (!stackAfter.head) stackAfter.pop.pop else stackAfter.pop)
- }
- }
-
- def actorOf(props: Props): ActorRef = withCleanContext {
- val creator = props.creator()
- val r = new InternalActorRef(creator)
- creator.start()
- r
- }
-
-} \ No newline at end of file
diff --git a/src/actors-migration/scala/actors/migration/StashingActor.scala b/src/actors-migration/scala/actors/migration/StashingActor.scala
index d0a1432e72..12bad2ed1c 100644
--- a/src/actors-migration/scala/actors/migration/StashingActor.scala
+++ b/src/actors-migration/scala/actors/migration/StashingActor.scala
@@ -13,7 +13,7 @@ object StashingActor extends Combinators {
}
}
-@deprecated("Scala Actors are being removed from the standard library. Please refer to the migration guide.", "2.10")
+@deprecated("Scala Actors are being removed from the standard library. Please refer to the migration guide.", "2.10.0")
trait StashingActor extends InternalActor {
type Receive = PartialFunction[Any, Unit]
@@ -110,18 +110,18 @@ trait StashingActor extends InternalActor {
private[actors] var behaviorStack = immutable.Stack[PartialFunction[Any, Unit]]()
/*
- * Checks that StashingActor can be created only by MigrationSystem.actorOf method.
+ * Checks that StashingActor instances can only be created using the ActorDSL.
*/
private[this] def creationCheck(): Unit = {
// creation check (see ActorRef)
- val context = MigrationSystem.contextStack.get
+ val context = ActorDSL.contextStack.get
if (context.isEmpty)
- throw new RuntimeException("In order to create StashingActor one must use actorOf.")
+ throw new RuntimeException("In order to create a StashingActor one must use the ActorDSL object")
else {
if (!context.head)
- throw new RuntimeException("Only one actor can be created per actorOf call.")
+ throw new RuntimeException("Cannot create more than one actor")
else
- MigrationSystem.contextStack.set(context.push(false))
+ ActorDSL.contextStack.set(context.push(false))
}
}
diff --git a/src/actors/scala/actors/ActorRef.scala b/src/actors/scala/actors/ActorRef.scala
index 5e0ca1554a..cca78b0832 100644
--- a/src/actors/scala/actors/ActorRef.scala
+++ b/src/actors/scala/actors/ActorRef.scala
@@ -8,7 +8,7 @@ import scala.concurrent.ExecutionContext.Implicits.global
/**
* Trait used for migration of Scala actors to Akka.
*/
-@deprecated("ActorRef ought to be used only with the Actor Migration Kit.")
+@deprecated("ActorRef ought to be used only with the Actor Migration Kit.", "2.10.0")
trait ActorRef {
/**
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index 708824ede1..12c3338e0d 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -1047,7 +1047,7 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
*
* @param sym A class symbol, object symbol, package, or package class.
*/
- @deprecated("use invalidateClassPathEntries instead")
+ @deprecated("use invalidateClassPathEntries instead", "2.10.0")
def clearOnNextRun(sym: Symbol) = false
/* To try out clearOnNext run on the scala.tools.nsc project itself
* replace `false` above with the following code
@@ -1305,7 +1305,7 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
/** Reset all classes contained in current project, as determined by
* the clearOnNextRun hook
*/
- @deprecated("use invalidateClassPathEntries instead")
+ @deprecated("use invalidateClassPathEntries instead", "2.10.0")
def resetProjectClasses(root: Symbol): Unit = try {
def unlink(sym: Symbol) =
if (sym != NoSymbol) root.info.decls.unlink(sym)
diff --git a/src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala b/src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala
index 2c719e5d70..b47e9f5784 100644
--- a/src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala
+++ b/src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala
@@ -117,7 +117,7 @@ abstract class HtmlPage extends Page { thisPage =>
case Underline(in) => <u>{ inlineToHtml(in) }</u>
case Superscript(in) => <sup>{ inlineToHtml(in) }</sup>
case Subscript(in) => <sub>{ inlineToHtml(in) }</sub>
- case Link(raw, title) => <a href={ raw }>{ inlineToHtml(title) }</a>
+ case Link(raw, title) => <a href={ raw } target="_blank">{ inlineToHtml(title) }</a>
case Monospace(in) => <code>{ inlineToHtml(in) }</code>
case Text(text) => scala.xml.Text(text)
case Summary(in) => inlineToHtml(in)
diff --git a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
index 86bf1f1efd..48624ec28f 100644
--- a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
+++ b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
@@ -861,7 +861,7 @@ class ModelFactory(val global: Global, val settings: doc.Settings) {
inTpl.members.find(_.sym == aSym)
}
- @deprecated("2.10", "Use findLinkTarget instead!")
+ @deprecated("Use `findLinkTarget` instead.", "2.10.0")
def findTemplate(query: String): Option[DocTemplateImpl] = {
assert(modelFinished)
docTemplatesCache.values find { (tpl: DocTemplateImpl) => tpl.qualifiedName == query && !packageDropped(tpl) && !tpl.isObject }
diff --git a/src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala b/src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala
index 1baa7f9831..924ebb8a3b 100644
--- a/src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala
+++ b/src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala
@@ -147,7 +147,7 @@ trait CommentFactory { thisFactory: ModelFactory with CommentFactory with Member
case (group, body) =>
try {
body match {
- case Body(List(Paragraph(Chain(List(Summary(Text(prio))))))) => List(group -> prio.toInt)
+ case Body(List(Paragraph(Chain(List(Summary(Text(prio))))))) => List(group -> prio.trim.toInt)
case _ => List()
}
} catch {
diff --git a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
index 3de2359ce3..ae38a082ca 100644
--- a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
+++ b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
@@ -69,11 +69,11 @@ trait CompilerControl { self: Global =>
* if it does not yet exist create a new one atomically
* Note: We want to get roid of this operation as it messes compiler invariants.
*/
- @deprecated("use getUnitOf(s) or onUnitOf(s) instead")
+ @deprecated("use getUnitOf(s) or onUnitOf(s) instead", "2.10.0")
def unitOf(s: SourceFile): RichCompilationUnit = getOrCreateUnitOf(s)
/** The compilation unit corresponding to a position */
- @deprecated("use getUnitOf(pos.source) or onUnitOf(pos.source) instead")
+ @deprecated("use getUnitOf(pos.source) or onUnitOf(pos.source) instead", "2.10.0")
def unitOf(pos: Position): RichCompilationUnit = getOrCreateUnitOf(pos.source)
/** Removes the CompilationUnit corresponding to the given SourceFile
@@ -232,7 +232,7 @@ trait CompilerControl { self: Global =>
/** Tells the compile server to shutdown, and not to restart again */
def askShutdown() = scheduler raise ShutdownReq
- @deprecated("use parseTree(source) instead") // deleted 2nd parameter, as this has to run on 2.8 also.
+ @deprecated("use parseTree(source) instead", "2.10.0") // deleted 2nd parameter, as this has to run on 2.8 also.
def askParse(source: SourceFile, response: Response[Tree]) = respond(response) {
parseTree(source)
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/Infer.scala b/src/compiler/scala/tools/nsc/typechecker/Infer.scala
index 0c3dcb9342..cb5fc8df5a 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Infer.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Infer.scala
@@ -517,7 +517,7 @@ trait Infer extends Checkable {
val tvars = tparams map freshVar
if (isConservativelyCompatible(restpe.instantiateTypeParams(tparams, tvars), pt))
map2(tparams, tvars)((tparam, tvar) =>
- instantiateToBound(tvar, inferVariance(formals, restpe)(tparam)))
+ instantiateToBound(tvar, varianceInTypes(formals)(tparam)))
else
tvars map (tvar => WildcardType)
}
@@ -647,24 +647,13 @@ trait Infer extends Checkable {
"argument expression's type is not compatible with formal parameter type" + foundReqMsg(tp1, pt1))
}
}
-
val targs = solvedTypes(
- tvars, tparams, tparams map inferVariance(formals, restpe),
+ tvars, tparams, tparams map varianceInTypes(formals),
false, lubDepth(formals) max lubDepth(argtpes)
)
adjustTypeArgs(tparams, tvars, targs, restpe)
}
- /** Determine which variance to assume for the type paraneter. We first chose the variance
- * that minimizes any formal parameters. If that is still undetermined, because the type parameter
- * does not appear as a formal parameter type, then we pick the variance so that it minimizes the
- * method's result type instead.
- */
- private def inferVariance(formals: List[Type], restpe: Type)(tparam: Symbol): Int = {
- val v = varianceInTypes(formals)(tparam)
- if (v != VarianceFlags) v else varianceInType(restpe)(tparam)
- }
-
private[typechecker] def followApply(tp: Type): Type = tp match {
case NullaryMethodType(restp) =>
val restp1 = followApply(restp)
diff --git a/src/library/rootdoc.txt b/src/library/rootdoc.txt
index da27a0084b..0722d808bf 100644
--- a/src/library/rootdoc.txt
+++ b/src/library/rootdoc.txt
@@ -4,24 +4,25 @@ This is the documentation for the Scala standard library.
The [[scala]] package contains core types.
-scala.[[scala.collection]] and its subpackages contain a collections framework with higher-order functions for manipulation. Both [[scala.collection.immutable]] and [[scala.collection.mutable]] data structures are available, with immutable as the default. The [[scala.collection.parallel]] collections provide automatic parallel operation.
+[[scala.collection `scala.collection`]] and its subpackages contain a collections framework with higher-order functions for manipulation. Both [[scala.collection.immutable `scala.collection.immutable`]] and [[scala.collection.mutable `scala.collection.mutable`]] data structures are available, with immutable as the default. The [[scala.collection.parallel `scala.collection.parallel`]] collections provide automatic parallel operation.
Other important packages include:
- - scala.[[scala.actors]] - Concurrency framework inspired by Erlang.
- - scala.[[scala.io]] - Input and output.
- - scala.[[scala.math]] - Basic math functions and additional numeric types.
- - scala.[[scala.sys]] - Interaction with other processes and the operating system.
- - scala.util.[[scala.util.matching]] - Pattern matching in text using regular expressions.
- - scala.util.parsing.[[scala.util.parsing.combinator]] - Composable combinators for parsing.
- - scala.[[scala.xml]] - XML parsing, manipulation, and serialization.
+ - [[scala.actors `scala.actors`]] - Concurrency framework inspired by Erlang.
+ - [[scala.io `scala.io`]] - Input and output.
+ - [[scala.math `scala.math`]] - Basic math functions and additional numeric types.
+ - [[scala.sys `scala.sys`]] - Interaction with other processes and the operating system.
+ - [[scala.util.matching `scala.util.matching`]] - Pattern matching in text using regular expressions.
+ - [[scala.util.parsing.combinator `scala.util.parsing.combinator`]] - Composable combinators for parsing.
+ - [[scala.xml `scala.xml`]] - XML parsing, manipulation, and serialization.
Many other packages exist. See the complete list on the left.
== Automatic imports ==
-Identifiers in the scala package and the [[scala.Predef]] object are always in scope by default.
+Identifiers in the scala package and the [[scala.Predef `scala.Predef`]] object are always in scope by default.
-Some of these identifiers are type aliases provided as shortcuts to commonly used classes. For example, `List` is an alias for scala.collection.immutable.[[scala.collection.immutable.List]].
+Some of these identifiers are type aliases provided as shortcuts to commonly used classes. For example, `List` is an alias for
+[[scala.collection.immutable.List `scala.collection.immutable.List`]].
Other aliases refer to classes provided by the underlying platform. For example, on the JVM, `String` is an alias for `java.lang.String`.
diff --git a/src/library/scala/StringContext.scala b/src/library/scala/StringContext.scala
index 17c1d0d2ba..fb43d56020 100644
--- a/src/library/scala/StringContext.scala
+++ b/src/library/scala/StringContext.scala
@@ -8,7 +8,7 @@
package scala
-/** This class provides the basic mechanism to do String Interpolation.
+/** This class provides the basic mechanism to do String Interpolation.
* String Interpolation allows users
* to embed variable references directly in *processed* string literals.
* Here's an example:
@@ -26,7 +26,7 @@ package scala
* is rewritten to be:
*
* {{{
- * new StringContext("Hello, ", "").s(name)
+ * StringContext("Hello, ", "").s(name)
* }}}
*
* By default, this class provides the `raw`, `s` and `f` methods as
@@ -36,7 +36,7 @@ package scala
* which adds a method to `StringContext`. Here's an example:
* {{{
* implicit class JsonHelper(val sc: StringContext) extends AnyVal {
- * def json(args: Any*): JSONObject = ...
+ * def json(args: Any*): JSONObject = ...
* }
* val x: JSONObject = json"{ a: $a }"
* }}}
@@ -72,7 +72,7 @@ case class StringContext(parts: String*) {
* println(s"Hello, $name") // Hello, James
* }}}
* In this example, the expression $name is replaced with the `toString` of the
- * variable `name`.
+ * variable `name`.
* The `s` interpolator can take the `toString` of any arbitrary expression within
* a `${}` block, for example:
* {{{
@@ -97,6 +97,13 @@ case class StringContext(parts: String*) {
*
* For example, the raw processed string `raw"a\nb"` is equal to the scala string `"a\\nb"`.
*
+ * ''Note:'' Even when using the raw interpolator, Scala will preprocess unicode escapes.
+ * For example:
+ * {{{
+ * scala> raw"\u0123"
+ * res0: String = ģ
+ * }}}
+ *
* @param `args` The arguments to be inserted into the resulting string.
* @throws An `IllegalArgumentException`
* if the number of `parts` in the enclosing `StringContext` does not exceed
@@ -126,7 +133,7 @@ case class StringContext(parts: String*) {
* that starts with a formatting specifier, the expression is formatted according to that
* specifier. All specifiers allowed in Java format strings are handled, and in the same
* way they are treated in Java.
- *
+ *
* For example:
* {{{
* val height = 1.9d
diff --git a/src/library/scala/annotation/migration.scala b/src/library/scala/annotation/migration.scala
index f60c827620..a55c7006a1 100644
--- a/src/library/scala/annotation/migration.scala
+++ b/src/library/scala/annotation/migration.scala
@@ -25,6 +25,6 @@ package scala.annotation
* @since 2.8
*/
private[scala] final class migration(message: String, changedIn: String) extends scala.annotation.StaticAnnotation {
- @deprecated("Use the constructor taking two Strings instead.", "2.10")
+ @deprecated("Use the constructor taking two Strings instead.", "2.10.0")
def this(majorVersion: Int, minorVersion: Int, message: String) = this(message, majorVersion + "." + minorVersion)
}
diff --git a/src/library/scala/collection/TraversableOnce.scala b/src/library/scala/collection/TraversableOnce.scala
index d77d278fca..f912304680 100644
--- a/src/library/scala/collection/TraversableOnce.scala
+++ b/src/library/scala/collection/TraversableOnce.scala
@@ -366,9 +366,9 @@ trait TraversableOnce[+A] extends Any with GenTraversableOnce[A] {
object TraversableOnce {
- @deprecated("use OnceCanBuildFrom instead")
+ @deprecated("use OnceCanBuildFrom instead", "2.10.0")
def traversableOnceCanBuildFrom[T] = new OnceCanBuildFrom[T]
- @deprecated("use MonadOps instead")
+ @deprecated("use MonadOps instead", "2.10.0")
def wrapTraversableOnce[A](trav: TraversableOnce[A]) = new MonadOps(trav)
implicit def alternateImplicit[A](trav: TraversableOnce[A]) = new ForceImplicitAmbiguity
diff --git a/src/library/scala/collection/immutable/BitSet.scala b/src/library/scala/collection/immutable/BitSet.scala
index 1b676e2d2f..d79e2adbda 100644
--- a/src/library/scala/collection/immutable/BitSet.scala
+++ b/src/library/scala/collection/immutable/BitSet.scala
@@ -31,7 +31,7 @@ abstract class BitSet extends scala.collection.AbstractSet[Int]
with Serializable {
override def empty = BitSet.empty
- @deprecated("Use BitSet.fromBitMask[NoCopy] instead of fromArray", "2.10")
+ @deprecated("Use BitSet.fromBitMask[NoCopy] instead of fromArray", "2.10.0")
def fromArray(elems: Array[Long]): BitSet = fromBitMaskNoCopy(elems)
protected def fromBitMaskNoCopy(elems: Array[Long]): BitSet = BitSet.fromBitMaskNoCopy(elems)
@@ -82,7 +82,7 @@ object BitSet extends BitSetFactory[BitSet] {
implicit def canBuildFrom: CanBuildFrom[BitSet, Int, BitSet] = bitsetCanBuildFrom
/** A bitset containing all the bits in an array */
- @deprecated("Use fromBitMask[NoCopy] instead of fromArray", "2.10")
+ @deprecated("Use fromBitMask[NoCopy] instead of fromArray", "2.10.0")
def fromArray(elems: Array[Long]): BitSet = fromBitMaskNoCopy(elems)
/** A bitset containing all the bits in an array */
diff --git a/src/library/scala/collection/immutable/RedBlack.scala b/src/library/scala/collection/immutable/RedBlack.scala
index a3ab27f814..77e5a87e73 100644
--- a/src/library/scala/collection/immutable/RedBlack.scala
+++ b/src/library/scala/collection/immutable/RedBlack.scala
@@ -18,7 +18,7 @@ package immutable
*
* @since 2.3
*/
-@deprecated("use `TreeMap` or `TreeSet` instead", "2.10")
+@deprecated("use `TreeMap` or `TreeSet` instead", "2.10.0")
@SerialVersionUID(8691885935445612921L)
abstract class RedBlack[A] extends Serializable {
diff --git a/src/library/scala/collection/immutable/TreeMap.scala b/src/library/scala/collection/immutable/TreeMap.scala
index 51bc76efc3..f7a24f3d66 100644
--- a/src/library/scala/collection/immutable/TreeMap.scala
+++ b/src/library/scala/collection/immutable/TreeMap.scala
@@ -51,7 +51,7 @@ class TreeMap[A, +B] private (tree: RB.Tree[A, B])(implicit val ordering: Orderi
with MapLike[A, B, TreeMap[A, B]]
with Serializable {
- @deprecated("use `ordering.lt` instead", "2.10")
+ @deprecated("use `ordering.lt` instead", "2.10.0")
def isSmaller(x: A, y: A) = ordering.lt(x, y)
override protected[this] def newBuilder : Builder[(A, B), TreeMap[A, B]] =
diff --git a/src/library/scala/collection/immutable/TreeSet.scala b/src/library/scala/collection/immutable/TreeSet.scala
index 697da2bc4b..0fdb16c23b 100644
--- a/src/library/scala/collection/immutable/TreeSet.scala
+++ b/src/library/scala/collection/immutable/TreeSet.scala
@@ -96,7 +96,7 @@ class TreeSet[A] private (tree: RB.Tree[A, Unit])(implicit val ordering: Orderin
override def takeWhile(p: A => Boolean) = take(countWhile(p))
override def span(p: A => Boolean) = splitAt(countWhile(p))
- @deprecated("use `ordering.lt` instead", "2.10")
+ @deprecated("use `ordering.lt` instead", "2.10.0")
def isSmaller(x: A, y: A) = compare(x,y) < 0
def this()(implicit ordering: Ordering[A]) = this(null)(ordering)
diff --git a/src/library/scala/language.scala b/src/library/scala/language.scala
index 297f344f65..c638f531bb 100644
--- a/src/library/scala/language.scala
+++ b/src/library/scala/language.scala
@@ -1,5 +1,28 @@
package scala
+/**
+ * The `scala.language` object controls the language features available to the programmer, as proposed in the
+ * [[https://docs.google.com/document/d/1nlkvpoIRkx7at1qJEZafJwthZ3GeIklTFhqmXMvTX9Q/edit '''SIP-18 document''']].
+ *
+ * Each of these features has to be explicitly imported into the current scope to become available:
+ * {{{
+ * import language.postfixOps // or language._
+ * List(1, 2, 3) reverse
+ * }}}
+ *
+ * The language features are:
+ * - [[dynamics `dynamics`]] enables defining calls rewriting using the [[scala.Dynamic `Dynamic`]] trait
+ * - [[postfixOps `postfixOps`]] enables postfix operators
+ * - [[reflectiveCalls `reflectiveCalls`]] enables using structural types
+ * - [[implicitConversions `implicitConversions`]] enables defining implicit methods and members
+ * - [[higherKinds `higherKinds`]] enables writing higher-kinded types
+ * - [[existentials `existentials`]] enables writing existential types
+ * - [[experimental `experimental`]] contains newer features that have not yet been tested in production
+ *
+ * @groupname production Language Features
+ * @groupname experimental Experimental Language Features
+ * @groupprio experimental 10
+ */
object language {
import languageFeature._
@@ -10,21 +33,25 @@ object language {
* selection of existing subclasses of trait Dynamic are unaffected;
* they can be used anywhere.
*
- * _Why introduce the feature?_ To enable flexible DSLs and convenient interfacing
+ * '''Why introduce the feature?''' To enable flexible DSLs and convenient interfacing
* with dynamic languages.
*
- * _Why control it?_ Dynamic member selection can undermine static checkability
+ * '''Why control it?''' Dynamic member selection can undermine static checkability
* of programs. Furthermore, dynamic member selection often relies on reflection,
* which is not available on all platforms.
+ *
+ * @group production
*/
implicit lazy val dynamics: dynamics = languageFeature.dynamics
/** Only where enabled, postfix operator notation `(expr op)` will be allowed.
*
- * _Why keep the feature?_ Several DSLs written in Scala need the notation.
+ * '''Why keep the feature?''' Several DSLs written in Scala need the notation.
*
- * _Why control it?_ Postfix operators interact poorly with semicolon inference.
+ * '''Why control it?''' Postfix operators interact poorly with semicolon inference.
* Most programmers avoid them for this reason.
+ *
+ * @group production
*/
implicit lazy val postfixOps: postfixOps = languageFeature.postfixOps
@@ -34,13 +61,15 @@ object language {
* not override any member in `Parents`. To access one of these members, a
* reflective call is needed.
*
- * _Why keep the feature?_ Structural types provide great flexibility because
+ * '''Why keep the feature?''' Structural types provide great flexibility because
* they avoid the need to define inheritance hierarchies a priori. Besides,
* their definition falls out quite naturally from Scala’s concept of type refinement.
*
- * _Why control it?+ Reflection is not available on all platforms. Popular tools
+ * '''Why control it?''' Reflection is not available on all platforms. Popular tools
* such as ProGuard have problems dealing with it. Even where reflection is available,
* reflective dispatch can lead to surprising performance degradations.
+ *
+ * @group production
*/
implicit lazy val reflectiveCalls: reflectiveCalls = languageFeature.reflectiveCalls
@@ -49,32 +78,36 @@ object language {
* or an implicit method that has in its first parameter section a single,
* non-implicit parameter. Examples:
*
+ * {{{
* implicit def stringToInt(s: String): Int = s.length
* implicit val conv = (s: String) => s.length
- * implicit def listToX(xs: List[T])(implicit f: T => X): X = …
+ * implicit def listToX(xs: List[T])(implicit f: T => X): X = ...
+ * }}}
*
* implicit values of other types are not affected, and neither are implicit
* classes.
*
- * _Why keep the feature?_ Implicit conversions are central to many aspects
+ * '''Why keep the feature?''' Implicit conversions are central to many aspects
* of Scala’s core libraries.
*
- * _Why control it?_ Implicit conversions are known to cause many pitfalls
+ * '''Why control it?''' Implicit conversions are known to cause many pitfalls
* if over-used. And there is a tendency to over-use them because they look
* very powerful and their effects seem to be easy to understand. Also, in
* most situations using implicit parameters leads to a better design than
* implicit conversions.
+ *
+ * @group production
*/
implicit lazy val implicitConversions: implicitConversions = languageFeature.implicitConversions
/** Only where this flag is enabled, higher-kinded types can be written.
*
- * _Why keep the feature?_ Higher-kinded types enable the definition of very general
+ * '''Why keep the feature?''' Higher-kinded types enable the definition of very general
* abstractions such as functor, monad, or arrow. A significant set of advanced
* libraries relies on them. Higher-kinded types are also at the core of the
* scala-virtualized effort to produce high-performance parallel DSLs through staging.
*
- * _Why control it?_ Higher kinded types in Scala lead to a Turing-complete
+ * '''Why control it?''' Higher kinded types in Scala lead to a Turing-complete
* type system, where compiler termination is no longer guaranteed. They tend
* to be useful mostly for type-level computation and for highly generic design
* patterns. The level of abstraction implied by these design patterns is often
@@ -85,6 +118,8 @@ object language {
* higher-kinded types will change in future versions of Scala. So an explicit
* enabling also serves as a warning that code involving higher-kinded types
* might have to be slightly revised in the future.
+ *
+ * @group production
*/
implicit lazy val higherKinds: higherKinds = languageFeature.higherKinds
@@ -93,17 +128,31 @@ object language {
* types of methods. Existential types with wildcard type syntax such as `List[_]`,
* or `Map[String, _]` are not affected.
*
- * _Why keep the feature?_ Existential types are needed to make sense of Java’s wildcard
+ * '''Why keep the feature?''' Existential types are needed to make sense of Java’s wildcard
* types and raw types and the erased types of run-time values.
*
- * Why control it? Having complex existential types in a code base usually makes
+ * '''Why control it?''' Having complex existential types in a code base usually makes
* application code very brittle, with a tendency to produce type errors with
* obscure error messages. Therefore, going overboard with existential types
* is generally perceived not to be a good idea. Also, complicated existential types
* might be no longer supported in a future simplification of the language.
+ *
+ * @group production
*/
implicit lazy val existentials: existentials = languageFeature.existentials
+ /** The experimental object contains features that have been recently added but have not
+ * been thoroughly tested in production yet.
+ *
+ * Experimental features '''may undergo API changes''' in future releases, so production
+ * code should not rely on them.
+ *
+ * Programmers are encouraged to try out experimental features and
+ * [[http://issues.scala-lang.org report any bugs or API inconsistencies]]
+ * they encounter so they can be improved in future releases.
+ *
+ * @group experimental
+ */
object experimental {
import languageFeature.experimental._
@@ -111,12 +160,12 @@ object language {
/** Where enabled, macro definitions are allowed. Macro implementations and
* macro applications are unaffected; they can be used anywhere.
*
- * _Why introduce the feature?_ Macros promise to make the language more regular,
+ * '''Why introduce the feature?''' Macros promise to make the language more regular,
* replacing ad-hoc language constructs with a general powerful abstraction
* capability that can express them. Macros are also a more disciplined and
* powerful replacement for compiler plugins.
*
- * _Why control it?_ For their very power, macros can lead to code that is hard
+ * '''Why control it?''' For their very power, macros can lead to code that is hard
* to debug and understand.
*/
implicit lazy val macros: macros = languageFeature.experimental.macros
diff --git a/src/library/scala/testing/Show.scala b/src/library/scala/testing/Show.scala
index da1868c7f6..c6c58f5da2 100644
--- a/src/library/scala/testing/Show.scala
+++ b/src/library/scala/testing/Show.scala
@@ -37,7 +37,7 @@ trait Show {
}
}
- @deprecated("use SymApply instead", "2.10")
+ @deprecated("use SymApply instead", "2.10.0")
def symApply(sym: Symbol): SymApply = new SymApply(sym)
/** Apply method with name of given symbol `f` to given arguments and return
diff --git a/src/library/scala/util/Either.scala b/src/library/scala/util/Either.scala
index f0253eee07..51342eda78 100644
--- a/src/library/scala/util/Either.scala
+++ b/src/library/scala/util/Either.scala
@@ -221,7 +221,7 @@ object Either {
case Right(a) => a
}
}
- @deprecated("use MergeableEither instead", "2.10")
+ @deprecated("use MergeableEither instead", "2.10.0")
def either2mergeable[A](x: Either[A, A]): MergeableEither[A] = new MergeableEither(x)
/**
diff --git a/src/library/scala/xml/Elem.scala b/src/library/scala/xml/Elem.scala
index 2ca1dbfcd0..a92d7859c3 100755
--- a/src/library/scala/xml/Elem.scala
+++ b/src/library/scala/xml/Elem.scala
@@ -59,7 +59,7 @@ class Elem(
val child: Node*)
extends Node with Serializable
{
- @deprecated("This constructor is retained for backward compatibility. Please use the primary constructor, which lets you specify your own preference for `minimizeEmpty`.", "2.10")
+ @deprecated("This constructor is retained for backward compatibility. Please use the primary constructor, which lets you specify your own preference for `minimizeEmpty`.", "2.10.0")
def this(prefix: String, label: String, attributes: MetaData, scope: NamespaceBinding, child: Node*) = {
this(prefix, label, attributes, scope, child.isEmpty, child: _*)
}
diff --git a/src/library/scala/xml/Utility.scala b/src/library/scala/xml/Utility.scala
index 50a284d7cd..b390235d59 100755
--- a/src/library/scala/xml/Utility.scala
+++ b/src/library/scala/xml/Utility.scala
@@ -175,7 +175,7 @@ object Utility extends AnyRef with parsing.TokenTests {
* Note that calling this source-compatible method will result in the same old, arguably almost universally unwanted,
* behaviour.
*/
- @deprecated("Please use `serialize` instead and specify a `minimizeTags` parameter", "2.10")
+ @deprecated("Please use `serialize` instead and specify a `minimizeTags` parameter", "2.10.0")
def toXML(
x: Node,
pscope: NamespaceBinding = TopScope,
diff --git a/test/files/jvm/actmig-PinS_1.scala b/test/files/jvm/actmig-PinS_1.scala
index 876688ca75..495852e812 100644
--- a/test/files/jvm/actmig-PinS_1.scala
+++ b/test/files/jvm/actmig-PinS_1.scala
@@ -9,7 +9,7 @@ import scala.concurrent.{ Promise, Await }
object SillyActor {
val startPromise = Promise[Boolean]()
- val ref = MigrationSystem.actorOf(Props(() => new SillyActor, "akka.actor.default-stash-dispatcher"))
+ val ref = ActorDSL.actor(new SillyActor)
}
/* PinS, Listing 32.1: A simple actor
@@ -27,7 +27,7 @@ class SillyActor extends Actor {
object SeriousActor {
val startPromise = Promise[Boolean]()
- val ref = MigrationSystem.actorOf(Props(() => new SeriousActor, "akka.actor.default-stash-dispatcher"))
+ val ref = ActorDSL.actor(new SeriousActor)
}
class SeriousActor extends Actor {
@@ -72,7 +72,7 @@ object Test extends App {
/* PinS, Listing 32.2: An actor that calls receive
*/
- def makeEchoActor(): ActorRef = MigrationSystem.actorOf(Props(() => new Actor {
+ def makeEchoActor(): ActorRef = ActorDSL.actor(new Actor {
def act() {
while (true) {
receive {
@@ -83,20 +83,20 @@ object Test extends App {
}
}
}
- }, "akka.actor.default-stash-dispatcher"))
+ })
/* PinS, page 696
*/
- def makeIntActor(): ActorRef = MigrationSystem.actorOf(Props(() => new Actor {
+ def makeIntActor(): ActorRef = ActorDSL.actor(new Actor {
def act() {
receive {
case x: Int => // I only want Ints
println("Got an Int: " + x)
}
}
- }, "akka.actor.default-stash-dispatcher"))
+ })
- MigrationSystem.actorOf(Props(() => new Actor {
+ ActorDSL.actor(new Actor {
def act() {
trapExit = true
link(SillyActor.ref)
@@ -109,15 +109,14 @@ object Test extends App {
case Exit(_: SeriousActor, _) =>
val seriousPromise2 = Promise[Boolean]()
// PinS, page 694
- val seriousActor2 = MigrationSystem.actorOf(Props(() =>
+ val seriousActor2 = ActorDSL.actor(
new Actor {
def act() {
for (i <- 1 to 5)
println("That is the question.")
seriousPromise2.success(true)
}
- }
- , "akka.actor.default-stash-dispatcher"))
+ })
Await.ready(seriousPromise2.future, 5 seconds)
val echoActor = makeEchoActor()
@@ -136,5 +135,5 @@ object Test extends App {
}
}
}
- }, "akka.actor.default-stash-dispatcher"))
+ })
}
diff --git a/test/files/jvm/actmig-PinS_2.scala b/test/files/jvm/actmig-PinS_2.scala
index 7d12578f71..508525463f 100644
--- a/test/files/jvm/actmig-PinS_2.scala
+++ b/test/files/jvm/actmig-PinS_2.scala
@@ -9,7 +9,7 @@ import scala.concurrent.{ Promise, Await }
object SillyActor {
val startPromise = Promise[Boolean]()
- val ref = MigrationSystem.actorOf(Props(() => new SillyActor, "default-stash-dispatcher"))
+ val ref = ActorDSL.actor(new SillyActor)
}
/* PinS, Listing 32.1: A simple actor
@@ -29,7 +29,7 @@ class SillyActor extends StashingActor {
object SeriousActor {
val startPromise = Promise[Boolean]()
- val ref = MigrationSystem.actorOf(Props(() => new SeriousActor, "default-stash-dispatcher"))
+ val ref = ActorDSL.actor(new SeriousActor)
}
class SeriousActor extends StashingActor {
@@ -44,7 +44,7 @@ class SeriousActor extends StashingActor {
/* PinS, Listing 32.3: An actor that calls react
*/
object NameResolver {
- val ref = MigrationSystem.actorOf(Props(() => new NameResolver, "default-stash-dispatcher"))
+ val ref = ActorDSL.actor(new NameResolver)
}
class NameResolver extends StashingActor {
@@ -80,7 +80,7 @@ object Test extends App {
/* PinS, Listing 32.2: An actor that calls receive
*/
- def makeEchoActor(): ActorRef = MigrationSystem.actorOf(Props(() =>
+ def makeEchoActor(): ActorRef = ActorDSL.actor(
new StashingActor {
def receive = { case _ => println("Nop") }
@@ -94,11 +94,11 @@ object Test extends App {
}
}
}
- }, "default-stash-dispatcher"))
+ })
/* PinS, page 696
*/
- def makeIntActor(): ActorRef = MigrationSystem.actorOf(Props(() =>new StashingActor {
+ def makeIntActor(): ActorRef = ActorDSL.actor(new StashingActor {
def receive = { case _ => println("Nop") }
@@ -108,9 +108,9 @@ object Test extends App {
println("Got an Int: " + x)
}
}
- }, "default-stash-dispatcher"))
+ })
- MigrationSystem.actorOf(Props(() => new StashingActor {
+ ActorDSL.actor(new StashingActor {
def receive = { case _ => println("Nop") }
@@ -126,7 +126,7 @@ object Test extends App {
case Exit(_: SeriousActor, _) =>
val seriousPromise2 = Promise[Boolean]()
// PinS, page 694
- val seriousActor2 = MigrationSystem.actorOf(Props(() =>{
+ val seriousActor2 = ActorDSL.actor(
new StashingActor {
def receive = { case _ => println("Nop") }
@@ -136,8 +136,7 @@ object Test extends App {
println("That is the question.")
seriousPromise2.success(true)
}
- }
- }, "default-stash-dispatcher"))
+ })
Await.ready(seriousPromise2.future, 5 seconds)
val echoActor = makeEchoActor()
@@ -156,5 +155,5 @@ object Test extends App {
}
}
}
- }, "default-stash-dispatcher"))
+ })
}
diff --git a/test/files/jvm/actmig-PinS_3.scala b/test/files/jvm/actmig-PinS_3.scala
index c2943008b0..6c6ec6789b 100644
--- a/test/files/jvm/actmig-PinS_3.scala
+++ b/test/files/jvm/actmig-PinS_3.scala
@@ -7,10 +7,9 @@ import scala.actors.migration._
import scala.concurrent.duration._
import scala.concurrent.{ Promise, Await }
-
object SillyActor {
val startPromise = Promise[Boolean]()
- val ref = MigrationSystem.actorOf(Props(() => new SillyActor, "default-stash-dispatcher"))
+ val ref = ActorDSL.actor(new SillyActor)
}
/* PinS, Listing 32.1: A simple actor
@@ -32,7 +31,7 @@ class SillyActor extends StashingActor {
object SeriousActor {
val startPromise = Promise[Boolean]()
- val ref = MigrationSystem.actorOf(Props(() => new SeriousActor, "default-stash-dispatcher"))
+ val ref = ActorDSL.actor(new SeriousActor)
}
class SeriousActor extends StashingActor {
@@ -48,7 +47,7 @@ class SeriousActor extends StashingActor {
/* PinS, Listing 32.3: An actor that calls react
*/
object NameResolver {
- val ref = MigrationSystem.actorOf(Props(() => new NameResolver, "default-stash-dispatcher"))
+ val ref = ActorDSL.actor(new NameResolver)
}
class NameResolver extends StashingActor {
@@ -78,7 +77,7 @@ object Test extends App {
/* PinS, Listing 32.2: An actor that calls receive
*/
- def makeEchoActor(): ActorRef = MigrationSystem.actorOf(Props(() => new StashingActor {
+ def makeEchoActor(): ActorRef = ActorDSL.actor(new StashingActor {
def receive = { // how to handle receive
case 'stop =>
@@ -86,11 +85,11 @@ object Test extends App {
case msg =>
println("received message: " + msg)
}
- }, "default-stash-dispatcher"))
+ })
/* PinS, page 696
*/
- def makeIntActor(): ActorRef = MigrationSystem.actorOf(Props(() => new StashingActor {
+ def makeIntActor(): ActorRef = ActorDSL.actor(new StashingActor {
def receive = {
case x: Int => // I only want Ints
@@ -99,9 +98,9 @@ object Test extends App {
context.stop(self)
case _ => stash()
}
- }, "default-stash-dispatcher"))
+ })
- MigrationSystem.actorOf(Props(() => new StashingActor {
+ ActorDSL.actor(new StashingActor {
val silly = SillyActor.ref
override def preStart() {
@@ -119,7 +118,7 @@ object Test extends App {
case Terminated(`serious`) =>
val seriousPromise2 = Promise[Boolean]()
// PinS, page 694
- val seriousActor2 = MigrationSystem.actorOf(Props(() => {
+ val seriousActor2 = ActorDSL.actor(
new StashingActor {
def receive = { case _ => context.stop(self) }
@@ -130,8 +129,7 @@ object Test extends App {
seriousPromise2.success(true)
context.stop(self)
}
- }
- }, "default-stash-dispatcher"))
+ })
Await.ready(seriousPromise2.future, 5 seconds)
val echoActor = makeEchoActor()
@@ -162,5 +160,5 @@ object Test extends App {
println("Stash 3 " + m)
stash(m)
}
- }, "default-stash-dispatcher"))
+ })
}
diff --git a/test/files/jvm/actmig-instantiation.check b/test/files/jvm/actmig-instantiation.check
index 4c13d5c0a1..08ef979794 100644
--- a/test/files/jvm/actmig-instantiation.check
+++ b/test/files/jvm/actmig-instantiation.check
@@ -1,5 +1,5 @@
-OK error: java.lang.RuntimeException: In order to create StashingActor one must use actorOf.
-OK error: java.lang.RuntimeException: Only one actor can be created per actorOf call.
+OK error: java.lang.RuntimeException: In order to create a StashingActor one must use the ActorDSL object
+OK error: java.lang.RuntimeException: Cannot create more than one actor
0
100
200
diff --git a/test/files/jvm/actmig-instantiation.scala b/test/files/jvm/actmig-instantiation.scala
index d54dff9558..2e3ffc3c30 100644
--- a/test/files/jvm/actmig-instantiation.scala
+++ b/test/files/jvm/actmig-instantiation.scala
@@ -2,7 +2,6 @@
* NOTE: Code snippets from this test are included in the Actor Migration Guide. In case you change
* code in these tests prior to the 2.10.0 release please send the notification to @vjovanov.
*/
-import scala.actors.migration.MigrationSystem._
import scala.actors.migration._
import scala.actors.Actor._
import scala.actors._
@@ -35,53 +34,53 @@ object Test {
a1 ! 100
// simple instantiation
- val a2 = MigrationSystem.actorOf(Props(() => new TestStashingActor, "akka.actor.default-stash-dispatcher"))
+ val a2 = ActorDSL.actor(new TestStashingActor)
a2 ! 200
toStop += a2
// actor of with scala actor
- val a3 = MigrationSystem.actorOf(Props(() => actor {
+ val a3 = ActorDSL.actor(actor {
react { case v: Int => Test.append(v); Test.latch.countDown() }
- }, "akka.actor.default-stash-dispatcher"))
+ })
a3 ! 300
// using the manifest
- val a4 = MigrationSystem.actorOf(Props(() => new TestStashingActor, "akka.actor.default-stash-dispatcher"))
+ val a4 = ActorDSL.actor(new TestStashingActor)
a4 ! 400
toStop += a4
// deterministic part of a test
- // creation without actorOf
+ // creation without actor
try {
val a3 = new TestStashingActor
a3 ! -1
} catch {
- case e => println("OK error: " + e)
+ case e: Throwable => println("OK error: " + e)
}
- // actorOf double creation
+ // actor double creation
try {
- val a3 = MigrationSystem.actorOf(Props(() => {
+ val a3 = ActorDSL.actor({
new TestStashingActor
new TestStashingActor
- }, "akka.actor.default-stash-dispatcher"))
+ })
a3 ! -1
} catch {
- case e => println("OK error: " + e)
+ case e: Throwable => println("OK error: " + e)
}
- // actorOf nesting
+ // actor nesting
try {
- val a5 = MigrationSystem.actorOf(Props(() => {
- val a6 = MigrationSystem.actorOf(Props(() => new TestStashingActor, "akka.actor.default-stash-dispatcher"))
+ val a5 = ActorDSL.actor({
+ val a6 = ActorDSL.actor(new TestStashingActor)
toStop += a6
new TestStashingActor
- }, "akka.actor.default-stash-dispatcher"))
+ })
a5 ! 500
toStop += a5
} catch {
- case e => println("Should not throw an exception: " + e)
+ case e: Throwable => println("Should not throw an exception: " + e)
}
// output
@@ -93,4 +92,4 @@ object Test {
buff.sorted.foreach(println)
toStop.foreach(_ ! PoisonPill)
}
-} \ No newline at end of file
+}
diff --git a/test/files/jvm/actmig-loop-react.scala b/test/files/jvm/actmig-loop-react.scala
index 7f4c6f96dc..c9a3664526 100644
--- a/test/files/jvm/actmig-loop-react.scala
+++ b/test/files/jvm/actmig-loop-react.scala
@@ -2,7 +2,6 @@
* NOTE: Code snippets from this test are included in the Actor Migration Guide. In case you change
* code in these tests prior to the 2.10.0 release please send the notification to @vjovanov.
*/
-import scala.actors.migration.MigrationSystem._
import scala.actors.Actor._
import scala.actors._
import scala.actors.migration._
@@ -40,7 +39,7 @@ object Test {
Await.ready(finishedLWCR1.future, 5 seconds)
// Loop with Condition Snippet - migrated
- val myAkkaActor = MigrationSystem.actorOf(Props(() => new StashingActor {
+ val myAkkaActor = ActorDSL.actor(new StashingActor {
def receive = {
case x: Int =>
@@ -51,7 +50,7 @@ object Test {
context.stop(self)
}
}
- }, "default-stashing-dispatcher"))
+ })
myAkkaActor ! 1
myAkkaActor ! 42
}
@@ -88,7 +87,7 @@ object Test {
Await.ready(finishedTNR1.future, 5 seconds)
// Loop with Condition Snippet - migrated
- val myAkkaActor = MigrationSystem.actorOf(Props(() => new StashingActor {
+ val myAkkaActor = ActorDSL.actor(new StashingActor {
def receive = {
case x: Int =>
@@ -107,7 +106,7 @@ object Test {
context.unbecome()
}).orElse { case x => stash() })
}
- }, "default-stashing-dispatcher"))
+ })
myAkkaActor ! 1
myAkkaActor ! "I am a String"
@@ -117,7 +116,7 @@ object Test {
def exceptionHandling() = {
// Stashing actor with act and exception handler
- val myActor = MigrationSystem.actorOf(Props(() => new StashingActor {
+ val myActor = ActorDSL.actor(new StashingActor {
def receive = { case _ => println("Dummy method.") }
override def act() = {
@@ -138,7 +137,7 @@ object Test {
case x: Exception => println("scala got exception")
}
- }, "default-stashing-dispatcher"))
+ })
myActor ! "work"
myActor ! "fail"
@@ -146,7 +145,7 @@ object Test {
Await.ready(finishedEH1.future, 5 seconds)
// Stashing actor in Akka style
- val myAkkaActor = MigrationSystem.actorOf(Props(() => new StashingActor {
+ val myAkkaActor = ActorDSL.actor(new StashingActor {
def receive = PFCatch({
case "fail" =>
throw new Exception("failed")
@@ -156,14 +155,14 @@ object Test {
finishedEH.success(true)
context.stop(self)
}, { case x: Exception => println("akka got exception") })
- }, "default-stashing-dispatcher"))
+ })
myAkkaActor ! "work"
myAkkaActor ! "fail"
myAkkaActor ! "die"
}
- def main(args: Array[String]) = {
+ def main(args: Array[String]): Unit = {
testLoopWithConditionReact()
Await.ready(finishedLWCR.future, 5 seconds)
exceptionHandling()
diff --git a/test/files/jvm/actmig-public-methods.scala b/test/files/jvm/actmig-public-methods.scala
index 58d7a1a9d4..8891c80668 100644
--- a/test/files/jvm/actmig-public-methods.scala
+++ b/test/files/jvm/actmig-public-methods.scala
@@ -5,7 +5,6 @@
import scala.collection.mutable.ArrayBuffer
import scala.actors.Actor._
import scala.actors._
-import scala.actors.migration.MigrationSystem
import scala.util.continuations._
import java.util.concurrent.{ TimeUnit, CountDownLatch }
@@ -71,4 +70,4 @@ object Test {
buff.sorted.foreach(println)
toStop.foreach(_ ! 'stop)
}
-} \ No newline at end of file
+}
diff --git a/test/files/jvm/actmig-public-methods_1.scala b/test/files/jvm/actmig-public-methods_1.scala
index 15516a5d51..db21ab983c 100644
--- a/test/files/jvm/actmig-public-methods_1.scala
+++ b/test/files/jvm/actmig-public-methods_1.scala
@@ -28,7 +28,7 @@ object Test {
def main(args: Array[String]) = {
- val respActor = MigrationSystem.actorOf(Props(() => actor {
+ val respActor = ActorDSL.actor(actor {
loop {
react {
case (x: String, time: Long) =>
@@ -41,7 +41,7 @@ object Test {
exit()
}
}
- }, "akka.actor.default-stash-dispatcher"))
+ })
toStop += respActor
diff --git a/test/files/jvm/actmig-react-receive.scala b/test/files/jvm/actmig-react-receive.scala
index 6adeac8b52..bf70ce0c46 100644
--- a/test/files/jvm/actmig-react-receive.scala
+++ b/test/files/jvm/actmig-react-receive.scala
@@ -2,7 +2,6 @@
* NOTE: Code snippets from this test are included in the Actor Migration Guide. In case you change
* code in these tests prior to the 2.10.0 release please send the notification to @vjovanov.
*/
-import scala.actors.migration.MigrationSystem._
import scala.actors.Actor._
import scala.actors._
import scala.actors.migration._
@@ -39,7 +38,7 @@ object Test {
Await.ready(finishedRSC1.future, 5 seconds)
// React Snippet - migrated
- val myAkkaActor = MigrationSystem.actorOf(Props(() => new StashingActor {
+ val myAkkaActor = ActorDSL.actor(new StashingActor {
override def preStart() = {
println("do before")
}
@@ -63,7 +62,7 @@ object Test {
finishedRSC.success(true)
}
- }, "default-stashing-dispatcher"))
+ })
myAkkaActor ! 1
myAkkaActor ! "1"
Await.ready(finishedRSC.future, 5 seconds)
@@ -88,7 +87,7 @@ object Test {
Await.ready(finishedRS1.future, 5 seconds)
// React Snippet - migrated
- val myAkkaActor = MigrationSystem.actorOf(Props(() => new StashingActor {
+ val myAkkaActor = ActorDSL.actor(new StashingActor {
override def preStart() = {
println("do before")
}
@@ -105,7 +104,7 @@ object Test {
finishedRS.success(true)
}
- }, "default-stashing-dispatcher"))
+ })
myAkkaActor ! 1
Await.ready(finishedRS.future, 5 seconds)
diff --git a/test/files/jvm/actmig-react-within.scala b/test/files/jvm/actmig-react-within.scala
index 43350ef120..3057398cb5 100644
--- a/test/files/jvm/actmig-react-within.scala
+++ b/test/files/jvm/actmig-react-within.scala
@@ -2,7 +2,6 @@
* NOTE: Code snippets from this test are included in the Actor Migration Guide. In case you change
* code in these tests prior to the 2.10.0 release please send the notification to @vjovanov.
*/
-import scala.actors.migration.MigrationSystem._
import scala.actors.Actor._
import scala.actors._
import scala.actors.migration._
@@ -27,7 +26,7 @@ object Test {
}
}
- val myActor = MigrationSystem.actorOf(Props(() => new StashingActor {
+ val myActor = ActorDSL.actor(new StashingActor {
context.setReceiveTimeout(1 millisecond)
def receive = {
case ReceiveTimeout =>
@@ -37,7 +36,7 @@ object Test {
case _ =>
println("Should not occur.")
}
- }, "default-stashing-dispatcher"))
+ })
}
def main(args: Array[String]) = {
diff --git a/test/files/jvm/actmig-receive.scala b/test/files/jvm/actmig-receive.scala
index 03dc1be63b..308643cf41 100644
--- a/test/files/jvm/actmig-receive.scala
+++ b/test/files/jvm/actmig-receive.scala
@@ -2,7 +2,6 @@
* NOTE: Code snippets from this test are included in the Actor Migration Guide. In case you change
* code in these tests prior to the 2.10.0 release please send the notification to @vjovanov.
*/
-import scala.actors.migration.MigrationSystem._
import scala.actors.Actor._
import scala.actors._
import scala.actors.migration._
diff --git a/test/files/neg/t5845.check b/test/files/neg/t5845.check
index c0b402fccb..8c6100d6de 100644
--- a/test/files/neg/t5845.check
+++ b/test/files/neg/t5845.check
@@ -1,4 +1,7 @@
+t5845.scala:9: error: value +++ is not a member of Int
+ println(5 +++ 5)
+ ^
t5845.scala:15: error: value +++ is not a member of Int
println(5 +++ 5)
^
-one error found
+two errors found
diff --git a/test/files/pos/t4881.scala b/test/files/pos/t4881.scala
deleted file mode 100644
index 46cfad9793..0000000000
--- a/test/files/pos/t4881.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-class Contra[-T]
-trait A
-trait B extends A
-trait C extends B
-
-// test improved variance inference: first try formals to see in which variance positions the type param appears;
-// only when that fails to determine variance, look at result type
-object Test {
- def contraLBUB[a >: C <: A](): Contra[a] = null
- def contraLB[a >: C](): Contra[a] = null
-
-{
- val x = contraLBUB() //inferred Contra[C] instead of Contra[A]
- val x1: Contra[A] = x
-}
-
-{
- val x = contraLB() //inferred Contra[C] instead of Contra[Any]
- val x1: Contra[Any] = x
-}
-
-{
- val x = contraLBUB // make sure it does the same thing as its ()-less counterpart
- val x1: Contra[A] = x
-}
-
-{
- val x = contraLB
- val x1: Contra[Any] = x
-}
-}
diff --git a/test/files/pos/t6311.scala b/test/files/pos/t6311.scala
new file mode 100644
index 0000000000..d27ad2f502
--- /dev/null
+++ b/test/files/pos/t6311.scala
@@ -0,0 +1,5 @@
+class A {
+ def fooMinimal[T, Coll <: Traversable[T]](msg: String)(param1: Traversable[T])(param2: Coll): Traversable[T] = throw new Exception()
+
+ fooMinimal("")(List(1))(List(2))
+}