summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefan Zeiger <szeiger@novocode.com>2016-08-12 16:24:44 +0200
committerGitHub <noreply@github.com>2016-08-12 16:24:44 +0200
commit0d9587a563ff26852732e9bb751f601972fecddc (patch)
tree45a58df0c2c749417e0af6e5a7ba798ffe8f8ed4 /src
parent14c02acf4c398bcfe293754ea4757b461f4aa653 (diff)
parent30876fe2dd8cbe657a6cad6b11bbc34f10c29b36 (diff)
downloadscala-0d9587a563ff26852732e9bb751f601972fecddc.tar.gz
scala-0d9587a563ff26852732e9bb751f601972fecddc.tar.bz2
scala-0d9587a563ff26852732e9bb751f601972fecddc.zip
Merge pull request #5258 from szeiger/issue/9019
SI-9019 TraversableLike stringPrefix broken for inner classes
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/collection/TraversableLike.scala21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/library/scala/collection/TraversableLike.scala b/src/library/scala/collection/TraversableLike.scala
index d914f2e0ff..be2f427ea4 100644
--- a/src/library/scala/collection/TraversableLike.scala
+++ b/src/library/scala/collection/TraversableLike.scala
@@ -606,12 +606,21 @@ trait TraversableLike[+A, +Repr] extends Any
* simple name of the collection class $coll.
*/
def stringPrefix : String = {
- var string = repr.getClass.getName
- val idx1 = string.lastIndexOf('.' : Int)
- if (idx1 != -1) string = string.substring(idx1 + 1)
- val idx2 = string.indexOf('$')
- if (idx2 != -1) string = string.substring(0, idx2)
- string
+ val fqn = repr.getClass.getName
+ val cls = {
+ val idx1 = fqn.lastIndexOf('.' : Int)
+ if (idx1 != -1) fqn.substring(idx1 + 1) else fqn
+ }
+ val parts = cls.split('$')
+ val last = parts.length - 1
+ parts.zipWithIndex.foldLeft("") { case (z, (s, i)) =>
+ if (s.isEmpty) z
+ else if (i != last && s.forall(java.lang.Character.isDigit)) "" // drop prefix in method-local classes
+ else if (i == 0 || java.lang.Character.isUpperCase(s.charAt(0))) {
+ if (z.isEmpty) s else z + '.' + s
+ }
+ else z
+ }
}
/** Creates a non-strict view of this $coll.