scala/scala — pull request #2335 by retronym (2013-03-29 12:50:01+00:00)
Title: Optimize file metadata access

Background: When profiling an application that was using the interpreter to compile
a script, a lot of time was reported in `exists`/`isDirectory`/`isFile`. I happened to be profiling on Windows.

Turns out some of these calls are redundant, this PR eliminate two such places.

Here's an example of how it helps:

Taking a Hello, Akka! application, and compiling it with the compiler
and library on a directory classpath (ie, using build/quick):

class HelloActor extends Actor {
def receive = {
case "hello" => println("hello back at you")
case _ => println("huh?")
}
}

object Main extends App {
val system = ActorSystem("HelloSystem")
// default Actor constructor
val helloActor = system.actorOf(Props[HelloActor], name = "helloactor")
helloActor ! "hello"
helloActor ! "buenos dias"
}

% qbin/scalac -Ystatistics -classpath ~/.ivy2/cache/com.typesafe.akka/akka-actor_2.10/jars/akka-actor_2.10-2.1.1.jar:/Users/jason/.ivy2/cache/com.typesafe/config/bundles/config-1.0.0.jar sandbox/test.scala 2>&1 | grep File

```
Before
----------------------------------
File.isFile calls : 7620
File.isDirectory calls : 8348
File.exists calls : 5770

After
----------------------------------
File.isFile calls : 7620
File.isDirectory calls : 2319
File.exists calls : 345
```