implement Class.getEnclosingClass

This commit is contained in:
Joel Dice 2014-10-08 17:04:32 -06:00
parent 85fec988d5
commit 1575b901d4
2 changed files with 25 additions and 0 deletions

View File

@ -1301,6 +1301,28 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
return 0;
}
extern "C" AVIAN_EXPORT int64_t JNICALL
Avian_java_lang_Class_getEnclosingClass(Thread* t,
object,
uintptr_t* arguments)
{
GcClass* c
= cast<GcJclass>(t, reinterpret_cast<object>(arguments[0]))->vmClass();
PROTECT(t, c);
GcClassAddendum* addendum = c->addendum();
if (addendum) {
GcByteArray* enclosingClass
= cast<GcByteArray>(t, addendum->enclosingClass());
if (enclosingClass) {
return reinterpret_cast<uintptr_t>(
getJClass(t, resolveClass(t, c->loader(), enclosingClass)));
}
}
return 0;
}
extern "C" AVIAN_EXPORT int64_t JNICALL
Avian_java_lang_Class_getEnclosingConstructor(Thread* t,
object method,

View File

@ -256,6 +256,9 @@ public class Reflection {
expect(Baz.class.getField("foo").getAnnotation(Ann.class) == null);
expect(Baz.class.getField("foo").getAnnotations().length == 0);
expect(new Runnable() { public void run() { } }.getClass()
.getEnclosingClass().equals(Reflection.class));
expect(new Runnable() { public void run() { } }.getClass()
.getEnclosingMethod().equals
(Reflection.class.getMethod