xref: /aosp_15_r20/dalvik/dx/src/com/android/dex/ClassDef.java (revision 055d459012065f78d96b68be8421640240ddf631)
1*055d4590SKeyi Gui /*
2*055d4590SKeyi Gui  * Copyright (C) 2011 The Android Open Source Project
3*055d4590SKeyi Gui  *
4*055d4590SKeyi Gui  * Licensed under the Apache License, Version 2.0 (the "License");
5*055d4590SKeyi Gui  * you may not use this file except in compliance with the License.
6*055d4590SKeyi Gui  * You may obtain a copy of the License at
7*055d4590SKeyi Gui  *
8*055d4590SKeyi Gui  *      http://www.apache.org/licenses/LICENSE-2.0
9*055d4590SKeyi Gui  *
10*055d4590SKeyi Gui  * Unless required by applicable law or agreed to in writing, software
11*055d4590SKeyi Gui  * distributed under the License is distributed on an "AS IS" BASIS,
12*055d4590SKeyi Gui  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*055d4590SKeyi Gui  * See the License for the specific language governing permissions and
14*055d4590SKeyi Gui  * limitations under the License.
15*055d4590SKeyi Gui  */
16*055d4590SKeyi Gui 
17*055d4590SKeyi Gui package com.android.dex;
18*055d4590SKeyi Gui 
19*055d4590SKeyi Gui /**
20*055d4590SKeyi Gui  * A type definition.
21*055d4590SKeyi Gui  */
22*055d4590SKeyi Gui public final class ClassDef {
23*055d4590SKeyi Gui     public static final int NO_INDEX = -1;
24*055d4590SKeyi Gui     private final Dex buffer;
25*055d4590SKeyi Gui     private final int offset;
26*055d4590SKeyi Gui     private final int typeIndex;
27*055d4590SKeyi Gui     private final int accessFlags;
28*055d4590SKeyi Gui     private final int supertypeIndex;
29*055d4590SKeyi Gui     private final int interfacesOffset;
30*055d4590SKeyi Gui     private final int sourceFileIndex;
31*055d4590SKeyi Gui     private final int annotationsOffset;
32*055d4590SKeyi Gui     private final int classDataOffset;
33*055d4590SKeyi Gui     private final int staticValuesOffset;
34*055d4590SKeyi Gui 
ClassDef(Dex buffer, int offset, int typeIndex, int accessFlags, int supertypeIndex, int interfacesOffset, int sourceFileIndex, int annotationsOffset, int classDataOffset, int staticValuesOffset)35*055d4590SKeyi Gui     public ClassDef(Dex buffer, int offset, int typeIndex, int accessFlags,
36*055d4590SKeyi Gui             int supertypeIndex, int interfacesOffset, int sourceFileIndex,
37*055d4590SKeyi Gui             int annotationsOffset, int classDataOffset, int staticValuesOffset) {
38*055d4590SKeyi Gui         this.buffer = buffer;
39*055d4590SKeyi Gui         this.offset = offset;
40*055d4590SKeyi Gui         this.typeIndex = typeIndex;
41*055d4590SKeyi Gui         this.accessFlags = accessFlags;
42*055d4590SKeyi Gui         this.supertypeIndex = supertypeIndex;
43*055d4590SKeyi Gui         this.interfacesOffset = interfacesOffset;
44*055d4590SKeyi Gui         this.sourceFileIndex = sourceFileIndex;
45*055d4590SKeyi Gui         this.annotationsOffset = annotationsOffset;
46*055d4590SKeyi Gui         this.classDataOffset = classDataOffset;
47*055d4590SKeyi Gui         this.staticValuesOffset = staticValuesOffset;
48*055d4590SKeyi Gui     }
49*055d4590SKeyi Gui 
getOffset()50*055d4590SKeyi Gui     public int getOffset() {
51*055d4590SKeyi Gui         return offset;
52*055d4590SKeyi Gui     }
53*055d4590SKeyi Gui 
getTypeIndex()54*055d4590SKeyi Gui     public int getTypeIndex() {
55*055d4590SKeyi Gui         return typeIndex;
56*055d4590SKeyi Gui     }
57*055d4590SKeyi Gui 
getSupertypeIndex()58*055d4590SKeyi Gui     public int getSupertypeIndex() {
59*055d4590SKeyi Gui         return supertypeIndex;
60*055d4590SKeyi Gui     }
61*055d4590SKeyi Gui 
getInterfacesOffset()62*055d4590SKeyi Gui     public int getInterfacesOffset() {
63*055d4590SKeyi Gui         return interfacesOffset;
64*055d4590SKeyi Gui     }
65*055d4590SKeyi Gui 
getInterfaces()66*055d4590SKeyi Gui     public short[] getInterfaces() {
67*055d4590SKeyi Gui         return buffer.readTypeList(interfacesOffset).getTypes();
68*055d4590SKeyi Gui     }
69*055d4590SKeyi Gui 
getAccessFlags()70*055d4590SKeyi Gui     public int getAccessFlags() {
71*055d4590SKeyi Gui         return accessFlags;
72*055d4590SKeyi Gui     }
73*055d4590SKeyi Gui 
getSourceFileIndex()74*055d4590SKeyi Gui     public int getSourceFileIndex() {
75*055d4590SKeyi Gui         return sourceFileIndex;
76*055d4590SKeyi Gui     }
77*055d4590SKeyi Gui 
getAnnotationsOffset()78*055d4590SKeyi Gui     public int getAnnotationsOffset() {
79*055d4590SKeyi Gui         return annotationsOffset;
80*055d4590SKeyi Gui     }
81*055d4590SKeyi Gui 
getClassDataOffset()82*055d4590SKeyi Gui     public int getClassDataOffset() {
83*055d4590SKeyi Gui         return classDataOffset;
84*055d4590SKeyi Gui     }
85*055d4590SKeyi Gui 
getStaticValuesOffset()86*055d4590SKeyi Gui     public int getStaticValuesOffset() {
87*055d4590SKeyi Gui         return staticValuesOffset;
88*055d4590SKeyi Gui     }
89*055d4590SKeyi Gui 
90*055d4590SKeyi Gui     @Override
toString()91*055d4590SKeyi Gui     public String toString() {
92*055d4590SKeyi Gui         if (buffer == null) {
93*055d4590SKeyi Gui             return typeIndex + " " + supertypeIndex;
94*055d4590SKeyi Gui         }
95*055d4590SKeyi Gui 
96*055d4590SKeyi Gui         StringBuilder result = new StringBuilder();
97*055d4590SKeyi Gui         result.append(buffer.typeNames().get(typeIndex));
98*055d4590SKeyi Gui         if (supertypeIndex != NO_INDEX) {
99*055d4590SKeyi Gui             result.append(" extends ").append(buffer.typeNames().get(supertypeIndex));
100*055d4590SKeyi Gui         }
101*055d4590SKeyi Gui         return result.toString();
102*055d4590SKeyi Gui     }
103*055d4590SKeyi Gui }
104