BuilderInstruction.java revision 6762350ca0e11ca69ecb2c7bcf78cbafa2103ad6
1e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver/* 2e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * Copyright 2012, Google Inc. 3e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * All rights reserved. 4e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * 5e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * Redistribution and use in source and binary forms, with or without 6e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * modification, are permitted provided that the following conditions are 7e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * met: 8e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * 9e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * * Redistributions of source code must retain the above copyright 10e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * notice, this list of conditions and the following disclaimer. 11e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * * Redistributions in binary form must reproduce the above 12e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * copyright notice, this list of conditions and the following disclaimer 13e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * in the documentation and/or other materials provided with the 14e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * distribution. 15e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * * Neither the name of Google Inc. nor the names of its 16e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * contributors may be used to endorse or promote products derived from 17e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * this software without specific prior written permission. 18e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * 19e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver */ 31e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 32e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverpackage org.jf.dexlib2.builder; 33e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 34e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport org.jf.dexlib2.Format; 35e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport org.jf.dexlib2.Opcode; 36e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport org.jf.dexlib2.iface.instruction.Instruction; 37e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport org.jf.dexlib2.util.Preconditions; 38e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 39e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport javax.annotation.Nonnull; 40e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport javax.annotation.Nullable; 41e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 42e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverpublic abstract class BuilderInstruction implements Instruction { 43e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver @Nonnull protected final Opcode opcode; 44e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 45e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver @Nullable MethodLocation location; 46e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 47e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver protected BuilderInstruction(@Nonnull Opcode opcode) { 48e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver Preconditions.checkFormat(opcode, getFormat()); 49e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver this.opcode = opcode; 50e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver } 51e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 52e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver @Nonnull public Opcode getOpcode() { 53e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver return opcode; 54e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver } 55e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 56e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver public abstract Format getFormat(); 57e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 58e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver public int getCodeUnits() { 59e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver return getFormat().size / 2; 60e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver } 61e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 626762350ca0e11ca69ecb2c7bcf78cbafa2103ad6Ben Gruver @Nonnull 63e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver public MethodLocation getLocation() { 64e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver if (location == null) { 65e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver throw new IllegalStateException("Cannot get the location of an instruction that hasn't been added to a " + 66e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver "method."); 67e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver } 68e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver return location; 69e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver } 70e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver} 71