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