1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.android.dx.dex.code; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.Constant; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.Type; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.HashSet; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Container for all the pieces of a concrete method. Each instance 2599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * corresponds to a {@code code} structure in a {@code .dex} file. 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic final class DalvCode { 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * how much position info to preserve; one of the static 30de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * constants in {@link PositionList} 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final int positionInfo; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code null-ok;} the instruction list, ready for final processing; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * nulled out in {@link #finishProcessingIfNecessary} 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private OutputFinisher unprocessedInsns; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code non-null;} unprocessed catch table; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * nulled out in {@link #finishProcessingIfNecessary} 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private CatchBuilder unprocessedCatches; 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code null-ok;} catch table; set in 48de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * {@link #finishProcessingIfNecessary} 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private CatchTable catches; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code null-ok;} source positions list; set in 54de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * {@link #finishProcessingIfNecessary} 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private PositionList positions; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code null-ok;} local variable list; set in 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link #finishProcessingIfNecessary} 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private LocalList locals; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 6599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code null-ok;} the processed instruction list; set in 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link #finishProcessingIfNecessary} 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private DalvInsnList insns; 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs an instance. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param positionInfo how much position info to preserve; one of the 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * static constants in {@link PositionList} 7599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param unprocessedInsns {@code non-null;} the instruction list, ready 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for final processing 7799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param unprocessedCatches {@code non-null;} unprocessed catch 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (exception handler) table 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public DalvCode(int positionInfo, OutputFinisher unprocessedInsns, 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CatchBuilder unprocessedCatches) { 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (unprocessedInsns == null) { 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException("unprocessedInsns == null"); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (unprocessedCatches == null) { 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException("unprocessedCatches == null"); 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.positionInfo = positionInfo; 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.unprocessedInsns = unprocessedInsns; 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.unprocessedCatches = unprocessedCatches; 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.catches = null; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.positions = null; 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.locals = null; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.insns = null; 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Finish up processing of the method. 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void finishProcessingIfNecessary() { 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (insns != null) { 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insns = unprocessedInsns.finishProcessingAndGetList(); 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project positions = PositionList.make(insns, positionInfo); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project locals = LocalList.make(insns); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catches = unprocessedCatches.build(); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Let them be gc'ed. 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project unprocessedInsns = null; 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project unprocessedCatches = null; 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assign indices in all instructions that need them, using the 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * given callback to perform lookups. This must be called before 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link #getInsns}. 121de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 12299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param callback {@code non-null;} callback object 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void assignIndices(AssignIndicesCallback callback) { 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project unprocessedInsns.assignIndices(callback); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 127de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets whether this instance has any position data to represent. 130de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 13199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code true} iff this instance has any position 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * data to represent 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasPositions() { 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (positionInfo != PositionList.NONE) 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && unprocessedInsns.hasAnyPositionInfo(); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 138de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets whether this instance has any local variable data to represent. 141de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 14299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code true} iff this instance has any local variable 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * data to represent 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasLocals() { 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return unprocessedInsns.hasAnyLocalInfo(); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets whether this instance has any catches at all (either typed 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * or catch-all). 152de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return whether this instance has any catches at all 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasAnyCatches() { 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return unprocessedCatches.hasAnyCatches(); 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 158de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the set of catch types handled anywhere in the code. 161de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 16299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the set of catch types 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public HashSet<Type> getCatchTypes() { 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return unprocessedCatches.getCatchTypes(); 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the set of all constants referred to by instructions in 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the code. 171de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 17299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the set of constants 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public HashSet<Constant> getInsnConstants() { 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return unprocessedInsns.getAllConstants(); 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the list of instructions. 180de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 18199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the instruction list 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public DalvInsnList getInsns() { 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project finishProcessingIfNecessary(); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return insns; 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the catch (exception handler) table. 190de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 19199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the catch table 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CatchTable getCatches() { 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project finishProcessingIfNecessary(); 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return catches; 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the source positions list. 200de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 20199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the source positions list 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PositionList getPositions() { 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project finishProcessingIfNecessary(); 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return positions; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the source positions list. 210de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 21199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the source positions list 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public LocalList getLocals() { 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project finishProcessingIfNecessary(); 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return locals; 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class used as a callback for {@link #assignIndices}. 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static interface AssignIndicesCallback { 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the index for the given constant. 224de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 22599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param cst {@code non-null;} the constant 22699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code >= -1;} the index or {@code -1} if the constant 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shouldn't actually be reified with an index 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getIndex(Constant cst); 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 232