diff options
author | Rex Kerr <ichoran@gmail.com> | 2015-03-31 14:56:53 -0700 |
---|---|---|
committer | Stefan Zeiger <szeiger@novocode.com> | 2016-08-12 13:50:37 +0200 |
commit | 30876fe2dd8cbe657a6cad6b11bbc34f10c29b36 (patch) | |
tree | f7cb3a8de91ac79ce22308f7a877c55f4dbf6755 /src/library | |
parent | 6612ba010b0e70c53550d1e47141c8dc89a55f23 (diff) | |
download | scala-30876fe2dd8cbe657a6cad6b11bbc34f10c29b36.tar.gz scala-30876fe2dd8cbe657a6cad6b11bbc34f10c29b36.tar.bz2 scala-30876fe2dd8cbe657a6cad6b11bbc34f10c29b36.zip |
SI-9019 TraversableLike stringPrefix broken for inner classes
This version preserves outer class and object names but discards
any part of the name after a `$` that does not start with an upper-case
letter. When an integer literal occurs after a `$`, the prefix up to
that point is dropped so that classes defined within methods appear as
top-level.
Diffstat (limited to 'src/library')
-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. |