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