1e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson/*
2e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * Copyright (C) 2011 The Android Open Source Project
3e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson *
4e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
5e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * you may not use this file except in compliance with the License.
6e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * You may obtain a copy of the License at
7e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson *
8e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
9e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson *
10e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * Unless required by applicable law or agreed to in writing, software
11e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * See the License for the specific language governing permissions and
14e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson * limitations under the License.
15e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson */
16e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
17e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilsonpackage com.android.dx.io;
18e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
19e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilsonpublic final class ClassData {
20e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    private final Field[] staticFields;
21e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    private final Field[] instanceFields;
22e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    private final Method[] directMethods;
23e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    private final Method[] virtualMethods;
24e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
25e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public ClassData(Field[] staticFields, Field[] instanceFields,
26e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            Method[] directMethods, Method[] virtualMethods) {
27e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        this.staticFields = staticFields;
28e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        this.instanceFields = instanceFields;
29e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        this.directMethods = directMethods;
30e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        this.virtualMethods = virtualMethods;
31e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
32e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
33e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public Field[] getStaticFields() {
34e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        return staticFields;
35e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
36e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
37e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public Field[] getInstanceFields() {
38e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        return instanceFields;
39e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
40e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
41e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public Method[] getDirectMethods() {
42e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        return directMethods;
43e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
44e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
45e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public Method[] getVirtualMethods() {
46e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        return virtualMethods;
47e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
48e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
49e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public Field[] allFields() {
50e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        Field[] result = new Field[staticFields.length + instanceFields.length];
51e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        System.arraycopy(staticFields, 0, result, 0, staticFields.length);
52e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        System.arraycopy(instanceFields, 0, result, staticFields.length, instanceFields.length);
53e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        return result;
54e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
55e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
56e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public Method[] allMethods() {
57e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        Method[] result = new Method[directMethods.length + virtualMethods.length];
58e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        System.arraycopy(directMethods, 0, result, 0, directMethods.length);
59e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        System.arraycopy(virtualMethods, 0, result, directMethods.length, virtualMethods.length);
60e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        return result;
61e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
62e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
63e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public static class Field {
64e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        private final int fieldIndex;
65e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        private final int accessFlags;
66e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
67e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        public Field(int fieldIndex, int accessFlags) {
68e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            this.fieldIndex = fieldIndex;
69e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            this.accessFlags = accessFlags;
70e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        }
71e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
72e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        public int getFieldIndex() {
73e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            return fieldIndex;
74e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        }
75e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
76e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        public int getAccessFlags() {
77e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            return accessFlags;
78e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        }
79e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
80e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
81e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    public static class Method {
82e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        private final int methodIndex;
83e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        private final int accessFlags;
84e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        private final int codeOffset;
85e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
86e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        public Method(int methodIndex, int accessFlags, int codeOffset) {
87e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            this.methodIndex = methodIndex;
88e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            this.accessFlags = accessFlags;
89e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            this.codeOffset = codeOffset;
90e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        }
91e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
92e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        public int getMethodIndex() {
93e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            return methodIndex;
94e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        }
95e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
96e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        public int getAccessFlags() {
97e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            return accessFlags;
98e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        }
99e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson
100e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        public int getCodeOffset() {
101e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson            return codeOffset;
102e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson        }
103e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson    }
104e31a42442bbd2cdc69e959f5209b793cf0aa7217Jesse Wilson}
105