15ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver/* 25ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * Copyright 2013, Google Inc. 35ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * All rights reserved. 45ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * 55ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * Redistribution and use in source and binary forms, with or without 65ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * modification, are permitted provided that the following conditions are 75ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * met: 85ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * 95ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * * Redistributions of source code must retain the above copyright 105ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * notice, this list of conditions and the following disclaimer. 115ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * * Redistributions in binary form must reproduce the above 125ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * copyright notice, this list of conditions and the following disclaimer 135ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * in the documentation and/or other materials provided with the 145ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * distribution. 155ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * * Neither the name of Google Inc. nor the names of its 165ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * contributors may be used to endorse or promote products derived from 175ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * this software without specific prior written permission. 185ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * 195ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 205ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver */ 315ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver 32e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverpackage org.jf.dexlib2.builder; 33e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 34e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport org.jf.dexlib2.Opcode; 35899b1e6611d260370aa81b9fb23684d2052e5f5fBen Gruverimport org.jf.dexlib2.builder.instruction.BuilderSwitchElement; 36e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport org.jf.dexlib2.iface.instruction.SwitchPayload; 37e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 38e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport javax.annotation.Nonnull; 39e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverimport javax.annotation.Nullable; 40899b1e6611d260370aa81b9fb23684d2052e5f5fBen Gruverimport java.util.List; 41e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 42e80efa670f1027fdf3882a298216a460199e38d0Ben Gruverpublic abstract class BuilderSwitchPayload extends BuilderInstruction implements SwitchPayload { 43e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver @Nullable 44e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver MethodLocation referrer; 45e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 46e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver protected BuilderSwitchPayload(@Nonnull Opcode opcode) { 47e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver super(opcode); 48e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver } 49e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver 50e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver @Nonnull 51e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver public MethodLocation getReferrer() { 52e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver if (referrer == null) { 53e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver throw new IllegalStateException("The referrer has not been set yet"); 54e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver } 55e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver return referrer; 56e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver } 57899b1e6611d260370aa81b9fb23684d2052e5f5fBen Gruver 58899b1e6611d260370aa81b9fb23684d2052e5f5fBen Gruver @Nonnull @Override public abstract List<? extends BuilderSwitchElement> getSwitchElements(); 59e80efa670f1027fdf3882a298216a460199e38d0Ben Gruver} 60