[vmkit-commits] [vmkit] r147376 - /vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
Will Dietz
wdietz2 at illinois.edu
Fri Dec 30 06:16:00 PST 2011
Author: wdietz2
Date: Fri Dec 30 08:16:00 2011
New Revision: 147376
URL: http://llvm.org/viewvc/llvm-project?rev=147376&view=rev
Log:
Impl JVM_GetClassAnnotations (OpenJDK)
Modified:
vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=147376&r1=147375&r2=147376&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Fri Dec 30 08:16:00 2011
@@ -1709,12 +1709,36 @@
/* Annotations support (JDK 1.5) */
JNIEXPORT jbyteArray JNICALL
JVM_GetClassAnnotations(JNIEnv *env, jclass cls) {
- JavaObject* ret = 0;
+ ArraySInt8 * ret = 0;
+ JavaObjectClass* Cl = 0;
llvm_gcroot(ret, 0);
+ llvm_gcroot(Cl, 0);
BEGIN_JNI_EXCEPTION
- NYI();
+ Cl = cls ? *(JavaObjectClass**)cls : 0;
+ verifyNull(Cl);
+
+ Jnjvm* vm = th->getJVM();
+ CommonClass* CC = JavaObjectClass::getClass(Cl);
+ assert(CC);
+ Class* cl = CC->asClass();
+ assert(cl);
+
+ Attribut* annotationsAtt =
+ cl->lookupAttribut(Attribut::annotationsAttribut);
+
+ if (annotationsAtt) {
+ uint32 len = annotationsAtt->nbb;
+ ret = (ArraySInt8*)vm->upcalls->ArrayOfByte->doNew(len, vm);
+
+ Reader reader(annotationsAtt, cl->bytes);
+ for(uint32 i = 0; i < len; ++i) {
+ ArraySInt8::setElement(ret, reader.readS1(), i);
+ }
+ RETURN_REF_FROM_JNI(ret, jbyteArray);
+ }
+
RETURN_FROM_JNI(0);
END_JNI_EXCEPTION
More information about the vmkit-commits
mailing list