summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/runtime/JavaMirrors.scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2014-01-28 12:23:47 +0300
committerEugene Burmako <xeno.by@gmail.com>2014-02-14 14:16:42 +0100
commit202eb73b6cd6ebb3e20ff9f0a198c4ea83319851 (patch)
tree1fb59abe86590e8c03baff04099f2eda5bc788ac /src/reflect/scala/reflect/runtime/JavaMirrors.scala
parentada0252d4494611904c15cc5da72654c1a180a8f (diff)
downloadscala-202eb73b6cd6ebb3e20ff9f0a198c4ea83319851.tar.gz
scala-202eb73b6cd6ebb3e20ff9f0a198c4ea83319851.tar.bz2
scala-202eb73b6cd6ebb3e20ff9f0a198c4ea83319851.zip
adds showDeclaration(sym: Symbol): String
As per Paul’s request, this commit exposes Symbol.defString, although in a different way to ensure consistency with our other prettyprinting facilities provided in the reflection API.
Diffstat (limited to 'src/reflect/scala/reflect/runtime/JavaMirrors.scala')
-rw-r--r--src/reflect/scala/reflect/runtime/JavaMirrors.scala33
1 files changed, 4 insertions, 29 deletions
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
index bf8a3f0ae2..1e64b805e9 100644
--- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala
+++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
@@ -292,32 +292,7 @@ private[scala] trait JavaMirrors extends internal.SymbolTable with api.JavaUnive
jfield.set(receiver, if (isDerivedValueClass) unboxer.invoke(value) else value)
}
- override def toString = s"field mirror for ${symbol.fullName} (bound to $receiver)"
- }
-
- private def showMethodSig(symbol: MethodSymbol): String = {
- var sig = s"${symbol.fullName}"
- if (symbol.typeParams.nonEmpty) {
- def showTparam(tparam: Symbol) =
- tparam.typeSignature match {
- case tpe @ TypeBounds(_, _) => s"${tparam.name}$tpe"
- case _ => tparam.name
- }
- def showTparams(tparams: List[Symbol]) = "[" + (tparams map showTparam mkString ", ") + "]"
- sig += showTparams(symbol.typeParams)
- }
- if (symbol.paramss.nonEmpty) {
- def showParam(param: Symbol) = s"${param.name}: ${param.typeSignature}"
- def showParams(params: List[Symbol]) = {
- val s_mods = if (params.nonEmpty && params(0).hasFlag(IMPLICIT)) "implicit " else ""
- val s_params = params map showParam mkString ", "
- "(" + s_mods + s_params + ")"
- }
- def showParamss(paramss: List[List[Symbol]]) = paramss map showParams mkString ""
- sig += showParamss(symbol.paramss)
- }
- sig += s": ${symbol.returnType}"
- sig
+ override def toString = s"field mirror for ${showDeclaration(symbol)} (bound to $receiver)"
}
// the "symbol == Any_getClass || symbol == Object_getClass" test doesn't cut it
@@ -372,7 +347,7 @@ private[scala] trait JavaMirrors extends internal.SymbolTable with api.JavaUnive
override def toString = {
val what = if (symbol.isConstructor) "constructor mirror" else "method mirror"
- s"$what for ${showMethodSig(symbol)} (bound to $receiver)"
+ s"$what for ${showDeclaration(symbol)} (bound to $receiver)"
}
}
@@ -468,7 +443,7 @@ private[scala] trait JavaMirrors extends internal.SymbolTable with api.JavaUnive
private class BytecodelessMethodMirror[T: ClassTag](val receiver: T, val symbol: MethodSymbol)
extends MethodMirror {
def bind(newReceiver: Any) = new BytecodelessMethodMirror(newReceiver.asInstanceOf[T], symbol)
- override def toString = s"bytecodeless method mirror for ${showMethodSig(symbol)} (bound to $receiver)"
+ override def toString = s"bytecodeless method mirror for ${showDeclaration(symbol)} (bound to $receiver)"
def apply(args: Any*): Any = {
// checking type conformance is too much of a hassle, so we don't do it here
@@ -482,7 +457,7 @@ private[scala] trait JavaMirrors extends internal.SymbolTable with api.JavaUnive
if (!perfectMatch && !varargMatch) {
val n_arguments = if (isVarArgsList(params)) s"${params.length - 1} or more" else s"${params.length}"
val s_arguments = if (params.length == 1 && !isVarArgsList(params)) "argument" else "arguments"
- abort(s"${showMethodSig(symbol)} takes $n_arguments $s_arguments")
+ abort(s"${showDeclaration(symbol)} takes $n_arguments $s_arguments")
}
def objReceiver = receiver.asInstanceOf[AnyRef]