12f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com/*
22f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * [The "BSD licence"]
32f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * Copyright (c) 2011 Ben Gruver
42f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * All rights reserved.
52f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com *
62f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * Redistribution and use in source and binary forms, with or without
72f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * modification, are permitted provided that the following conditions
82f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * are met:
92f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * 1. Redistributions of source code must retain the above copyright
102f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com *    notice, this list of conditions and the following disclaimer.
112f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * 2. Redistributions in binary form must reproduce the above copyright
122f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com *    notice, this list of conditions and the following disclaimer in the
132f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com *    documentation and/or other materials provided with the distribution.
142f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * 3. The name of the author may not be used to endorse or promote products
152f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com *    derived from this software without specific prior written permission.
162f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com *
172f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
182f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
192f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
202f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
212f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
222f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
232f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
242f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
252f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
262f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com */
282f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com
292f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.compackage org.jf.dexlib.Code.Analysis;
302f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com
312f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.comimport org.jf.dexlib.ClassDefItem;
322f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.comimport org.jf.dexlib.DexFile;
332f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.comimport org.jf.dexlib.TypeIdItem;
342f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com
352f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.comimport java.util.HashMap;
362f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com
372f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com/**
382f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * Keeps a simple map of classes defined in a dex file, allowing you to look them up by TypeIdItem or name
392f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com */
402f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.compublic class DexFileClassMap {
412f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com    private final HashMap<String, ClassDefItem> definedClasses = new HashMap<String, ClassDefItem>();
422f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com
432f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com    public DexFileClassMap(DexFile dexFile) {
442f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com        for (ClassDefItem classDefItem: dexFile.ClassDefsSection.getItems()) {
452f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com            definedClasses.put(classDefItem.getClassType().getTypeDescriptor(), classDefItem);
462f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com        }
472f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com    }
482f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com
492f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com    public ClassDefItem getClassDefByName(String typeName) {
502f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com        return definedClasses.get(typeName);
512f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com    }
522f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com
532f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com    public ClassDefItem getClassDefByType(TypeIdItem typeIdItem) {
542f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com        return definedClasses.get(typeIdItem.getTypeDescriptor());
552f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com    }
562f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com}
57