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.cf.attrib; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19333201833d506a3accdeac6ceb7caba8d4b95797Jesse Wilsonimport com.android.dx.rop.cst.CstString; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.CstType; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.util.FixedSizeList; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * List of "inner class" entries, which are the contents of 2599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code InnerClasses} attributes. 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic final class InnerClassList extends FixedSizeList { 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs an instance. 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param count the number of elements to be in the list of inner classes 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public InnerClassList(int count) { 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(count); 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the indicated item. 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param n {@code >= 0;} which item 4199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code null-ok;} the indicated item 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Item get(int n) { 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (Item) get0(n); 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the item at the given index. 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param n {@code >= 0, < size();} which class 5199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param innerClass {@code non-null;} class this item refers to 5299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param outerClass {@code null-ok;} outer class that this class is a 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * member of, if any 5499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param innerName {@code null-ok;} original simple name of this class, 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if not anonymous 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param accessFlags original declared access flags 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void set(int n, CstType innerClass, CstType outerClass, 59333201833d506a3accdeac6ceb7caba8d4b95797Jesse Wilson CstString innerName, int accessFlags) { 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project set0(n, new Item(innerClass, outerClass, innerName, accessFlags)); 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Item in an inner classes list. 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class Item { 6799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project /** {@code non-null;} class this item refers to */ 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final CstType innerClass; 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project /** {@code null-ok;} outer class that this class is a member of, if any */ 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final CstType outerClass; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project /** {@code null-ok;} original simple name of this class, if not anonymous */ 74333201833d506a3accdeac6ceb7caba8d4b95797Jesse Wilson private final CstString innerName; 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** original declared access flags */ 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final int accessFlags; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs an instance. 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param innerClass {@code non-null;} class this item refers to 8399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param outerClass {@code null-ok;} outer class that this class is a 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * member of, if any 8599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param innerName {@code null-ok;} original simple name of this 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * class, if not anonymous 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param accessFlags original declared access flags 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Item(CstType innerClass, CstType outerClass, 90333201833d506a3accdeac6ceb7caba8d4b95797Jesse Wilson CstString innerName, int accessFlags) { 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (innerClass == null) { 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException("innerClass == null"); 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.innerClass = innerClass; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.outerClass = outerClass; 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.innerName = innerName; 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.accessFlags = accessFlags; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the class this item refers to. 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the class 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CstType getInnerClass() { 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return innerClass; 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the outer class that this item's class is a member of, if any. 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code null-ok;} the class 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CstType getOuterClass() { 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return outerClass; 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the original name of this item's class, if not anonymous. 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code null-ok;} the name 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 124333201833d506a3accdeac6ceb7caba8d4b95797Jesse Wilson public CstString getInnerName() { 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return innerName; 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the original declared access flags. 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the access flags 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getAccessFlags() { 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return accessFlags; 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 138