diff options
author | Paul Phillips <paulp@improving.org> | 2011-02-03 22:26:35 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-02-03 22:26:35 +0000 |
commit | 1038b708f23374439310f3a700a2e1170e2b61a0 (patch) | |
tree | 8179368c54ca2c1ad63ac1d05f9266d278ead0b4 /src/compiler/scala/tools/nsc/interpreter/TypeStrings.scala | |
parent | c332e580a3fec48dc193b518666f93c589163045 (diff) | |
download | scala-1038b708f23374439310f3a700a2e1170e2b61a0.tar.gz scala-1038b708f23374439310f3a700a2e1170e2b61a0.tar.bz2 scala-1038b708f23374439310f3a700a2e1170e2b61a0.zip |
A couple long-threatened repl features.
1) :implicits command.
scala> :implicits
No implicits have been imported other than those in Predef.
scala> import BigDecimal._
import BigDecimal._
scala> class Bippy[T] { implicit def makeMeABippy[U <: T] : Bippy[U] = new Bippy[U] }
defined class Bippy
scala> val bippy = new Bippy[String]
bippy: Bippy[String] = Bippy@4f0bd71c
scala> import bippy._
import bippy._
scala> :implicits
/* 3 implicit members imported from scala.math.BigDecimal */
/* 3 defined in scala.math.BigDecimal */
implicit def double2bigDecimal(d: Double): scala.math.BigDecimal
implicit def int2bigDecimal(i: Int): scala.math.BigDecimal
implicit def long2bigDecimal(l: Long): scala.math.BigDecimal
/* 1 implicit members imported from Bippy */
/* 1 defined in Bippy */
implicit def makeMeABippy[U <: T]: Bippy[U]
2) This one I will probably have to optionize, but: automatic rebinding
to a more specific type, signalled via tab-completion failures. More
easily demonstrated than explained.
scala> val x: AnyRef = "abc" // does not apply to var/def
x: AnyRef = abc
scala> x.<tab>
asInstanceOf isInstanceOf toString
scala> x.<tab>
Rebinding stable value x from AnyRef to java.lang.String
+ asInstanceOf charAt codePointAt codePointBefore codePointCount
compareTo compareToIgnoreCase concat contains contentEquals endsWith
equalsIgnoreCase getBytes getChars indexOf intern isEmpty isInstanceOf
lastIndexOf length matches offsetByCodePoints regionMatches replace
replaceAll replaceFirst split startsWith subSequence substring
toCharArray toLowerCase toString toUpperCase trim
scala> x
res0: java.lang.String = abc
Who's up for some reviewing? I'm taking volunteers! No review.
Diffstat (limited to 'src/compiler/scala/tools/nsc/interpreter/TypeStrings.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/interpreter/TypeStrings.scala | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/interpreter/TypeStrings.scala b/src/compiler/scala/tools/nsc/interpreter/TypeStrings.scala index f72409c8e7..4bc2246468 100644 --- a/src/compiler/scala/tools/nsc/interpreter/TypeStrings.scala +++ b/src/compiler/scala/tools/nsc/interpreter/TypeStrings.scala @@ -41,7 +41,18 @@ trait TypeStrings { else if (primitives(s)) "scala." + s.capitalize else primitiveMap.getOrElse(s, NameTransformer decode s) } - def scalaName(clazz: JClass): String = scalaName(clazz.getName) + def scalaName(clazz: JClass): String = { + val name = clazz.getName + scalaName(clazz.getEnclosingClass match { + case null => name + case encl => + val enclName = encl.getName + if (name startsWith (enclName + "$")) + enclName + "." + (name stripPrefix (enclName + "$")) + else + name + }) + } def scalaName(m: ClassManifest[_]): String = scalaName(m.erasure) def anyClass(x: Any): JClass = if (x == null) null else x.asInstanceOf[AnyRef].getClass @@ -55,8 +66,9 @@ trait TypeStrings { if (xs.isEmpty) "_" else scalaName(xs.head) } - private def tparamString(clazz: JClass): String = + private def tparamString(clazz: JClass): String = { brackets(clazz.getTypeParameters map tvarString: _*) + } private def tparamString[T: Manifest] : String = brackets(manifest[T].typeArguments map (m => tvarString(List(m.erasure))): _*) @@ -76,6 +88,20 @@ trait TypeStrings { /** Reducing fully qualified noise for some common packages. */ + def quieter(tpe: String, alsoStrip: String*): String = { + val transforms = List( + "scala.collection.immutable." -> "immutable.", + "scala.collection.mutable." -> "mutable.", + "scala.collection.generic." -> "generic.", + "java.lang." -> "jl.", + "scala.runtime." -> "runtime." + ) ++ (alsoStrip map (_ -> "")) + + transforms.foldLeft(tpe) { + case (res, (k, v)) => res.replaceAll(k, v) + } + } + val typeTransforms = List( "java.lang." -> "", "scala.collection.immutable." -> "immutable.", |