16eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com/* 26eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * [The "BSD licence"] 36eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * Copyright (c) 2010 Ben Gruver 46eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * All rights reserved. 56eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * 66eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * Redistribution and use in source and binary forms, with or without 76eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * modification, are permitted provided that the following conditions 86eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * are met: 96eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * 1. Redistributions of source code must retain the above copyright 106eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * notice, this list of conditions and the following disclaimer. 116eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * 2. Redistributions in binary form must reproduce the above copyright 126eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * notice, this list of conditions and the following disclaimer in the 136eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * documentation and/or other materials provided with the distribution. 146eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * 3. The name of the author may not be used to endorse or promote products 156eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * derived from this software without specific prior written permission. 166eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * 176eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 186eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 196eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 206eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 216eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 226eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 236eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 246eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 256eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 266eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com */ 286eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com 296eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.compackage org.jf.baksmali.Adaptors; 306eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com 31a8e05220c14778d93c97911044ff5124aadbd77cBen Gruverimport org.jf.dexlib2.ReferenceType; 32a8e05220c14778d93c97911044ff5124aadbd77cBen Gruverimport org.jf.dexlib2.iface.reference.*; 33a8e05220c14778d93c97911044ff5124aadbd77cBen Gruverimport org.jf.dexlib2.util.ReferenceUtil; 344b72225e9d81201838f387171a68a832486903f9JesusFreke@JesusFreke.comimport org.jf.util.IndentingWriter; 359f1d05eb44d85183651753d9b83ae3115a8ea256Ben Gruverimport org.jf.util.StringUtils; 366eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com 376eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.comimport java.io.IOException; 386eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com 396eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.compublic class ReferenceFormatter { 407ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver public static void writeStringReference(IndentingWriter writer, String item) throws IOException { 416eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com writer.write('"'); 427ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver StringUtils.writeEscapedString(writer, item); 436eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com writer.write('"'); 446eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com } 45a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver 46a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver public static void writeReference(IndentingWriter writer, int referenceType, 47a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver Reference reference) throws IOException { 48a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver switch (referenceType) { 49a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver case ReferenceType.STRING: 50a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver writeStringReference(writer, ((StringReference)reference).getString()); 51a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver return; 52a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver case ReferenceType.TYPE: 53a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver writer.write(((TypeReference)reference).getType()); 54a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver return; 55a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver case ReferenceType.METHOD: 56a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver ReferenceUtil.writeMethodDescriptor(writer, (MethodReference)reference); 57a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver return; 58a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver case ReferenceType.FIELD: 59a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver ReferenceUtil.writeFieldDescriptor(writer, (FieldReference)reference); 604f2620415d505a35d2d14b866cde10a54b1b7c8cBen Gruver return; 614f2620415d505a35d2d14b866cde10a54b1b7c8cBen Gruver default: 624f2620415d505a35d2d14b866cde10a54b1b7c8cBen Gruver throw new IllegalStateException("Unknown reference type"); 63a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver } 64a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver } 656eae34831fee1f116f3a453bdc5e143d68e05e03JesusFreke@JesusFreke.com} 66