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