1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 Google Inc.
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.android.hit;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.BufferedInputStream;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.DataInputStream;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileInputStream;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Map;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Set;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Main
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void main(String argv[]) {
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileInputStream fis;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BufferedInputStream bis;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DataInputStream dis;
31de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fis = new FileInputStream(argv[0]);
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bis = new BufferedInputStream(fis);
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            dis = new DataInputStream(bis);
36de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            State state = (new HprofParser(dis)).parse();
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            dis.close();
40de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            testClassesQuery(state);
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            testAllClassesQuery(state);
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            testFindInstancesOf(state);
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            testFindAllInstancesOf(state);
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            e.printStackTrace();
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static void testClassesQuery(State state) {
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String[] x = new String[] {
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "char[",
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "javax.",
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "org.xml.sax"
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        };
56de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Map<String, Set<ClassObj>> someClasses = Queries.classes(state, x);
58de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (String thePackage: someClasses.keySet()) {
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.println("------------------- " + thePackage);
61de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Set<ClassObj> classes = someClasses.get(thePackage);
63de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (ClassObj theClass: classes) {
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println("     " + theClass.mClassName);
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
69de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static void testAllClassesQuery(State state) {
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Map<String, Set<ClassObj>> allClasses = Queries.allClasses(state);
72de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (String thePackage: allClasses.keySet()) {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.println("------------------- " + thePackage);
75de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Set<ClassObj> classes = allClasses.get(thePackage);
77de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (ClassObj theClass: classes) {
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println("     " + theClass.mClassName);
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static void testFindInstancesOf(State state) {
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Instance[] instances = Queries.instancesOf(state, "java.lang.String");
86de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("There are " + instances.length + " Strings.");
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static void testFindAllInstancesOf(State state) {
91de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro        Instance[] instances = Queries.allInstancesOf(state,
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "android.graphics.drawable.Drawable");
93de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("There are " + instances.length
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + " instances of Drawables and its subclasses.");
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
98