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/* 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.lang.reflect.Method 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "Dalvik.h" 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "native/InternalNativePriv.h" 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * private int getMethodModifiers(Class decl_class, int slot) 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (Not sure why the access flags weren't stored in the class along with 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * everything else. Not sure why this isn't static.) 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Method_getMethodModifiers(const u4* args, 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult) 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_INT(dvmFixMethodFlags(meth->accessFlags)); 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * private Object invokeNative(Object obj, Object[] args, Class declaringClass, 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class[] parameterTypes, Class returnType, int slot, boolean noAccessCheck) 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invoke a static or virtual method via reflection. 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Method_invokeNative(const u4* args, 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult) 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* methObj = (Object*) args[1]; // null for static methods 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* argList = (ArrayObject*) args[2]; 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[3]; 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* params = (ArrayObject*) args[4]; 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* returnType = (ClassObject*) args[5]; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[6]; 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bool noAccessCheck = (args[7] != 0); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const Method* meth; 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* result; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "If the underlying method is static, the class that declared the 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method is initialized if it has not already been initialized." 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (dvmIsStaticMethod(meth)) { 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!dvmIsClassInitialized(declaringClass)) { 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!dvmInitClass(declaringClass)) 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project goto init_failed; 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* looks like interfaces need this too? */ 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (dvmIsInterfaceClass(declaringClass) && 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project !dvmIsClassInitialized(declaringClass)) 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!dvmInitClass(declaringClass)) 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project goto init_failed; 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* make sure the object is an instance of the expected class */ 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!dvmVerifyObjectInClass(methObj, declaringClass)) { 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(dvmCheckException(dvmThreadSelf())); 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* do the virtual table lookup for the method */ 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmGetVirtualizedMethod(methObj->clazz, meth); 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (meth == NULL) { 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(dvmCheckException(dvmThreadSelf())); 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the method has a return value, "result" will be an object or 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * a boxed primitive. 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result = dvmInvokeMethod(methObj, meth, argList, params, returnType, 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project noAccessCheck); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(result); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectinit_failed: 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If initialization failed, an exception will be raised. 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOGD("Method.invoke() on bad class %s failed\n", 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project declaringClass->descriptor); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(dvmCheckException(dvmThreadSelf())); 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public Annotation[] getDeclaredAnnotations(Class declaringClass, int slot) 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the annotations declared for this method. 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Method_getDeclaredAnnotations( 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4* args, JValue* pResult) 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* annos = dvmGetMethodAnnotations(meth); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmReleaseTrackedAlloc((Object*)annos, NULL); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(annos); 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public Annotation[] getParameterAnnotations(Class declaringClass, int slot) 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the annotations declared for this method's parameters. 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Method_getParameterAnnotations( 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4* args, JValue* pResult) 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* annos = dvmGetParameterAnnotations(meth); 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmReleaseTrackedAlloc((Object*)annos, NULL); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(annos); 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * private Object getDefaultValue(Class declaringClass, int slot) 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the default value for the annotation member represented by 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this Method instance. Returns NULL if none is defined. 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Method_getDefaultValue(const u4* args, 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult) 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* make sure this is an annotation class member */ 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!dvmIsAnnotationClass(declaringClass)) 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(NULL); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* def = dvmGetAnnotationDefaultValue(meth); 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmReleaseTrackedAlloc(def, NULL); 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(def); 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * private Object[] getSignatureAnnotation() 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the signature annotation. 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Method_getSignatureAnnotation( 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4* args, JValue* pResult) 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* arr = dvmGetMethodSignatureAnnotation(meth); 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmReleaseTrackedAlloc((Object*) arr, NULL); 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(arr); 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst DalvikNativeMethod dvm_java_lang_reflect_Method[] = { 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getMethodModifiers", "(Ljava/lang/Class;I)I", 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Method_getMethodModifiers }, 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "invokeNative", "(Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Class;[Ljava/lang/Class;Ljava/lang/Class;IZ)Ljava/lang/Object;", 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Method_invokeNative }, 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getDeclaredAnnotations", "(Ljava/lang/Class;I)[Ljava/lang/annotation/Annotation;", 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Method_getDeclaredAnnotations }, 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getParameterAnnotations", "(Ljava/lang/Class;I)[[Ljava/lang/annotation/Annotation;", 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Method_getParameterAnnotations }, 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getDefaultValue", "(Ljava/lang/Class;I)Ljava/lang/Object;", 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Method_getDefaultValue }, 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getSignatureAnnotation", "(Ljava/lang/Class;I)[Ljava/lang/Object;", 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Method_getSignatureAnnotation }, 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { NULL, NULL, NULL }, 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}; 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 221