1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 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 Project * Basic reflection calls and utility functions. 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 19375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#ifndef DALVIK_REFLECT_REFLECT_H_ 20375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#define DALVIK_REFLECT_REFLECT_H_ 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * During startup, validate the "box" classes, e.g. java/lang/Integer. 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectbool dvmValidateBoxClasses(); 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get all fields declared by a class. 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Includes both class and instance fields. 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetDeclaredFields(ClassObject* clazz, bool publicOnly); 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 35b8b838ff463efcf8cac28df159ed06fe4bdb089fJesse Wilson * Get the named field. 36b8b838ff463efcf8cac28df159ed06fe4bdb089fJesse Wilson */ 37b8b838ff463efcf8cac28df159ed06fe4bdb089fJesse WilsonObject* dvmGetDeclaredField(ClassObject* clazz, StringObject* nameObj); 38b8b838ff463efcf8cac28df159ed06fe4bdb089fJesse Wilson 39b8b838ff463efcf8cac28df159ed06fe4bdb089fJesse Wilson/* 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get all constructors declared by a class. 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetDeclaredConstructors(ClassObject* clazz, bool publicOnly); 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get all methods declared by a class. 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This includes both static and virtual methods, and can include private 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * members if "publicOnly" is false. It does not include Miranda methods, 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * since those weren't declared in the class, or constructors. 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetDeclaredMethods(ClassObject* clazz, bool publicOnly); 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 543c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson * Get the named method. 553c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson */ 563c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse WilsonObject* dvmGetDeclaredConstructorOrMethod(ClassObject* clazz, 573c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson StringObject* nameObj, ArrayObject* args); 583c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson 593c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson/* 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get all interfaces a class implements. If this is unable to allocate 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the result array, this raises an OutOfMemoryError and returns NULL. 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetInterfaces(ClassObject* clazz); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert slot numbers back to objects. 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectField* dvmSlotToField(ClassObject* clazz, int slot); 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMethod* dvmSlotToMethod(ClassObject* clazz, int slot); 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert a primitive value, performing a widening conversion if necessary. 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint dvmConvertPrimitiveValue(PrimitiveType srcType, 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PrimitiveType dstType, const s4* srcPtr, s4* dstPtr); 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the argument to the specified type. 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the width of the argument (1 for most types, 2 for J/D, -1 on 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * error). 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint dvmConvertArgument(DataObject* arg, ClassObject* type, s4* ins); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 86c4ae06fe78cffa815225f9bcd26c19e6714db572Andy McFadden * Box a primitive value into an object. If "returnType" is 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not primitive, this just returns "value" cast to an object. 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 89c4ae06fe78cffa815225f9bcd26c19e6714db572Andy McFaddenDataObject* dvmBoxPrimitive(JValue value, ClassObject* returnType); 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unwrap a boxed primitive. If "returnType" is not primitive, this just 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * returns "value" cast into a JValue. 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 95c4ae06fe78cffa815225f9bcd26c19e6714db572Andy McFaddenbool dvmUnboxPrimitive(Object* value, ClassObject* returnType, 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult); 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the class object that matches the method's signature. For 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * primitive types, returns the box class. 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectClassObject* dvmGetBoxedReturnType(const Method* meth); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * JNI reflection support. 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectField* dvmGetFieldFromReflectObj(Object* obj); 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMethod* dvmGetMethodFromReflectObj(Object* obj); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectObject* dvmCreateReflectObjForField(const ClassObject* clazz, Field* field); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectObject* dvmCreateReflectObjForMethod(const ClassObject* clazz, Method* method); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Quick test to determine if the method in question is a reflection call. 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Used for some stack parsing. Currently defined as "the method's declaring 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * class is java.lang.reflect.Method". 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectINLINE bool dvmIsReflectionMethod(const Method* method) 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (method->clazz == gDvm.classJavaLangReflectMethod); 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Proxy class generation. 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectClassObject* dvmGenerateProxyClass(StringObject* str, ArrayObject* interfaces, 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* loader); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new java.lang.reflect.Method object based on "meth". 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectObject* dvmCreateReflectMethodObject(const Method* meth); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return an array of Annotation objects for the specified piece. For method 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * parameters this is an array of arrays of Annotation objects. 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Method also applies to Constructor. 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetClassAnnotations(const ClassObject* clazz); 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetMethodAnnotations(const Method* method); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetFieldAnnotations(const Field* field); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetParameterAnnotations(const Method* method); 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 145c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilson * Return the annotation if it exists. 146c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilson */ 147c99fe6df38af0e55821d8d98ccf67664ce35231aJesse WilsonObject* dvmGetClassAnnotation(const ClassObject* clazz, const ClassObject* annotationClazz); 14869c93e98f0c2ed73461a8281f5d6eaf46d31505eJesse WilsonObject* dvmGetMethodAnnotation(const ClassObject* clazz, const Method* method, 14969c93e98f0c2ed73461a8281f5d6eaf46d31505eJesse Wilson const ClassObject* annotationClazz); 15069c93e98f0c2ed73461a8281f5d6eaf46d31505eJesse WilsonObject* dvmGetFieldAnnotation(const ClassObject* clazz, const Field* method, 15169c93e98f0c2ed73461a8281f5d6eaf46d31505eJesse Wilson const ClassObject* annotationClazz); 152c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilson 153c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilson/* 154c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilson * Return true if the annotation exists. 155c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilson */ 156c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilsonbool dvmIsClassAnnotationPresent(const ClassObject* clazz, const ClassObject* annotationClazz); 15769c93e98f0c2ed73461a8281f5d6eaf46d31505eJesse Wilsonbool dvmIsMethodAnnotationPresent(const ClassObject* clazz, const Method* method, 15869c93e98f0c2ed73461a8281f5d6eaf46d31505eJesse Wilson const ClassObject* annotationClazz); 15969c93e98f0c2ed73461a8281f5d6eaf46d31505eJesse Wilsonbool dvmIsFieldAnnotationPresent(const ClassObject* clazz, const Field* method, 16069c93e98f0c2ed73461a8281f5d6eaf46d31505eJesse Wilson const ClassObject* annotationClazz); 161c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilson 162c99fe6df38af0e55821d8d98ccf67664ce35231aJesse Wilson/* 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Find the default value for an annotation member. 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectObject* dvmGetAnnotationDefaultValue(const Method* method); 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the list of thrown exceptions for a method. Returns NULL if there 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are no exceptions listed. 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetMethodThrows(const Method* method); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the Signature annotation. 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetClassSignatureAnnotation(const ClassObject* clazz); 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetMethodSignatureAnnotation(const Method* method); 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetFieldSignatureAnnotation(const Field* field); 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the EnclosingMethod attribute from an annotation. Returns a Method 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * object, or NULL. 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectObject* dvmGetEnclosingMethod(const ClassObject* clazz); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return clazz's declaring class, or NULL if there isn't one. 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectClassObject* dvmGetDeclaringClass(const ClassObject* clazz); 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return clazz's enclosing class, or NULL if there isn't one. 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectClassObject* dvmGetEnclosingClass(const ClassObject* clazz); 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the EnclosingClass attribute from an annotation. If found, returns 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "true". A String with the original name of the class and the original 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * access flags are returned through the arguments. (The name will be NULL 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for an anonymous inner class.) 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectbool dvmGetInnerClass(const ClassObject* clazz, StringObject** pName, 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int* pAccessFlags); 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get an array of class objects from the MemberClasses annotation. Returns 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NULL if none found. 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectArrayObject* dvmGetDeclaredClasses(const ClassObject* clazz); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Used to pass values out of annotation (and encoded array) processing 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * functions. 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 215d862faa2ceae186da5518607505eb942d634ced9Carl Shapirostruct AnnotationValue { 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue value; 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u1 type; 218d862faa2ceae186da5518607505eb942d634ced9Carl Shapiro}; 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Iterator structure for iterating over DexEncodedArray instances. The 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure should be treated as opaque. 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 225d862faa2ceae186da5518607505eb942d634ced9Carl Shapirostruct EncodedArrayIterator { 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u1* cursor; /* current cursor */ 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u4 elementsLeft; /* number of elements left to read */ 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexEncodedArray* encodedArray; /* instance being iterated over */ 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u4 size; /* number of elements in instance */ 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const ClassObject* clazz; /* class to resolve with respect to */ 231d862faa2ceae186da5518607505eb942d634ced9Carl Shapiro}; 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Initializes an encoded array iterator. 235de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param iterator iterator to initialize 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param encodedArray encoded array to iterate over 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param clazz class to use when resolving strings and types 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dvmEncodedArrayIteratorInitialize(EncodedArrayIterator* iterator, 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexEncodedArray* encodedArray, const ClassObject* clazz); 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether there are more elements to be read. 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectbool dvmEncodedArrayIteratorHasNext(const EncodedArrayIterator* iterator); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the next decoded value from the iterator, advancing its 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * cursor. This returns primitive values in their corresponding union 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * slots, and returns everything else (including nulls) as object 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * references in the "l" union slot. 253de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The caller must call dvmReleaseTrackedAlloc() on any returned reference. 255de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value pointer to store decoded value into 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @returns true if a value was decoded and the cursor advanced; false if 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the last value had already been decoded or if there was a problem decoding 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectbool dvmEncodedArrayIteratorGetNext(EncodedArrayIterator* iterator, 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AnnotationValue* value); 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 263375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#endif // DALVIK_REFLECT_REFLECT_H_ 264