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