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