summaryrefslogtreecommitdiff
path: root/src/library/scala/runtime/StringAdd.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scala/runtime/StringAdd.scala')
-rw-r--r--src/library/scala/runtime/StringAdd.scala41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/library/scala/runtime/StringAdd.scala b/src/library/scala/runtime/StringAdd.scala
new file mode 100644
index 0000000000..272e2cbb08
--- /dev/null
+++ b/src/library/scala/runtime/StringAdd.scala
@@ -0,0 +1,41 @@
+/* *\
+** ________ ___ __ ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2002-2007, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ |_| **
+** **
+\* */
+
+// $Id$
+
+
+package scala.runtime
+
+
+import Predef._
+
+object StringAdd {
+ // Needed for the format hack. Can be removed once we drop 1.4
+ lazy val formatMethod: java.lang.reflect.Method = {
+ val paramTypes = Array[Class[T] forSome { type T }](classOf[String], classOf[Array[Object]])
+ classOf[String].getDeclaredMethod("format", paramTypes)
+ }
+}
+final class StringAdd(self: Any) {
+
+ def +(other: String) = self.toString + other
+
+ /** Returns string formatted according to given <code>format</code> string.
+ * Format strings are as for <code>String.format</code>
+ * (@see java.lang.String.format).
+ * Only works on Java 1.5 or higher!
+ */
+ def formatted(format: String): String = {
+ // This should be:
+ // String.format(format, Array(self.asInstanceOf[Object]))
+ // However, the line above does not compile on Java 1.4 because String.format exists only in 1.5
+ // Therefore, we do the following hack:
+ val args = Array(self.asInstanceOf[Object])
+ StringAdd.formatMethod.invoke(null, Array[Object](format, args)).asInstanceOf[String]
+ }
+}