summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bincompat-backward.whitelist.conf41
-rw-r--r--bincompat-forward.whitelist.conf345
-rw-r--r--doc/LICENSE.md4
-rw-r--r--doc/License.rtf4
-rw-r--r--project/VersionUtil.scala2
-rw-r--r--project/plugins.sbt2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Implicits.scala41
-rw-r--r--src/library/scala/collection/immutable/FilteredTraversableInternal.scala104
-rw-r--r--src/library/scala/collection/immutable/List.scala2
-rw-r--r--src/library/scala/collection/mutable/ArrayOps.scala76
-rw-r--r--src/library/scala/collection/mutable/WrappedArray.scala71
-rw-r--r--src/library/scala/util/Properties.scala2
-rw-r--r--src/reflect/scala/reflect/runtime/JavaUniverseForce.scala2
-rw-r--r--src/scaladoc/scala/tools/nsc/doc/html/page/Entity.scala2
-rw-r--r--src/scalap/decoder.properties2
-rw-r--r--test/files/neg/t6889.check7
-rw-r--r--test/files/neg/t6889.scala1
-rw-r--r--test/files/pos/t10206.scala15
-rw-r--r--test/files/run/repl-colon-type.check8
19 files changed, 78 insertions, 653 deletions
diff --git a/bincompat-backward.whitelist.conf b/bincompat-backward.whitelist.conf
index 3d4e40a00d..1d4a6d82db 100644
--- a/bincompat-backward.whitelist.conf
+++ b/bincompat-backward.whitelist.conf
@@ -238,47 +238,6 @@ filter {
{
matchName="scala.concurrent.impl.Promise.toString"
problemName=MissingMethodProblem
- },
- // https://github.com/scala/scala/pull/5652
- {
- matchName="scala.collection.mutable.ArrayOps#ofChar.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofShort.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofUnit.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofInt.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofBoolean.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofDouble.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofRef.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofByte.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofLong.slice"
- problemName=FinalMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofFloat.slice"
- problemName=FinalMethodProblem
}
]
}
diff --git a/bincompat-forward.whitelist.conf b/bincompat-forward.whitelist.conf
index 3025edee66..24c372386f 100644
--- a/bincompat-forward.whitelist.conf
+++ b/bincompat-forward.whitelist.conf
@@ -88,351 +88,6 @@ filter {
problemName=MissingFieldProblem
},
{
- matchName="scala.collection.mutable.ArrayOps$ofChar"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofChar.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofChar.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofShort"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofShort.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofShort.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofByte.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofByte.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofBoolean.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofBoolean.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofChar.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofChar.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofDouble.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofDouble.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofUnit"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofUnit.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofUnit.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofInt.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofInt.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofInt"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofInt.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofInt.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofRef.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofRef.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofChar.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofChar.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofUnit.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofUnit.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofBoolean"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofBoolean.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofBoolean.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofShort.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofShort.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofShort.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofShort.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofRef.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofRef.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofUnit.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofUnit.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofByte.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofByte.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofDouble.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofDouble.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOpsImpl"
- problemName=MissingClassProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofInt.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofInt.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofDouble"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofDouble.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofDouble.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofRef"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofRef.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofRef.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofLong.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofLong.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofByte"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofByte.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofByte.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofFloat.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofFloat.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofLong.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofLong.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofBoolean.sliceImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofBoolean.emptyImpl$extension"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofByte"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofBoolean"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofChar"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofDouble"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofShort"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofRef"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofUnit"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofInt"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArrayImpl"
- problemName=MissingClassProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofLong"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray$ofFloat"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofFloat.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.WrappedArray#ofFloat.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofLong"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofLong.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofLong.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps$ofFloat"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofFloat.sliceImpl"
- problemName=DirectMissingMethodProblem
- },
- {
- matchName="scala.collection.mutable.ArrayOps#ofFloat.emptyImpl"
- problemName=DirectMissingMethodProblem
- },
- // introduce FilteredTraversableInternal
- {
- matchName="scala.collection.immutable.Nil$"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.immutable.FilteredTraversableInternal"
- problemName=MissingClassProblem
- },
- {
- matchName="scala.collection.immutable.List"
- problemName=MissingTypesProblem
- },
- {
- matchName="scala.collection.immutable.$colon$colon"
- problemName=MissingTypesProblem
- },
- {
matchName="scala.annotation.showAsInfix$"
problemName=MissingClassProblem
},
diff --git a/doc/LICENSE.md b/doc/LICENSE.md
index a07ba32e0b..2c79713f36 100644
--- a/doc/LICENSE.md
+++ b/doc/LICENSE.md
@@ -2,9 +2,9 @@ Scala is licensed under the [BSD 3-Clause License](http://opensource.org/license
## Scala License
-Copyright (c) 2002-2016 EPFL
+Copyright (c) 2002-2017 EPFL
-Copyright (c) 2011-2016 Lightbend, Inc.
+Copyright (c) 2011-2017 Lightbend, Inc.
All rights reserved.
diff --git a/doc/License.rtf b/doc/License.rtf
index 5c26d787a0..4c460e2f28 100644
--- a/doc/License.rtf
+++ b/doc/License.rtf
@@ -10,8 +10,8 @@
\fs48 Scala License
\fs40 \
-\fs26 Copyright (c) 2002-2016 EPFL\
-Copyright (c) 2011-2016 Lightbend, Inc.\
+\fs26 Copyright (c) 2002-2017 EPFL\
+Copyright (c) 2011-2017 Lightbend, Inc.\
All rights reserved.\
\
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\
diff --git a/project/VersionUtil.scala b/project/VersionUtil.scala
index aacbc78329..2363708f1d 100644
--- a/project/VersionUtil.scala
+++ b/project/VersionUtil.scala
@@ -24,7 +24,7 @@ object VersionUtil {
)
lazy val generatePropertiesFileSettings = Seq[Setting[_]](
- copyrightString := "Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.",
+ copyrightString := "Copyright 2002-2017, LAMP/EPFL and Lightbend, Inc.",
resourceGenerators in Compile += generateVersionPropertiesFile.map(file => Seq(file)).taskValue,
generateVersionPropertiesFile := generateVersionPropertiesFileImpl.value
)
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 58e2d6cdad..8edc76e63a 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -19,7 +19,7 @@ buildInfoKeys := Seq[BuildInfoKey](buildClasspath)
buildInfoPackage := "scalabuild"
-libraryDependencies += "com.typesafe" %% "mima-reporter" % "0.1.13"
+libraryDependencies += "com.typesafe" %% "mima-reporter" % "0.1.14"
libraryDependencies ++= Seq(
"org.eclipse.jgit" % "org.eclipse.jgit" % "4.6.0.201612231935-r",
diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
index a7eab21942..33e176a309 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
@@ -154,11 +154,6 @@ trait Implicits {
private val improvesCache = perRunCaches.newMap[(ImplicitInfo, ImplicitInfo), Boolean]()
private val implicitSearchId = { var id = 1 ; () => try id finally id += 1 }
- private def isInvalidConversionSource(tpe: Type): Boolean = tpe match {
- case Function1(in, _) => in <:< NullClass.tpe
- case _ => false
- }
-
def resetImplicits() {
implicitsCache.clear()
infoMapCache.clear()
@@ -1412,27 +1407,32 @@ trait Implicits {
}
}
if (result.isSuccess && isView) {
- def maybeInvalidConversionError(msg: String) {
+ def maybeInvalidConversionError(msg: String): Boolean = {
// We have to check context.ambiguousErrors even though we are calling "issueAmbiguousError"
// which ostensibly does exactly that before issuing the error. Why? I have no idea. Test is pos/t7690.
// AM: I would guess it's because ambiguous errors will be buffered in silent mode if they are not reported
if (context.ambiguousErrors)
context.issueAmbiguousError(AmbiguousImplicitTypeError(tree, msg))
+ true
}
pt match {
- case Function1(_, out) =>
- // must inline to avoid capturing result
- def prohibit(sym: Symbol) = (sym.tpe <:< out) && {
- maybeInvalidConversionError(s"the result type of an implicit conversion must be more specific than ${sym.name}")
- true
- }
- if (prohibit(AnyRefClass) || (settings.isScala211 && prohibit(AnyValClass)))
- result = SearchFailure
- case _ => false
- }
- if (settings.isScala211 && isInvalidConversionSource(pt)) {
- maybeInvalidConversionError("an expression of type Null is ineligible for implicit conversion")
- result = SearchFailure
+ // SI-10206 don't use subtyping to rule out AnyRef/AnyVal:
+ // - there are several valid structural types that are supertypes of AnyRef (e.g., created by HasMember);
+ // typeSymbol will do the trick (AnyRef is a type alias for Object), while ruling out these structural types
+ // - also don't want to accidentally constrain type vars through using <:<
+ case Function1(in, out) =>
+ val outSym = out.typeSymbol
+
+ val fail =
+ if (out.annotations.isEmpty && (outSym == ObjectClass || (isScala211 && outSym == AnyValClass)))
+ maybeInvalidConversionError(s"the result type of an implicit conversion must be more specific than $out")
+ else if (isScala211 && in.annotations.isEmpty && in.typeSymbol == NullClass)
+ maybeInvalidConversionError("an expression of type Null is ineligible for implicit conversion")
+ else false
+
+ if (fail) result = SearchFailure
+
+ case _ =>
}
}
@@ -1442,6 +1442,9 @@ trait Implicits {
result
}
+ // this setting is expensive to check, actually....
+ private[this] val isScala211 = settings.isScala211
+
def allImplicits: List[SearchResult] = {
def search(iss: Infoss, isLocalToCallsite: Boolean) = applicableInfos(iss, isLocalToCallsite).values
(
diff --git a/src/library/scala/collection/immutable/FilteredTraversableInternal.scala b/src/library/scala/collection/immutable/FilteredTraversableInternal.scala
deleted file mode 100644
index 35585b7826..0000000000
--- a/src/library/scala/collection/immutable/FilteredTraversableInternal.scala
+++ /dev/null
@@ -1,104 +0,0 @@
-/* __ *\
-** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2003-2013, LAMP/EPFL **
-** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
-** /____/\___/_/ |_/____/_/ | | **
-** |/ **
-\* */
-
-package scala
-package collection
-package immutable
-
-import scala.annotation.tailrec
-
-/**
- * Optimised filter functions for List
- * n.b. this is an internal class to help maintain compatibility and should not be used directly.
- */
-private[immutable] trait FilteredTraversableInternal[+A, +Repr <: AnyRef with TraversableLike[A, Repr]] extends TraversableLike[A, Repr] {
-
- // Optimized for List
-
- override def filter(p: A => Boolean): Self = filterImpl(p, isFlipped = false)
-
- override def filterNot(p: A => Boolean): Self = filterImpl(p, isFlipped = true)
-
- private[this] def filterImpl(p: A => Boolean, isFlipped: Boolean): Self = {
-
- // everything seen so far so far is not included
- @tailrec def noneIn(l: Repr): Repr = {
- if (l.isEmpty)
- Nil.asInstanceOf[Repr]
- else {
- val h = l.head
- val t = l.tail
- if (p(h) != isFlipped)
- allIn(l, t)
- else
- noneIn(t)
- }
- }
-
- // everything from 'start' is included, if everything from this point is in we can return the origin
- // start otherwise if we discover an element that is out we must create a new partial list.
- @tailrec def allIn(start: Repr, remaining: Repr): Repr = {
- if (remaining.isEmpty)
- start
- else {
- val x = remaining.head
- if (p(x) != isFlipped)
- allIn(start, remaining.tail)
- else
- partialFill(start, remaining)
- }
- }
-
- // we have seen elements that should be included then one that should be excluded, start building
- def partialFill(origStart: Repr, firstMiss: Repr): Repr = {
- val newHead = new ::(origStart.head, Nil)
- var toProcess = origStart.tail
- var currentLast = newHead
-
- // we know that all elements are :: until at least firstMiss.tail
- while (!(toProcess eq firstMiss)) {
- val newElem = new ::(toProcess.head, Nil)
- currentLast.tl = newElem
- currentLast = newElem
- toProcess = toProcess.tail
- }
-
- // at this point newHead points to a list which is a duplicate of all the 'in' elements up to the first miss.
- // currentLast is the last element in that list.
-
- // now we are going to try and share as much of the tail as we can, only moving elements across when we have to.
- var next = firstMiss.tail
- var nextToCopy = next // the next element we would need to copy to our list if we cant share.
- while (!next.isEmpty) {
- // generally recommended is next.isNonEmpty but this incurs an extra method call.
- val head: A = next.head
- if (p(head) != isFlipped) {
- next = next.tail
- } else {
- // its not a match - do we have outstanding elements?
- while (!(nextToCopy eq next)) {
- val newElem = new ::(nextToCopy.head, Nil)
- currentLast.tl = newElem
- currentLast = newElem
- nextToCopy = nextToCopy.tail
- }
- nextToCopy = next.tail
- next = next.tail
- }
- }
-
- // we have remaining elements - they are unchanged attach them to the end
- if (!nextToCopy.isEmpty)
- currentLast.tl = nextToCopy.asInstanceOf[List[A]]
-
- newHead.asInstanceOf[Repr]
- }
-
- noneIn(repr)
- }
-} \ No newline at end of file
diff --git a/src/library/scala/collection/immutable/List.scala b/src/library/scala/collection/immutable/List.scala
index e12ce7c2eb..550b987cb6 100644
--- a/src/library/scala/collection/immutable/List.scala
+++ b/src/library/scala/collection/immutable/List.scala
@@ -88,7 +88,6 @@ sealed abstract class List[+A] extends AbstractSeq[A]
with Product
with GenericTraversableTemplate[A, List]
with LinearSeqOptimized[A, List[A]]
- with FilteredTraversableInternal[A, List[A]]
with scala.Serializable {
override def companion: GenericCompanion[List] = List
@@ -414,7 +413,6 @@ sealed abstract class List[+A] extends AbstractSeq[A]
// Create a proxy for Java serialization that allows us to avoid mutation
// during deserialization. This is the Serialization Proxy Pattern.
protected final def writeReplace(): AnyRef = new List.SerializationProxy(this)
-
}
/** The empty list.
diff --git a/src/library/scala/collection/mutable/ArrayOps.scala b/src/library/scala/collection/mutable/ArrayOps.scala
index 5de3dad256..0f83fd92c1 100644
--- a/src/library/scala/collection/mutable/ArrayOps.scala
+++ b/src/library/scala/collection/mutable/ArrayOps.scala
@@ -10,8 +10,6 @@ package scala
package collection
package mutable
-import java.util
-
import scala.reflect.ClassTag
import parallel.mutable.ParArray
@@ -182,23 +180,6 @@ sealed trait ArrayOps[T] extends Any with ArrayLike[T, Array[T]] with CustomPara
def seq = thisCollection
}
-/** to provide binary compat for 2.11 and 2.12 this class contains
- * functionality that should be migrated to ArrayOps in 2.13
- *
- */
-private[mutable] sealed trait ArrayOpsImpl[T] extends Any with ArrayOps[T] {
- override final def slice(from: Int, until: Int): Array[T] = {
- val start = if (from < 0) 0 else from
- if (until <= start || start >= repr.length)
- return emptyImpl
- val end = if (until > length) length else until
- sliceImpl(start, end)
- }
- protected def emptyImpl: Array[T]
- protected def sliceImpl(from: Int, until: Int): Array[T]
-
-}
-
/**
* A companion object for `ArrayOps`.
*
@@ -206,24 +187,12 @@ private[mutable] sealed trait ArrayOpsImpl[T] extends Any with ArrayOps[T] {
*/
object ArrayOps {
- private val emptyByteArray = new Array[Byte](0)
- private val emptyShortArray = new Array[Short](0)
- private val emptyIntArray = new Array[Int](0)
- private val emptyLongArray = new Array[Long](0)
- private val emptyFloatArray = new Array[Float](0)
- private val emptyDoubleArray = new Array[Double](0)
- private val emptyUnitArray = new Array[Unit](0)
- private val emptyCharArray = new Array[Char](0)
- private val emptyBooleanArray = new Array[Boolean](0)
-
- /** A subclass of `ArrayOps` for arrays containing reference types. */
- final class ofRef[T <: AnyRef](override val repr: Array[T]) extends AnyVal with ArrayOpsImpl[T] with ArrayLike[T, Array[T]] {
+ /** A class of `ArrayOps` for arrays containing reference types. */
+ final class ofRef[T <: AnyRef](override val repr: Array[T]) extends AnyVal with ArrayOps[T] with ArrayLike[T, Array[T]] {
override protected[this] def thisCollection: WrappedArray[T] = new WrappedArray.ofRef[T](repr)
override protected[this] def toCollection(repr: Array[T]): WrappedArray[T] = new WrappedArray.ofRef[T](repr)
override protected[this] def newBuilder = new ArrayBuilder.ofRef[T]()(ClassTag[T](repr.getClass.getComponentType))
- protected override def emptyImpl:Array[T] = util.Arrays.copyOf[T](repr,0)
- protected override def sliceImpl(from: Int, until: Int): Array[T] = util.Arrays.copyOfRange[T](repr, from, until)
def length: Int = repr.length
def apply(index: Int): T = repr(index)
@@ -231,13 +200,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays containing `Byte`s. */
- final class ofByte(override val repr: Array[Byte]) extends AnyVal with ArrayOpsImpl[Byte] with ArrayLike[Byte, Array[Byte]] {
+ final class ofByte(override val repr: Array[Byte]) extends AnyVal with ArrayOps[Byte] with ArrayLike[Byte, Array[Byte]] {
override protected[this] def thisCollection: WrappedArray[Byte] = new WrappedArray.ofByte(repr)
override protected[this] def toCollection(repr: Array[Byte]): WrappedArray[Byte] = new WrappedArray.ofByte(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofByte
- protected override def emptyImpl = emptyByteArray
- protected override def sliceImpl(from: Int, until: Int) = util.Arrays.copyOfRange(repr, from, until)
def length: Int = repr.length
def apply(index: Int): Byte = repr(index)
@@ -245,13 +212,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays containing `Short`s. */
- final class ofShort(override val repr: Array[Short]) extends AnyVal with ArrayOpsImpl[Short] with ArrayLike[Short, Array[Short]] {
+ final class ofShort(override val repr: Array[Short]) extends AnyVal with ArrayOps[Short] with ArrayLike[Short, Array[Short]] {
override protected[this] def thisCollection: WrappedArray[Short] = new WrappedArray.ofShort(repr)
override protected[this] def toCollection(repr: Array[Short]): WrappedArray[Short] = new WrappedArray.ofShort(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofShort
- protected override def emptyImpl = emptyShortArray
- protected override def sliceImpl(from: Int, until: Int) = util.Arrays.copyOfRange(repr, from, until)
def length: Int = repr.length
def apply(index: Int): Short = repr(index)
@@ -259,13 +224,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays containing `Char`s. */
- final class ofChar(override val repr: Array[Char]) extends AnyVal with ArrayOpsImpl[Char] with ArrayLike[Char, Array[Char]] {
+ final class ofChar(override val repr: Array[Char]) extends AnyVal with ArrayOps[Char] with ArrayLike[Char, Array[Char]] {
override protected[this] def thisCollection: WrappedArray[Char] = new WrappedArray.ofChar(repr)
override protected[this] def toCollection(repr: Array[Char]): WrappedArray[Char] = new WrappedArray.ofChar(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofChar
- protected override def emptyImpl = emptyCharArray
- protected override def sliceImpl(from: Int, until: Int) = util.Arrays.copyOfRange(repr, from, until)
def length: Int = repr.length
def apply(index: Int): Char = repr(index)
@@ -273,13 +236,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays containing `Int`s. */
- final class ofInt(override val repr: Array[Int]) extends AnyVal with ArrayOpsImpl[Int] with ArrayLike[Int, Array[Int]] {
+ final class ofInt(override val repr: Array[Int]) extends AnyVal with ArrayOps[Int] with ArrayLike[Int, Array[Int]] {
override protected[this] def thisCollection: WrappedArray[Int] = new WrappedArray.ofInt(repr)
override protected[this] def toCollection(repr: Array[Int]): WrappedArray[Int] = new WrappedArray.ofInt(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofInt
- protected override def emptyImpl = emptyIntArray
- protected override def sliceImpl(from: Int, until: Int) = util.Arrays.copyOfRange(repr, from, until)
def length: Int = repr.length
def apply(index: Int): Int = repr(index)
@@ -287,13 +248,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays containing `Long`s. */
- final class ofLong(override val repr: Array[Long]) extends AnyVal with ArrayOpsImpl[Long] with ArrayLike[Long, Array[Long]] {
+ final class ofLong(override val repr: Array[Long]) extends AnyVal with ArrayOps[Long] with ArrayLike[Long, Array[Long]] {
override protected[this] def thisCollection: WrappedArray[Long] = new WrappedArray.ofLong(repr)
override protected[this] def toCollection(repr: Array[Long]): WrappedArray[Long] = new WrappedArray.ofLong(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofLong
- protected override def emptyImpl = emptyLongArray
- protected override def sliceImpl(from: Int, until: Int) = util.Arrays.copyOfRange(repr, from, until)
def length: Int = repr.length
def apply(index: Int): Long = repr(index)
@@ -301,13 +260,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays containing `Float`s. */
- final class ofFloat(override val repr: Array[Float]) extends AnyVal with ArrayOpsImpl[Float] with ArrayLike[Float, Array[Float]] {
+ final class ofFloat(override val repr: Array[Float]) extends AnyVal with ArrayOps[Float] with ArrayLike[Float, Array[Float]] {
override protected[this] def thisCollection: WrappedArray[Float] = new WrappedArray.ofFloat(repr)
override protected[this] def toCollection(repr: Array[Float]): WrappedArray[Float] = new WrappedArray.ofFloat(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofFloat
- protected override def emptyImpl = emptyFloatArray
- protected override def sliceImpl(from: Int, until: Int) = util.Arrays.copyOfRange(repr, from, until)
def length: Int = repr.length
def apply(index: Int): Float = repr(index)
@@ -315,13 +272,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays containing `Double`s. */
- final class ofDouble(override val repr: Array[Double]) extends AnyVal with ArrayOpsImpl[Double] with ArrayLike[Double, Array[Double]] {
+ final class ofDouble(override val repr: Array[Double]) extends AnyVal with ArrayOps[Double] with ArrayLike[Double, Array[Double]] {
override protected[this] def thisCollection: WrappedArray[Double] = new WrappedArray.ofDouble(repr)
override protected[this] def toCollection(repr: Array[Double]): WrappedArray[Double] = new WrappedArray.ofDouble(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofDouble
- protected override def emptyImpl = emptyDoubleArray
- protected override def sliceImpl(from: Int, until: Int) = util.Arrays.copyOfRange(repr, from, until)
def length: Int = repr.length
def apply(index: Int): Double = repr(index)
@@ -329,13 +284,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays containing `Boolean`s. */
- final class ofBoolean(override val repr: Array[Boolean]) extends AnyVal with ArrayOpsImpl[Boolean] with ArrayLike[Boolean, Array[Boolean]] {
+ final class ofBoolean(override val repr: Array[Boolean]) extends AnyVal with ArrayOps[Boolean] with ArrayLike[Boolean, Array[Boolean]] {
override protected[this] def thisCollection: WrappedArray[Boolean] = new WrappedArray.ofBoolean(repr)
override protected[this] def toCollection(repr: Array[Boolean]): WrappedArray[Boolean] = new WrappedArray.ofBoolean(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofBoolean
- protected override def emptyImpl = emptyBooleanArray
- protected override def sliceImpl(from: Int, until: Int) = util.Arrays.copyOfRange(repr, from, until)
def length: Int = repr.length
def apply(index: Int): Boolean = repr(index)
@@ -343,18 +296,11 @@ object ArrayOps {
}
/** A subclass of `ArrayOps` for arrays of `Unit` types. */
- final class ofUnit(override val repr: Array[Unit]) extends AnyVal with ArrayOpsImpl[Unit] with ArrayLike[Unit, Array[Unit]] {
+ final class ofUnit(override val repr: Array[Unit]) extends AnyVal with ArrayOps[Unit] with ArrayLike[Unit, Array[Unit]] {
override protected[this] def thisCollection: WrappedArray[Unit] = new WrappedArray.ofUnit(repr)
override protected[this] def toCollection(repr: Array[Unit]): WrappedArray[Unit] = new WrappedArray.ofUnit(repr)
override protected[this] def newBuilder = new ArrayBuilder.ofUnit
- protected override def emptyImpl = emptyUnitArray
- protected override def sliceImpl(from: Int, until: Int) = {
- // cant use util.Arrays.copyOfRange[Unit](repr, from, until) - Unit is special and doesnt compile
- val res = new Array[Unit](until-from)
- System.arraycopy(repr, from, res, 0, res.size)
- res
- }
def length: Int = repr.length
def apply(index: Int): Unit = repr(index)
diff --git a/src/library/scala/collection/mutable/WrappedArray.scala b/src/library/scala/collection/mutable/WrappedArray.scala
index d0919c4357..0b5ebe7e9a 100644
--- a/src/library/scala/collection/mutable/WrappedArray.scala
+++ b/src/library/scala/collection/mutable/WrappedArray.scala
@@ -85,26 +85,12 @@ extends AbstractSeq[T]
*/
override protected[this] def newBuilder: Builder[T, WrappedArray[T]] =
new WrappedArrayBuilder[T](elemTag)
-}
-
-private[mutable] abstract class WrappedArrayImpl[T] extends WrappedArray[T] {
- override def slice(from: Int, until: Int): WrappedArray[T] = {
- val start = if (from < 0) 0 else from
- if (until <= start || start >= repr.length)
- return emptyImpl
- val end = if (until > length) length else until
- sliceImpl(start, end)
- }
- protected def emptyImpl: WrappedArray[T]
-
- protected def sliceImpl(from: Int, until: Int): WrappedArray[T]
}
/** A companion object used to create instances of `WrappedArray`.
*/
object WrappedArray {
- import java.util
// This is reused for all calls to empty.
private val EmptyWrappedArray = new ofRef[AnyRef](new Array[AnyRef](0))
def empty[T <: AnyRef]: WrappedArray[T] = EmptyWrappedArray.asInstanceOf[WrappedArray[T]]
@@ -138,17 +124,7 @@ object WrappedArray {
def newBuilder[A]: Builder[A, IndexedSeq[A]] = new ArrayBuffer
- private val emptyWrappedByte = new ofByte(new Array[Byte](0))
- private val emptyWrappedShort = new ofShort(new Array[Short](0))
- private val emptyWrappedInt = new ofInt(new Array[Int](0))
- private val emptyWrappedLong = new ofLong(new Array[Long](0))
- private val emptyWrappedFloat = new ofFloat(new Array[Float](0))
- private val emptyWrappedDouble = new ofDouble(new Array[Double](0))
- private val emptyWrappedUnit = new ofUnit(new Array[Unit](0))
- private val emptyWrappedChar = new ofChar(new Array[Char](0))
- private val emptyWrappedBoolean = new ofBoolean(new Array[Boolean](0))
-
- final class ofRef[T <: AnyRef](val array: Array[T]) extends WrappedArrayImpl[T] with Serializable {
+ final class ofRef[T <: AnyRef](val array: Array[T]) extends WrappedArray[T] with Serializable {
lazy val elemTag = ClassTag[T](array.getClass.getComponentType)
def length: Int = array.length
def apply(index: Int): T = array(index).asInstanceOf[T]
@@ -158,11 +134,9 @@ object WrappedArray {
case that: ofRef[_] => Arrays.equals(array.asInstanceOf[Array[AnyRef]], that.array.asInstanceOf[Array[AnyRef]])
case _ => super.equals(that)
}
- protected override def emptyImpl = new ofRef(util.Arrays.copyOf[T](array,0))
- protected override def sliceImpl(from: Int, until: Int) = new ofRef[T](util.Arrays.copyOfRange[T](array, from, until))
}
- final class ofByte(val array: Array[Byte]) extends WrappedArrayImpl[Byte] with Serializable {
+ final class ofByte(val array: Array[Byte]) extends WrappedArray[Byte] with Serializable {
def elemTag = ClassTag.Byte
def length: Int = array.length
def apply(index: Int): Byte = array(index)
@@ -172,11 +146,9 @@ object WrappedArray {
case that: ofByte => Arrays.equals(array, that.array)
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedByte
- protected override def sliceImpl(from: Int, until: Int) = new ofByte(util.Arrays.copyOfRange(array, from, until))
}
- final class ofShort(val array: Array[Short]) extends WrappedArrayImpl[Short] with Serializable {
+ final class ofShort(val array: Array[Short]) extends WrappedArray[Short] with Serializable {
def elemTag = ClassTag.Short
def length: Int = array.length
def apply(index: Int): Short = array(index)
@@ -186,11 +158,9 @@ object WrappedArray {
case that: ofShort => Arrays.equals(array, that.array)
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedShort
- protected override def sliceImpl(from: Int, until: Int) = new ofShort(util.Arrays.copyOfRange(array, from, until))
}
- final class ofChar(val array: Array[Char]) extends WrappedArrayImpl[Char] with Serializable {
+ final class ofChar(val array: Array[Char]) extends WrappedArray[Char] with Serializable {
def elemTag = ClassTag.Char
def length: Int = array.length
def apply(index: Int): Char = array(index)
@@ -200,11 +170,9 @@ object WrappedArray {
case that: ofChar => Arrays.equals(array, that.array)
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedChar
- protected override def sliceImpl(from: Int, until: Int) = new ofChar(util.Arrays.copyOfRange(array, from, until))
}
- final class ofInt(val array: Array[Int]) extends WrappedArrayImpl[Int] with Serializable {
+ final class ofInt(val array: Array[Int]) extends WrappedArray[Int] with Serializable {
def elemTag = ClassTag.Int
def length: Int = array.length
def apply(index: Int): Int = array(index)
@@ -214,11 +182,9 @@ object WrappedArray {
case that: ofInt => Arrays.equals(array, that.array)
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedInt
- protected override def sliceImpl(from: Int, until: Int) = new ofInt(util.Arrays.copyOfRange(array, from, until))
}
- final class ofLong(val array: Array[Long]) extends WrappedArrayImpl[Long] with Serializable {
+ final class ofLong(val array: Array[Long]) extends WrappedArray[Long] with Serializable {
def elemTag = ClassTag.Long
def length: Int = array.length
def apply(index: Int): Long = array(index)
@@ -228,11 +194,9 @@ object WrappedArray {
case that: ofLong => Arrays.equals(array, that.array)
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedLong
- protected override def sliceImpl(from: Int, until: Int) = new ofLong(util.Arrays.copyOfRange(array, from, until))
}
- final class ofFloat(val array: Array[Float]) extends WrappedArrayImpl[Float] with Serializable {
+ final class ofFloat(val array: Array[Float]) extends WrappedArray[Float] with Serializable {
def elemTag = ClassTag.Float
def length: Int = array.length
def apply(index: Int): Float = array(index)
@@ -242,11 +206,9 @@ object WrappedArray {
case that: ofFloat => Arrays.equals(array, that.array)
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedFloat
- protected override def sliceImpl(from: Int, until: Int) = new ofFloat(util.Arrays.copyOfRange(array, from, until))
}
- final class ofDouble(val array: Array[Double]) extends WrappedArrayImpl[Double] with Serializable {
+ final class ofDouble(val array: Array[Double]) extends WrappedArray[Double] with Serializable {
def elemTag = ClassTag.Double
def length: Int = array.length
def apply(index: Int): Double = array(index)
@@ -256,11 +218,9 @@ object WrappedArray {
case that: ofDouble => Arrays.equals(array, that.array)
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedDouble
- protected override def sliceImpl(from: Int, until: Int) = new ofDouble(util.Arrays.copyOfRange(array, from, until))
}
- final class ofBoolean(val array: Array[Boolean]) extends WrappedArrayImpl[Boolean] with Serializable {
+ final class ofBoolean(val array: Array[Boolean]) extends WrappedArray[Boolean] with Serializable {
def elemTag = ClassTag.Boolean
def length: Int = array.length
def apply(index: Int): Boolean = array(index)
@@ -270,11 +230,9 @@ object WrappedArray {
case that: ofBoolean => Arrays.equals(array, that.array)
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedBoolean
- protected override def sliceImpl(from: Int, until: Int) = new ofBoolean(util.Arrays.copyOfRange(array, from, until))
}
- final class ofUnit(val array: Array[Unit]) extends WrappedArrayImpl[Unit] with Serializable {
+ final class ofUnit(val array: Array[Unit]) extends WrappedArray[Unit] with Serializable {
def elemTag = ClassTag.Unit
def length: Int = array.length
def apply(index: Int): Unit = array(index)
@@ -284,14 +242,5 @@ object WrappedArray {
case that: ofUnit => array.length == that.array.length
case _ => super.equals(that)
}
- protected override def emptyImpl = emptyWrappedUnit
- protected override def sliceImpl(from: Int, until: Int) = {
- // cant use
- // new ofUnit(util.Arrays.copyOfRange[Unit](array, from, until)) - Unit is special and doesnt compile
- // cant use util.Arrays.copyOfRange[Unit](repr, from, until) - Unit is special and doesnt compile
- val res = new Array[Unit](until-from)
- System.arraycopy(repr, from, res, 0, until-from)
- new ofUnit(res)
- }
}
}
diff --git a/src/library/scala/util/Properties.scala b/src/library/scala/util/Properties.scala
index 29a635fcbe..101a6437ec 100644
--- a/src/library/scala/util/Properties.scala
+++ b/src/library/scala/util/Properties.scala
@@ -105,7 +105,7 @@ private[scala] trait PropertiesTrait {
* or "version (unknown)" if it cannot be determined.
*/
val versionString = "version " + scalaPropOrElse("version.number", "(unknown)")
- val copyrightString = scalaPropOrElse("copyright.string", "Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.")
+ val copyrightString = scalaPropOrElse("copyright.string", "Copyright 2002-2017, LAMP/EPFL and Lightbend, Inc.")
/** This is the encoding to use reading in source files, overridden with -encoding.
* Note that it uses "prop" i.e. looks in the scala jar, not the system properties.
diff --git a/src/reflect/scala/reflect/runtime/JavaUniverseForce.scala b/src/reflect/scala/reflect/runtime/JavaUniverseForce.scala
index 72e21f67fe..9138ed3f02 100644
--- a/src/reflect/scala/reflect/runtime/JavaUniverseForce.scala
+++ b/src/reflect/scala/reflect/runtime/JavaUniverseForce.scala
@@ -459,8 +459,8 @@ trait JavaUniverseForce { self: runtime.JavaUniverse =>
definitions.DoubleTpe
definitions.BooleanTpe
definitions.ScalaNumericValueClasses
- definitions.ScalaValueClasses
definitions.ScalaValueClassesNoUnit
+ definitions.ScalaValueClasses
uncurry.VarargsSymbolAttachment
uncurry.DesugaredParameterType
diff --git a/src/scaladoc/scala/tools/nsc/doc/html/page/Entity.scala b/src/scaladoc/scala/tools/nsc/doc/html/page/Entity.scala
index fb2bf5049f..7232892d52 100644
--- a/src/scaladoc/scala/tools/nsc/doc/html/page/Entity.scala
+++ b/src/scaladoc/scala/tools/nsc/doc/html/page/Entity.scala
@@ -396,7 +396,7 @@ trait EntityPage extends HtmlPage {
{
if (Set("epfl", "EPFL").contains(tpl.universe.settings.docfooter.value))
- <div id="footer">Scala programming documentation. Copyright (c) 2003-2016 <a href="http://www.epfl.ch" target="_top">EPFL</a>, with contributions from <a href="http://www.lightbend.com" target="_top">Lightbend</a>.</div>
+ <div id="footer">Scala programming documentation. Copyright (c) 2003-2017 <a href="http://www.epfl.ch" target="_top">EPFL</a>, with contributions from <a href="http://www.lightbend.com" target="_top">Lightbend</a>.</div>
else
<div id="footer"> { tpl.universe.settings.docfooter.value } </div>
}
diff --git a/src/scalap/decoder.properties b/src/scalap/decoder.properties
index 9bb8d130ea..0bff4c81d4 100644
--- a/src/scalap/decoder.properties
+++ b/src/scalap/decoder.properties
@@ -1,2 +1,2 @@
version.number=2.0.1
-copyright.string=(c) 2002-2016 LAMP/EPFL
+copyright.string=(c) 2002-2017 LAMP/EPFL
diff --git a/test/files/neg/t6889.check b/test/files/neg/t6889.check
index a77e8a010c..c14c3b09c0 100644
--- a/test/files/neg/t6889.check
+++ b/test/files/neg/t6889.check
@@ -1,7 +1,10 @@
t6889.scala:16: error: the result type of an implicit conversion must be more specific than AnyRef
def f(x: Dingo): AnyRef = x // fail - no conversion to AnyRef
^
-t6889.scala:17: error: an expression of type Null is ineligible for implicit conversion
+t6889.scala:17: error: the result type of an implicit conversion must be more specific than Object
+ def f2(x: Dingo): Object = x // fail - no conversion to Object
+ ^
+t6889.scala:18: error: an expression of type Null is ineligible for implicit conversion
var x: Int = null // fail - no conversion from Null
^
-two errors found
+three errors found
diff --git a/test/files/neg/t6889.scala b/test/files/neg/t6889.scala
index ef1963669c..3fc235bf7e 100644
--- a/test/files/neg/t6889.scala
+++ b/test/files/neg/t6889.scala
@@ -14,5 +14,6 @@ object Test {
trait Dingo extends Any with bippy.Bippy[foo.unrelated.Unrelated]
def f(x: Dingo): AnyRef = x // fail - no conversion to AnyRef
+ def f2(x: Dingo): Object = x // fail - no conversion to Object
var x: Int = null // fail - no conversion from Null
}
diff --git a/test/files/pos/t10206.scala b/test/files/pos/t10206.scala
new file mode 100644
index 0000000000..3ddd1ea2fd
--- /dev/null
+++ b/test/files/pos/t10206.scala
@@ -0,0 +1,15 @@
+class Foo(val bar: String)
+
+object Foo {
+ implicit class Enrich(foo: Foo) {
+ def clone(x: Int, y: Int): Int = x + y
+ }
+}
+
+object Main extends App {
+ val foo = new Foo("hello")
+ println(foo.clone(1, 2)) // <- does not compile
+ // the implicit view was being disqualified because a new check in the compiler
+ // that implicit views must not target Any or AnyRef considered an implicit search
+ // for `foo.type => ?{def clone: ?}` to targeted AnyRef.
+}
diff --git a/test/files/run/repl-colon-type.check b/test/files/run/repl-colon-type.check
index 5b7a3c7506..1217e8d8c2 100644
--- a/test/files/run/repl-colon-type.check
+++ b/test/files/run/repl-colon-type.check
@@ -75,7 +75,7 @@ TypeRef(
)
TypeRef(
TypeSymbol(
- sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] with FilteredTraversableInternal[A,List[A]] with Serializable
+ sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] with Serializable
)
args = List(
@@ -142,7 +142,7 @@ TypeRef(
args = List(
TypeRef(
TypeSymbol(
- sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] with FilteredTraversableInternal[A,List[A]] with Serializable
+ sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] with Serializable
)
args = List(
@@ -175,7 +175,7 @@ PolyType(
args = List(
TypeRef(
TypeSymbol(
- sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] with FilteredTraversableInternal[A,List[A]] with Serializable
+ sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] with Serializable
)
args = List(TypeParamTypeRef(TypeParam(T <: AnyVal)))
@@ -198,7 +198,7 @@ PolyType(
params = List(TermSymbol(x: T), TermSymbol(y: List[U]))
resultType = TypeRef(
TypeSymbol(
- sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] with FilteredTraversableInternal[A,List[A]] with Serializable
+ sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] with Serializable
)
args = List(TypeParamTypeRef(TypeParam(U >: T)))