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 import static com.android.dex.EncodedValueReader.ENCODED_ANNOTATION; 20*055d4590SKeyi Gui 21*055d4590SKeyi Gui /** 22*055d4590SKeyi Gui * An annotation. 23*055d4590SKeyi Gui */ 24*055d4590SKeyi Gui public final class Annotation implements Comparable<Annotation> { 25*055d4590SKeyi Gui private final Dex dex; 26*055d4590SKeyi Gui private final byte visibility; 27*055d4590SKeyi Gui private final EncodedValue encodedAnnotation; 28*055d4590SKeyi Gui Annotation(Dex dex, byte visibility, EncodedValue encodedAnnotation)29*055d4590SKeyi Gui public Annotation(Dex dex, byte visibility, EncodedValue encodedAnnotation) { 30*055d4590SKeyi Gui this.dex = dex; 31*055d4590SKeyi Gui this.visibility = visibility; 32*055d4590SKeyi Gui this.encodedAnnotation = encodedAnnotation; 33*055d4590SKeyi Gui } 34*055d4590SKeyi Gui getVisibility()35*055d4590SKeyi Gui public byte getVisibility() { 36*055d4590SKeyi Gui return visibility; 37*055d4590SKeyi Gui } 38*055d4590SKeyi Gui getReader()39*055d4590SKeyi Gui public EncodedValueReader getReader() { 40*055d4590SKeyi Gui return new EncodedValueReader(encodedAnnotation, ENCODED_ANNOTATION); 41*055d4590SKeyi Gui } 42*055d4590SKeyi Gui getTypeIndex()43*055d4590SKeyi Gui public int getTypeIndex() { 44*055d4590SKeyi Gui EncodedValueReader reader = getReader(); 45*055d4590SKeyi Gui reader.readAnnotation(); 46*055d4590SKeyi Gui return reader.getAnnotationType(); 47*055d4590SKeyi Gui } 48*055d4590SKeyi Gui writeTo(Dex.Section out)49*055d4590SKeyi Gui public void writeTo(Dex.Section out) { 50*055d4590SKeyi Gui out.writeByte(visibility); 51*055d4590SKeyi Gui encodedAnnotation.writeTo(out); 52*055d4590SKeyi Gui } 53*055d4590SKeyi Gui 54*055d4590SKeyi Gui @Override compareTo(Annotation other)55*055d4590SKeyi Gui public int compareTo(Annotation other) { 56*055d4590SKeyi Gui return encodedAnnotation.compareTo(other.encodedAnnotation); 57*055d4590SKeyi Gui } 58*055d4590SKeyi Gui 59*055d4590SKeyi Gui @Override toString()60*055d4590SKeyi Gui public String toString() { 61*055d4590SKeyi Gui return dex == null 62*055d4590SKeyi Gui ? visibility + " " + getTypeIndex() 63*055d4590SKeyi Gui : visibility + " " + dex.typeNames().get(getTypeIndex()); 64*055d4590SKeyi Gui } 65*055d4590SKeyi Gui } 66