ReferenceFormatter.java revision 4b72225e9d81201838f387171a68a832486903f9
1/* 2 * [The "BSD licence"] 3 * Copyright (c) 2010 Ben Gruver 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29package org.jf.baksmali.Adaptors; 30 31import org.jf.util.IndentingWriter; 32import org.jf.dexlib.*; 33import org.jf.dexlib.Util.Utf8Utils; 34 35import java.io.IOException; 36 37public class ReferenceFormatter { 38 public static void writeReference(IndentingWriter writer, Item item) throws IOException { 39 switch (item.getItemType()) { 40 case TYPE_METHOD_ID_ITEM: 41 writeMethodReference(writer, (MethodIdItem)item); 42 return; 43 case TYPE_FIELD_ID_ITEM: 44 writeFieldReference(writer, (FieldIdItem)item); 45 return; 46 case TYPE_STRING_ID_ITEM: 47 writeStringReference(writer, (StringIdItem)item); 48 return; 49 case TYPE_TYPE_ID_ITEM: 50 writeTypeReference(writer, (TypeIdItem)item); 51 return; 52 } 53 } 54 55 public static void writeMethodReference(IndentingWriter writer, MethodIdItem item) throws IOException { 56 writer.write(item.getContainingClass().getTypeDescriptor()); 57 writer.write("->"); 58 writer.write(item.getMethodName().getStringValue()); 59 writer.write(item.getPrototype().getPrototypeString()); 60 } 61 62 public static void writeFieldReference(IndentingWriter writer, FieldIdItem item) throws IOException { 63 writer.write(item.getContainingClass().getTypeDescriptor()); 64 writer.write("->"); 65 writer.write(item.getFieldName().getStringValue()); 66 writer.write(':'); 67 writer.write(item.getFieldType().getTypeDescriptor()); 68 } 69 70 public static void writeStringReference(IndentingWriter writer, StringIdItem item) throws IOException { 71 writer.write('"'); 72 Utf8Utils.writeEscapedString(writer, item.getStringValue()); 73 writer.write('"'); 74 } 75 76 public static void writeTypeReference(IndentingWriter writer, TypeIdItem item) throws IOException { 77 writer.write(item.getTypeDescriptor()); 78 } 79} 80