summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorRex Kerr <ichoran@gmail.com>2015-03-31 14:56:53 -0700
committerStefan Zeiger <szeiger@novocode.com>2016-08-12 13:50:37 +0200
commit30876fe2dd8cbe657a6cad6b11bbc34f10c29b36 (patch)
treef7cb3a8de91ac79ce22308f7a877c55f4dbf6755 /src/library
parent6612ba010b0e70c53550d1e47141c8dc89a55f23 (diff)
downloadscala-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.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.