[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