summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-11-27 17:57:08 +0000
committerMartin Odersky <odersky@gmail.com>2007-11-27 17:57:08 +0000
commit08a4772207c5500cc93b3cdedff8bfb2f4322a66 (patch)
tree1dc1531fec832200d852601a8222a153fcb3aafe /src/library
parentf5c98713dea7587f103f2aaefc01b285a87619aa (diff)
downloadscala-08a4772207c5500cc93b3cdedff8bfb2f4322a66.tar.gz
scala-08a4772207c5500cc93b3cdedff8bfb2f4322a66.tar.bz2
scala-08a4772207c5500cc93b3cdedff8bfb2f4322a66.zip
Made format compatibkle with JDK 1.4. Fixed #197
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/runtime/StringAdd.scala18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/library/scala/runtime/StringAdd.scala b/src/library/scala/runtime/StringAdd.scala
index 2ca64538d9..8591ae3313 100644
--- a/src/library/scala/runtime/StringAdd.scala
+++ b/src/library/scala/runtime/StringAdd.scala
@@ -14,6 +14,13 @@ 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(classOf[String], classOf[Array[Object]])
+ classOf[String].getDeclaredMethod("format", paramTypes)
+ }
+}
final class StringAdd(self: Any) {
def +(other: String) = self.toString + other
@@ -21,7 +28,14 @@ final class StringAdd(self: Any) {
/** Formats string 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 format(format: String): String =
- String.format(format, Array(self.asInstanceOf[Object]))
+ def format(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]
+ }
}