1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.android.dx.rop.code; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.util.Hex; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constants used as "access flags" in various places in classes, and 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * related utilities. Although, at the rop layer, flags are generally 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ignored, this is the layer of communication, and as such, this 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * package is where these definitions belong. The flag definitions are 2699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * identical to Java access flags, but {@code ACC_SUPER} isn't 2799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * used at all in translated code, and {@code ACC_SYNCHRONIZED} 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is only used in a very limited way. 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic final class AccessFlags { 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** public member / class */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_PUBLIC = 0x0001; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** private member */ 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_PRIVATE = 0x0002; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** protected member */ 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_PROTECTED = 0x0004; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** static member */ 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_STATIC = 0x0008; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** final member / class */ 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_FINAL = 0x0010; 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * synchronized method; only valid in dex files for {@code native} 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * methods 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_SYNCHRONIZED = 0x0020; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * class with new-style {@code invokespecial} for superclass 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method access 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_SUPER = 0x0020; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** volatile field */ 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_VOLATILE = 0x0040; 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** bridge method (generated) */ 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_BRIDGE = 0x0040; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** transient field */ 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_TRANSIENT = 0x0080; 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** varargs method */ 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_VARARGS = 0x0080; 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** native method */ 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_NATIVE = 0x0100; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** "class" is in fact an public static final interface */ 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_INTERFACE = 0x0200; 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** abstract method / class */ 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_ABSTRACT = 0x0400; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 8099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * method with strict floating point ({@code strictfp}) 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * behavior 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_STRICT = 0x0800; 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** synthetic member */ 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_SYNTHETIC = 0x1000; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** class is an annotation type */ 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_ANNOTATION = 0x2000; 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * class is an enumerated type; field is an element of an enumerated 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * type 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_ENUM = 0x4000; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** method is a constructor */ 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_CONSTRUCTOR = 0x10000; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 10199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * method was declared {@code synchronized}; has no effect on 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * execution (other than inspecting this flag, per se) 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ACC_DECLARED_SYNCHRONIZED = 0x20000; 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** flags defined on classes */ 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CLASS_FLAGS = 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_PUBLIC | ACC_FINAL | ACC_SUPER | ACC_INTERFACE | ACC_ABSTRACT | 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_SYNTHETIC | ACC_ANNOTATION | ACC_ENUM; 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** flags defined on inner classes */ 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INNER_CLASS_FLAGS = 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL | 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_INTERFACE | ACC_ABSTRACT | ACC_SYNTHETIC | ACC_ANNOTATION | 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_ENUM; 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** flags defined on fields */ 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int FIELD_FLAGS = 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL | 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_VOLATILE | ACC_TRANSIENT | ACC_SYNTHETIC | ACC_ENUM; 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** flags defined on methods */ 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int METHOD_FLAGS = 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL | 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_SYNCHRONIZED | ACC_BRIDGE | ACC_VARARGS | ACC_NATIVE | 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_ABSTRACT | ACC_STRICT | ACC_SYNTHETIC | ACC_CONSTRUCTOR | 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ACC_DECLARED_SYNCHRONIZED; 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** indicates conversion of class flags */ 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final int CONV_CLASS = 1; 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** indicates conversion of field flags */ 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final int CONV_FIELD = 2; 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** indicates conversion of method flags */ 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final int CONV_METHOD = 3; 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This class is uninstantiable. 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private AccessFlags() { 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // This space intentionally left blank. 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a human-oriented string representing the given access flags, 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as defined on classes (not fields or methods). 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags 15099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} human-oriented string 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static String classString(int flags) { 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return humanHelper(flags, CLASS_FLAGS, CONV_CLASS); 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a human-oriented string representing the given access flags, 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as defined on inner classes. 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags 16199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} human-oriented string 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static String innerClassString(int flags) { 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return humanHelper(flags, INNER_CLASS_FLAGS, CONV_CLASS); 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a human-oriented string representing the given access flags, 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as defined on fields (not classes or methods). 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags 17299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} human-oriented string 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static String fieldString(int flags) { 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return humanHelper(flags, FIELD_FLAGS, CONV_FIELD); 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a human-oriented string representing the given access flags, 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as defined on methods (not classes or fields). 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags 18399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} human-oriented string 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static String methodString(int flags) { 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return humanHelper(flags, METHOD_FLAGS, CONV_METHOD); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 19099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_PUBLIC} is on in the given 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * flags. 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 19499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_PUBLIC} flag 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isPublic(int flags) { 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_PUBLIC) != 0; 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 20199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_PROTECTED} is on in the given 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * flags. 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 20599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_PROTECTED} flag 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isProtected(int flags) { 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_PROTECTED) != 0; 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 21299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_PRIVATE} is on in the given 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * flags. 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 21699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_PRIVATE} flag 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isPrivate(int flags) { 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_PRIVATE) != 0; 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 22399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_STATIC} is on in the given 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * flags. 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 22799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_STATIC} flag 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isStatic(int flags) { 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_STATIC) != 0; 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 23499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_SYNCHRONIZED} is on in 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the given flags. 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 23899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_SYNCHRONIZED} flag 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isSynchronized(int flags) { 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_SYNCHRONIZED) != 0; 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 24599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_ABSTRACT} is on in the given 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * flags. 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 24999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_ABSTRACT} flag 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isAbstract(int flags) { 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_ABSTRACT) != 0; 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 25699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_NATIVE} is on in the given 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * flags. 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 26099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_NATIVE} flag 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isNative(int flags) { 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_NATIVE) != 0; 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 26799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_ANNOTATION} is on in the given 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * flags. 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 27199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_ANNOTATION} flag 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isAnnotation(int flags) { 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_ANNOTATION) != 0; 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 27899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Returns whether the flag {@code ACC_DECLARED_SYNCHRONIZED} is 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on in the given flags. 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the flags to check 28299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return the value of the {@code ACC_DECLARED_SYNCHRONIZED} flag 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isDeclaredSynchronized(int flags) { 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (flags & ACC_DECLARED_SYNCHRONIZED) != 0; 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Helper to return a human-oriented string representing the given 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * access flags. 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param flags the defined flags 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param mask mask for the "defined" bits 29499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param what what the flags represent (one of {@code CONV_*}) 29599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} human-oriented string 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static String humanHelper(int flags, int mask, int what) { 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuffer sb = new StringBuffer(80); 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int extra = flags & ~mask; 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flags &= mask; 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_PUBLIC) != 0) { 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|public"); 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_PRIVATE) != 0) { 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|private"); 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_PROTECTED) != 0) { 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|protected"); 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_STATIC) != 0) { 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|static"); 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_FINAL) != 0) { 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|final"); 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_SYNCHRONIZED) != 0) { 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (what == CONV_CLASS) { 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|super"); 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|synchronized"); 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_VOLATILE) != 0) { 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (what == CONV_METHOD) { 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|bridge"); 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|volatile"); 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_TRANSIENT) != 0) { 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (what == CONV_METHOD) { 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|varargs"); 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|transient"); 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_NATIVE) != 0) { 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|native"); 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_INTERFACE) != 0) { 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|interface"); 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_ABSTRACT) != 0) { 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|abstract"); 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_STRICT) != 0) { 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|strictfp"); 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_SYNTHETIC) != 0) { 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|synthetic"); 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_ANNOTATION) != 0) { 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|annotation"); 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_ENUM) != 0) { 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|enum"); 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_CONSTRUCTOR) != 0) { 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|constructor"); 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((flags & ACC_DECLARED_SYNCHRONIZED) != 0) { 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append("|declared_synchronized"); 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((extra != 0) || (sb.length() == 0)) { 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append('|'); 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sb.append(Hex.u2(extra)); 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sb.substring(1); 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 375