diff options
author | Stefan Zeiger <szeiger@novocode.com> | 2016-08-12 16:24:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-12 16:24:44 +0200 |
commit | 0d9587a563ff26852732e9bb751f601972fecddc (patch) | |
tree | 45a58df0c2c749417e0af6e5a7ba798ffe8f8ed4 /src | |
parent | 14c02acf4c398bcfe293754ea4757b461f4aa653 (diff) | |
parent | 30876fe2dd8cbe657a6cad6b11bbc34f10c29b36 (diff) | |
download | scala-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.scala | 21 |
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. |