LocalFormatter.java revision 3e4e5ec7a4f2bcd82e21ba7caf93c60a981422ab
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2013, Google Inc. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * All rights reserved. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * modification, are permitted provided that the following conditions are 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * met: 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in the documentation and/or other materials provided with the 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distribution. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * this software without specific prior written permission. 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.jf.baksmali.Adaptors.Debug; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.jf.baksmali.Adaptors.ReferenceFormatter; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.jf.util.IndentingWriter; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import javax.annotation.Nonnull; 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import javax.annotation.Nullable; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.IOException; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class LocalFormatter { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Writes out the given local info 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The written string will be something like: 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "localVar":Ljava/lang/String;, "SomeSignature" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "localVar":Ljava/lang/String; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "localVar":V, "SomeSignature" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * null:Ljava/lang/String;, "SomeSignature" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * null:V, "SomeSignature" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * One of name, type or signature must be non-null 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static void writeLocal(@Nonnull IndentingWriter writer, @Nullable String name, @Nullable String type, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Nullable String signature) throws IOException { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name != null) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReferenceFormatter.writeStringReference(writer, name); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.write("null"); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci writer.write(':'); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type != null) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.write(type); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) writer.write("V"); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (signature != null) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.write(", "); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReferenceFormatter.writeStringReference(writer, signature); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)