19b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver/* 29b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * Copyright 2015, Google Inc. 39b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * All rights reserved. 49b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * 59b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * Redistribution and use in source and binary forms, with or without 69b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * modification, are permitted provided that the following conditions are 79b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * met: 89b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * 99b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * * Redistributions of source code must retain the above copyright 109b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * notice, this list of conditions and the following disclaimer. 119b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * * Redistributions in binary form must reproduce the above 129b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * copyright notice, this list of conditions and the following disclaimer 139b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * in the documentation and/or other materials provided with the 149b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * distribution. 159b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * * Neither the name of Google Inc. nor the names of its 169b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * contributors may be used to endorse or promote products derived from 179b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * this software without specific prior written permission. 189b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * 199b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 209b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 219b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 229b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 239b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 249b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 259b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 269b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 279b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 289b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 299b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 309b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver */ 319b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver 329b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruverpackage org.jf.smalidea.dexlib; 339b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver 349b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruverimport org.jf.dexlib2.base.BaseTryBlock; 359b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruverimport org.jf.smalidea.psi.impl.SmaliCatchStatement; 369b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver 379b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruverimport javax.annotation.Nonnull; 389b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruverimport java.util.Arrays; 399b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruverimport java.util.List; 409b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver 419b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruverpublic class SmalideaTryBlock extends BaseTryBlock<SmalideaExceptionHandler> { 429b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver @Nonnull private final SmaliCatchStatement catchStatement; 439b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver 449b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver public SmalideaTryBlock(@Nonnull SmaliCatchStatement catchStatement) { 459b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver this.catchStatement = catchStatement; 469b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver } 479b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver 489b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver @Override public int getCodeUnitCount() { 499b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver int endOffset = catchStatement.getEndLabel().resolve().getOffset() / 2; 509b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver return endOffset - getStartCodeAddress(); 519b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver } 529b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver 539b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver @Override public int getStartCodeAddress() { 549b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver // TODO: how to handle references to non-existent labels? 559b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver return catchStatement.getStartLabel().resolve().getOffset() / 2; 569b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver } 579b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver 589b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver @Nonnull @Override public List<? extends SmalideaExceptionHandler> getExceptionHandlers() { 599b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver return Arrays.asList(new SmalideaExceptionHandler(catchStatement)); 609b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver } 619b97cfdf4882d4e306e3f81709be4649031cd799Ben Gruver} 62