1916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath/*
2916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Copyright (C) 2011 The Android Open Source Project
3916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath *
4916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Licensed under the Apache License, Version 2.0 (the "License");
5916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * you may not use this file except in compliance with the License.
6916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * You may obtain a copy of the License at
7916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath *
8916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath *      http://www.apache.org/licenses/LICENSE-2.0
9916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath *
10916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Unless required by applicable law or agreed to in writing, software
11916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
12916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * See the License for the specific language governing permissions and
14916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * limitations under the License.
15916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath */
16916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
17916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamathpackage com.android.dex;
18916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
19916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamathpublic final class ClassData {
20916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final Field[] staticFields;
21916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final Field[] instanceFields;
22916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final Method[] directMethods;
23916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final Method[] virtualMethods;
24916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
25916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public ClassData(Field[] staticFields, Field[] instanceFields,
26916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            Method[] directMethods, Method[] virtualMethods) {
27916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.staticFields = staticFields;
28916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.instanceFields = instanceFields;
29916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.directMethods = directMethods;
30916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.virtualMethods = virtualMethods;
31916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
32916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
33916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public Field[] getStaticFields() {
34916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return staticFields;
35916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
36916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
37916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public Field[] getInstanceFields() {
38916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return instanceFields;
39916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
40916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
41916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public Method[] getDirectMethods() {
42916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return directMethods;
43916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
44916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
45916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public Method[] getVirtualMethods() {
46916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return virtualMethods;
47916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
48916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
49916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public Field[] allFields() {
50916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        Field[] result = new Field[staticFields.length + instanceFields.length];
51916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        System.arraycopy(staticFields, 0, result, 0, staticFields.length);
52916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        System.arraycopy(instanceFields, 0, result, staticFields.length, instanceFields.length);
53916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return result;
54916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
55916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
56916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public Method[] allMethods() {
57916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        Method[] result = new Method[directMethods.length + virtualMethods.length];
58916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        System.arraycopy(directMethods, 0, result, 0, directMethods.length);
59916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        System.arraycopy(virtualMethods, 0, result, directMethods.length, virtualMethods.length);
60916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return result;
61916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
62916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
63916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public static class Field {
64916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        private final int fieldIndex;
65916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        private final int accessFlags;
66916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
67916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public Field(int fieldIndex, int accessFlags) {
68916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.fieldIndex = fieldIndex;
69916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.accessFlags = accessFlags;
70916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
71916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
72916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getFieldIndex() {
73916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return fieldIndex;
74916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
75916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
76916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getAccessFlags() {
77916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return accessFlags;
78916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
79916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
80916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
81916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public static class Method {
82916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        private final int methodIndex;
83916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        private final int accessFlags;
84916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        private final int codeOffset;
85916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
86916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public Method(int methodIndex, int accessFlags, int codeOffset) {
87916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.methodIndex = methodIndex;
88916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.accessFlags = accessFlags;
89916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.codeOffset = codeOffset;
90916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
91916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
92916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getMethodIndex() {
93916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return methodIndex;
94916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
95916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
96916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getAccessFlags() {
97916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return accessFlags;
98916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
99916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
100916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getCodeOffset() {
101916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return codeOffset;
102916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
103916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
104916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath}
105