1754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver/* 2754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * Copyright 2012, Google Inc. 3754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * All rights reserved. 4754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * 5754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * Redistribution and use in source and binary forms, with or without 6754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * modification, are permitted provided that the following conditions are 7754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * met: 8754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * 9754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * * Redistributions of source code must retain the above copyright 10754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * notice, this list of conditions and the following disclaimer. 11754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * * Redistributions in binary form must reproduce the above 12754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * copyright notice, this list of conditions and the following disclaimer 13754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * in the documentation and/or other materials provided with the 14754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * distribution. 15754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * * Neither the name of Google Inc. nor the names of its 16754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * contributors may be used to endorse or promote products derived from 17754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * this software without specific prior written permission. 18754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * 19754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver */ 31754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver 32754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruverpackage org.jf.baksmali.Adaptors.Debug; 33754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver 34754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruverimport org.jf.baksmali.Adaptors.RegisterFormatter; 35754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruverimport org.jf.dexlib2.iface.debug.RestartLocal; 36754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruverimport org.jf.util.IndentingWriter; 37754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver 38754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruverimport javax.annotation.Nonnull; 39754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruverimport java.io.IOException; 40754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver 41754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruverpublic class RestartLocalMethodItem extends DebugMethodItem { 42754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver @Nonnull private final RestartLocal restartLocal; 43754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver @Nonnull private final RegisterFormatter registerFormatter; 44754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver 45754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver public RestartLocalMethodItem(int codeAddress, int sortOrder, @Nonnull RegisterFormatter registerFormatter, 46754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver @Nonnull RestartLocal restartLocal) { 47754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver super(codeAddress, sortOrder); 48754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver this.restartLocal = restartLocal; 49754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver this.registerFormatter = registerFormatter; 50754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver } 51754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver 52754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver @Override 53754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver public boolean writeTo(IndentingWriter writer) throws IOException { 54754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver writer.write(".restart local "); 55754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver registerFormatter.writeTo(writer, restartLocal.getRegister()); 56754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver 57754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver String name = restartLocal.getName(); 583e4e5ec7a4f2bcd82e21ba7caf93c60a981422abBen Gruver String type = restartLocal.getType(); 593e4e5ec7a4f2bcd82e21ba7caf93c60a981422abBen Gruver String signature = restartLocal.getSignature(); 603e4e5ec7a4f2bcd82e21ba7caf93c60a981422abBen Gruver if (name != null || type != null || signature != null) { 614499f63c6c4beb21ff52fb0da0d192e9e2bd39a9Ben Gruver writer.write(" # "); 623e4e5ec7a4f2bcd82e21ba7caf93c60a981422abBen Gruver LocalFormatter.writeLocal(writer, name, type, signature); 63754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver } 64754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver return true; 65754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver } 66754b3c4dc009b7a02e39001560c3f0fd6a7cc2c0Ben Gruver} 67