Fix our test runner to look inside source files for package declarations.

The relevant libcore .java files were all under test/java/ directories, but
that's not generally true, and not true in the specific case of caliper's
benchmarks.
diff --git a/libcore/tools/dalvik_jtreg/java/dalvik/jtreg/Strings.java b/libcore/tools/dalvik_jtreg/java/dalvik/jtreg/Strings.java
index 9868a93..4719d08 100644
--- a/libcore/tools/dalvik_jtreg/java/dalvik/jtreg/Strings.java
+++ b/libcore/tools/dalvik_jtreg/java/dalvik/jtreg/Strings.java
@@ -17,6 +17,11 @@
 
 package dalvik.jtreg;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
@@ -26,6 +31,19 @@
  */
 public class Strings {
 
+    static String readFile(File f) throws IOException {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in =
+                new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"));
+        String line;
+        while ((line = in.readLine()) != null) {
+            result.append(line);
+            result.append('\n');
+        }
+        in.close();
+        return result.toString();
+    }
+
     static String join(Object[] objects, String delimiter) {
         return join(Arrays.asList(objects), delimiter);
     }
diff --git a/libcore/tools/dalvik_jtreg/java/dalvik/jtreg/TestFinder.java b/libcore/tools/dalvik_jtreg/java/dalvik/jtreg/TestFinder.java
index 03c24be..9147ddc 100644
--- a/libcore/tools/dalvik_jtreg/java/dalvik/jtreg/TestFinder.java
+++ b/libcore/tools/dalvik_jtreg/java/dalvik/jtreg/TestFinder.java
@@ -17,8 +17,11 @@
 package dalvik.jtreg;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.LinkedHashSet;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * A pluggable strategy for converting files into test runs.
@@ -73,7 +76,24 @@
             throw new IllegalArgumentException("Not a .java file: " + file);
         }
 
-        String fqClass = filePath.replaceAll(".*/test/java/", "");
-        return fqClass.replace('/', '.').substring(0, fqClass.length() - 5);
+        // We can get the unqualified class name from the path.
+        // It's the last element minus the trailing ".java".
+        String filename = file.getName();
+        String className = filename.substring(0, filename.length() - 5);
+
+        // For the package, the only foolproof way is to look for the package
+        // declaration inside the file.
+        try {
+            String content = Strings.readFile(file);
+            Pattern packagePattern = Pattern.compile("(?m)^\\s*package\\s+(\\S+)\\s*;");
+            Matcher packageMatcher = packagePattern.matcher(content);
+            if (!packageMatcher.find()) {
+                throw new IllegalArgumentException("No package in '" + file + "'\n"+content);
+            }
+            String packageName = packageMatcher.group(1);
+            return packageName + "." + className;
+        } catch (IOException ex) {
+            throw new IllegalArgumentException("Couldn't read '" + file + "': " + ex.getMessage());
+        }
     }
 }