java_lang_reflect_Constructor.c revision f6c387128427e121477c1b32ad35cdcaa5101ba3
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.Constructor 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 * public int getConstructorModifiers(Class declaringClass, int slot) 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Constructor_getConstructorModifiers( 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4* args, JValue* pResult) 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_INT(dvmFixMethodFlags(meth->accessFlags)); 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public int constructNative(Object[] args, Class declaringClass, 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class[] parameterTypes, int slot, boolean noAccessCheck) 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Constructor_constructNative( 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4* args, JValue* pResult) 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* argList = (ArrayObject*) args[1]; 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[2]; 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* params = (ArrayObject*) args[3]; 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[4]; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bool noAccessCheck = (args[5] != 0); 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* newObj; 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project newObj = dvmAllocObject(declaringClass, ALLOC_DEFAULT); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (newObj == NULL) 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(NULL); 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (void) dvmInvokeMethod(newObj, meth, argList, params, NULL, noAccessCheck); 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmReleaseTrackedAlloc(newObj, NULL); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(newObj); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public Annotation[] getDeclaredAnnotations(Class declaringClass, int slot) 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the annotations declared for this constructor. 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Constructor_getDeclaredAnnotations( 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4* args, JValue* pResult) 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* annos = dvmGetMethodAnnotations(meth); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmReleaseTrackedAlloc((Object*)annos, NULL); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(annos); 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public Annotation[][] getParameterAnnotations(Class declaringClass, int slot) 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the annotations declared for this constructor's parameters. 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Constructor_getParameterAnnotations( 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4* args, JValue* pResult) 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* annos = dvmGetParameterAnnotations(meth); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmReleaseTrackedAlloc((Object*)annos, NULL); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(annos); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * private Object[] getSignatureAnnotation() 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the signature annotation. 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_reflect_Constructor_getSignatureAnnotation( 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4* args, JValue* pResult) 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // ignore thisPtr in args[0] 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassObject* declaringClass = (ClassObject*) args[1]; 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int slot = args[2]; 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Method* meth; 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project meth = dvmSlotToMethod(declaringClass, slot); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(meth != NULL); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayObject* arr = dvmGetMethodSignatureAnnotation(meth); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmReleaseTrackedAlloc((Object*) arr, NULL); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(arr); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst DalvikNativeMethod dvm_java_lang_reflect_Constructor[] = { 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "constructNative", "([Ljava/lang/Object;Ljava/lang/Class;[Ljava/lang/Class;IZ)Ljava/lang/Object;", 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Constructor_constructNative }, 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getConstructorModifiers", "(Ljava/lang/Class;I)I", 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Constructor_getConstructorModifiers }, 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getDeclaredAnnotations", "(Ljava/lang/Class;I)[Ljava/lang/annotation/Annotation;", 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Constructor_getDeclaredAnnotations }, 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getParameterAnnotations", "(Ljava/lang/Class;I)[[Ljava/lang/annotation/Annotation;", 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Constructor_getParameterAnnotations }, 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getSignatureAnnotation", "(Ljava/lang/Class;I)[Ljava/lang/Object;", 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_reflect_Constructor_getSignatureAnnotation }, 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { NULL, NULL, NULL }, 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}; 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 144