[vmkit-commits] [vmkit] r180428 - Fixing bug in getDeclaredAnnotations
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:10:24 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:08:52 2013
New Revision: 180428
URL: http://llvm.org/viewvc/llvm-project?rev=180428&view=rev
Log:
Fixing bug in getDeclaredAnnotations
When a Field, Method or Class does not has annotations an empty array is returned. I was returning NULL (wrong)
(cherry picked from commit 0ea9484bd1eb2a5f1770812dc97f24e654f1a4c9)
Modified:
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc?rev=180428&r1=180427&r2=180428&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc Thu Apr 25 12:08:52 2013
@@ -84,15 +84,14 @@ jclass clazz,
#endif
JavaObject* Cl,
jboolean publicOnly) {
- JavaObjectClass* jcl = 0;
+
ArrayObject* ret = 0;
llvm_gcroot(Cl, 0);
llvm_gcroot(ret, 0);
- llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- ret = JavaObjectClass::getDeclaredConstructors(jcl = (JavaObjectClass*)Cl, publicOnly);
+ ret = JavaObjectClass::getDeclaredConstructors((JavaObjectClass*)Cl, publicOnly);
END_NATIVE_EXCEPTION
@@ -107,15 +106,13 @@ jclass clazz,
JavaObject* Cl,
jboolean publicOnly) {
- JavaObjectClass* jcl = 0;
ArrayObject* ret = 0;
llvm_gcroot(Cl, 0);
llvm_gcroot(ret, 0);
- llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- ret = JavaObjectClass::getDeclaredMethods(jcl = (JavaObjectClass*)Cl, publicOnly);
+ ret = JavaObjectClass::getDeclaredMethods((JavaObjectClass*)Cl, publicOnly);
END_NATIVE_EXCEPTION
@@ -130,14 +127,12 @@ jclass clazz,
JavaObject* Cl,
jboolean ignore) {
- JavaObjectClass* jcl = 0;
jint res = 0;
llvm_gcroot(Cl, 0);
- llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- res = JavaObjectClass::getModifiers(jcl = (JavaObjectClass*)Cl);
+ res = JavaObjectClass::getModifiers((JavaObjectClass*)Cl);
END_NATIVE_EXCEPTION
return res;
@@ -342,15 +337,14 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl, jboolean publicOnly) {
- JavaObjectClass* jcl = 0;
+
ArrayObject* ret = 0;
llvm_gcroot(Cl, 0);
llvm_gcroot(ret, 0);
- llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- ret = JavaObjectClass::getDeclaredFields(jcl = (JavaObjectClass*)Cl, publicOnly);
+ ret = JavaObjectClass::getDeclaredFields((JavaObjectClass*)Cl, publicOnly);
END_NATIVE_EXCEPTION
@@ -363,15 +357,14 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl) {
- JavaObjectClass* jcl = 0;
+
ArrayObject* res = 0;
llvm_gcroot(res, 0);
llvm_gcroot(Cl, 0);
- llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- res = JavaObjectClass::getInterfaces(jcl = (JavaObjectClass*)Cl);
+ res = JavaObjectClass::getInterfaces((JavaObjectClass*)Cl);
END_NATIVE_EXCEPTION
@@ -385,16 +378,14 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl) {
- JavaObjectClass* jcl = 0;
JavaObject* res = 0;
llvm_gcroot(res, 0);
llvm_gcroot(Cl, 0);
- llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- res = JavaObjectClass::getDeclaringClass(jcl = (JavaObjectClass*)Cl);
+ res = JavaObjectClass::getDeclaringClass((JavaObjectClass*)Cl);
END_NATIVE_EXCEPTION
@@ -408,15 +399,14 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl, bool publicOnly) {
- JavaObjectClass* jcl = 0;
+
ArrayObject* result = 0;
llvm_gcroot(result, 0);
llvm_gcroot(Cl, 0);
- llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- result = JavaObjectClass::getDeclaredClasses(jcl = (JavaObjectClass*)Cl, publicOnly);
+ result = JavaObjectClass::getDeclaredClasses((JavaObjectClass*)Cl, publicOnly);
END_NATIVE_EXCEPTION
@@ -444,11 +434,7 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl) {
- // TODO implement me
- //fprintf(stderr, "Java_java_lang_VMClass_getDeclaredAnnotations not implemented\n");
- //abort();
- ArrayObject* arrayRes = 0;
JavaObject* res = 0;
JavaObject* annon = 0;
JavaObject* newHashMap = 0;
@@ -458,7 +444,6 @@ JavaObject* Cl) {
llvm_gcroot(newHashMap, 0);
llvm_gcroot(Cl, 0);
llvm_gcroot(annotationClass, 0);
- llvm_gcroot(arrayRes, 0);
BEGIN_NATIVE_EXCEPTION(0)
@@ -469,42 +454,48 @@ JavaObject* Cl) {
//JavaField* field = JavaObjectVMField::getInternalField(VMField);
JavaAttribute* annotationsAtt =
cl->lookupAttribute(JavaAttribute::annotationsAttribute);
- //dprintf("JavaClass : %s\n", UTF8Buffer(field->name).cString());
- JnjvmClassLoader* loader = cl->classLoader;
+ JnjvmClassLoader* loader = cl->classLoader;
if (annotationsAtt) {
Reader reader(annotationsAtt, cl->bytes);
AnnotationReader AR(reader, cl);
uint16 numAnnotations = reader.readU2();
- UserClassArray* array = upcalls->annotationArrayClass;
- arrayRes = (ArrayObject *)(res = array->doNew(numAnnotations, vm));
+ UserClassArray* array = upcalls->constructorArrayAnnotation;
+ res = array->doNew(numAnnotations, vm);
for (uint16 i = 0; i < numAnnotations; ++i) {
- uint16 typeIndex = reader.readU2();
- const UTF8* annoType = cl->ctpInfo->UTF8At(typeIndex);
- newHashMap = AR.createAnnotationMapValues();
-
- annoType = annoType->extract(loader->hashUTF8, 1,annoType->size-1);
- dprintf("Annotation type : %s\n", UTF8Buffer(annoType).cString());
- UserClass* AnnonClass = 0;
- UserCommonClass* commClass = loader->lookupClass(annoType);
-
- if (commClass)
- AnnonClass = commClass -> asClass();
- else
- AnnonClass = loader->loadName(annoType, true, true, NULL);
-
- assert(AnnonClass && "Panic, imposible conditions");
-
- dprintf("Loaded class : %s \n", UTF8Buffer(AnnonClass->name).cString());
- annotationClass = AnnonClass->getClassDelegatee(vm);
+ uint16 typeIndex = reader.readU2();
+ const UTF8* annoType = cl->ctpInfo->UTF8At(typeIndex);
+
+
+ annoType = annoType->extract(loader->hashUTF8, 1,annoType->size-1);
+ dprintf("Annotation type : %s\n", UTF8Buffer(annoType).cString());
+ UserClass* AnnonClass = 0;
+ UserCommonClass* commClass = loader->lookupClass(annoType);
+
+ if (commClass)
+ AnnonClass = commClass -> asClass();
+ else
+ AnnonClass = loader->loadName(annoType, true, true, NULL);
- annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
- ArrayObject::setElement(arrayRes, annon, i);
- } // end for
+ assert(AnnonClass && "Panic, imposible conditions");
+
+ dprintf("Loaded class : %s \n", UTF8Buffer(AnnonClass->name).cString());
+ annotationClass = AnnonClass->getClassDelegatee(vm);
+
+ newHashMap = AR.createAnnotationMapValues(annotationClass);
+ annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
+ ArrayObject::setElement((ArrayObject *)res, annon, i);
+ } // end for
+
+ }
+ else {
+ UserClassArray* array = upcalls->constructorArrayAnnotation;
+ res = array->doNew(0, vm);
}
+
END_NATIVE_EXCEPTION
return (ArrayObject*)res;
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc?rev=180428&r1=180427&r2=180428&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc Thu Apr 25 12:08:52 2013
@@ -74,29 +74,25 @@ JavaObjectVMField* VMField, JavaObjectCl
AnnotationReader AR(reader, compilingClass);
uint16 numAnnotations = reader.readU2();
- for (uint16 i = 0; i < numAnnotations; ++i) {
- uint16 typeIndex = reader.readU2();
- const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex);
-
- // Remove the L and ; in the name annotation type (L.....;)
- // for the comparison.
- dprintf("Comparing with : %s\n", UTF8Buffer(annoType).cString());
- if (clazz->name->equals(annoType->elements+1, annoType->size-2)) {
- newHashMap = AR.createAnnotationMapValues();
-
-
- break;
-
- } else {
- AR.readAnnotationElementValues();
- }
- } // end for
-
- if (newHashMap) {
- dprintf("Annotation creation\n");
- res = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
- }
-
+ for (uint16 i = 0; i < numAnnotations; ++i) {
+ uint16 typeIndex = reader.readU2();
+ const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex);
+
+ // Remove the L and ; in the name annotation type (L.....;)
+ // for the comparison.
+ dprintf("Comparing with : %s\n", UTF8Buffer(annoType).cString());
+ if (clazz->name->equals(annoType->elements+1, annoType->size-2)) {
+ newHashMap = AR.createAnnotationMapValues(annotationClass);
+ break;
+ } else {
+ AR.readAnnotationElementValues();
+ }
+ } // end for
+
+ if (newHashMap) {
+ dprintf("Annotation creation\n");
+ res = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
+ }
}
} else {
vm->nullPointerException();
@@ -112,7 +108,6 @@ JNIEXPORT JavaObject* JNICALL Java_java_
JNIEnv *env,
#endif
JavaObjectVMField* VMField) {
- ArrayObject* arrayRes = 0;
JavaObject* res = 0;
JavaObject* annon = 0;
JavaObject* newHashMap = 0;
@@ -122,7 +117,6 @@ JavaObjectVMField* VMField) {
llvm_gcroot(newHashMap, 0);
llvm_gcroot(VMField, 0);
llvm_gcroot(annotationClass, 0);
- llvm_gcroot(arrayRes, 0);
BEGIN_NATIVE_EXCEPTION(0)
@@ -143,16 +137,15 @@ JavaObjectVMField* VMField) {
AnnotationReader AR(reader, compilingClass);
uint16 numAnnotations = reader.readU2();
- UserClassArray* array = upcalls->annotationArrayClass;
- arrayRes = (ArrayObject *)(res = array->doNew(numAnnotations, vm));
+ UserClassArray* array = upcalls->constructorArrayAnnotation;
+ res = array->doNew(numAnnotations, vm);
dprintf("JavaField : %s with %d fields \n", UTF8Buffer(field->name).cString(), numAnnotations);
for (uint16 i = 0; i < numAnnotations; ++i) {
uint16 typeIndex = reader.readU2();
const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex);
- newHashMap = AR.createAnnotationMapValues();
-
annoType = annoType->extract(loader->hashUTF8, 1,annoType->size-1);
dprintf("Annotation type : %s\n", UTF8Buffer(annoType).cString());
+
UserClass* AnnonClass = 0;
UserCommonClass* commClass = loader->lookupClass(annoType);
@@ -167,10 +160,16 @@ JavaObjectVMField* VMField) {
dprintf("Loaded class : %s \n", UTF8Buffer(AnnonClass->name).cString());
annotationClass = AnnonClass->getClassDelegatee(vm);
+ newHashMap = AR.createAnnotationMapValues(annotationClass);
+
annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
- ArrayObject::setElement(arrayRes, annon, i);
+ ArrayObject::setElement((ArrayObject *)res, annon, i);
} // end for
}
+ else {
+ UserClassArray* array = upcalls->constructorArrayAnnotation;
+ res = array->doNew(0, vm);
+ }
END_NATIVE_EXCEPTION
return res;
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc?rev=180428&r1=180427&r2=180428&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc Thu Apr 25 12:08:52 2013
@@ -105,7 +105,7 @@ JavaObjectVMMethod* VMMeth, JavaObjectCl
// Remove the L and ; in the name annotation type (L.....;)
// for the comparison.
if (clazz->name->equals(annoType->elements+1, annoType->size-2)) {
- newHashMap = AR.createAnnotationMapValues();
+ newHashMap = AR.createAnnotationMapValues(annotationClass);
break;
} else {
@@ -133,7 +133,6 @@ JNIEXPORT JavaObject* JNICALL Java_java_
JNIEnv *env,
#endif
JavaObjectVMMethod* VMMethod) {
- ArrayObject* arrayRes = 0;
JavaObject* res = 0;
JavaObject* annon = 0;
JavaObject* newHashMap = 0;
@@ -143,7 +142,6 @@ JavaObjectVMMethod* VMMethod) {
llvm_gcroot(newHashMap, 0);
llvm_gcroot(VMMethod, 0);
llvm_gcroot(annotationClass, 0);
- llvm_gcroot(arrayRes, 0);
BEGIN_NATIVE_EXCEPTION(0)
@@ -164,12 +162,12 @@ JavaObjectVMMethod* VMMethod) {
AnnotationReader AR(reader, compilingClass);
uint16 numAnnotations = reader.readU2();
- UserClassArray* array = upcalls->annotationArrayClass;
- arrayRes = (ArrayObject *)(res = array->doNew(numAnnotations, vm));
+ UserClassArray* array = upcalls->constructorArrayAnnotation;
+ res = array->doNew(numAnnotations, vm);
for (uint16 i = 0; i < numAnnotations; ++i) {
uint16 typeIndex = reader.readU2();
const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex);
- newHashMap = AR.createAnnotationMapValues();
+
annoType = annoType->extract(loader->hashUTF8, 1,annoType->size-1);
dprintf("Annotation type : %s\n", UTF8Buffer(annoType).cString());
@@ -185,10 +183,16 @@ JavaObjectVMMethod* VMMethod) {
dprintf("Loaded class : %s \n", UTF8Buffer(AnnonClass->name).cString());
annotationClass = AnnonClass->getClassDelegatee(vm);
+ newHashMap = AR.createAnnotationMapValues(annotationClass);
+
annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
- ArrayObject::setElement(arrayRes, annon, i);
+ ArrayObject::setElement((ArrayObject *)res, annon, i);
} // end for
}
+ else {
+ UserClassArray* array = upcalls->constructorArrayAnnotation;
+ res = array->doNew(0, vm);
+ }
END_NATIVE_EXCEPTION
return res;
More information about the vmkit-commits
mailing list