1579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson/* 2579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Copyright (C) 2007 The Android Open Source Project 3579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 4579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * you may not use this file except in compliance with the License. 6579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * You may obtain a copy of the License at 7579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 8579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 10579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Unless required by applicable law or agreed to in writing, software 11579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * See the License for the specific language governing permissions and 14579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * limitations under the License. 15579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 16579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 17579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpackage com.android.dx.dex.file; 18579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 19579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson/** 20579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * An item in a Dalvik file which is referenced by index. 21579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 22579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpublic abstract class IndexedItem extends Item { 23579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** {@code >= -1;} assigned index of the item, or {@code -1} if not 24579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * yet assigned */ 25579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson private int index; 26579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 27579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 28579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Constructs an instance. The index is initially unassigned. 29579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 30579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public IndexedItem() { 31579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson index = -1; 32579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 33579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 34579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 35579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Gets whether or not this instance has been assigned an index. 36579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 37579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @return {@code true} iff this instance has been assigned an index 38579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 39579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public final boolean hasIndex() { 40579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return (index >= 0); 41579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 42579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 43579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 44579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Gets the item index. 45579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 46579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @return {@code >= 0;} the index 47579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @throws RuntimeException thrown if the item index is not yet assigned 48579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 49579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public final int getIndex() { 50579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson if (index < 0) { 51579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson throw new RuntimeException("index not yet set"); 52579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 53579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 54579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return index; 55579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 56579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 57579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 58579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Sets the item index. This method may only ever be called once 59579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * per instance, and this will throw a {@code RuntimeException} if 60579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * called a second (or subsequent) time. 61579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 62579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param index {@code >= 0;} the item index 63579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 64579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public final void setIndex(int index) { 65579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson if (this.index != -1) { 66579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson throw new RuntimeException("index already set"); 67579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 68579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 69579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson this.index = index; 70579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 71579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 72579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 73579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Gets the index of this item as a string, suitable for including in 74579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * annotations. 75579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 76579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @return {@code non-null;} the index string 77579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 78579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public final String indexString() { 79579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return '[' + Integer.toHexString(index) + ']'; 80579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 81579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson} 82