diff options
author | Joonas Reynders <joonas.reynders@iki.fi> | 2012-01-14 10:32:18 +0200 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-01-14 12:01:13 +0200 |
commit | 84ce358a2ca281de8ba35cdb0a03a2aaa560af4a (patch) | |
tree | 0f395a5a346df4a4f1e66365ac72ed1796c03bda | |
parent | 4510ec96d083bb837ccf404bbfe353790ec9f89f (diff) | |
download | jato-84ce358a2ca281de8ba35cdb0a03a2aaa560af4a.tar.gz |
Adds missing handling and test for abstract classes to JNI AllocObject
Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r-- | test/functional/java/lang/JNITest.java | 7 | ||||
-rw-r--r-- | vm/jni-interface.c | 2 |
2 files changed, 8 insertions, 1 deletions
diff --git a/test/functional/java/lang/JNITest.java b/test/functional/java/lang/JNITest.java index bec268b9..d8f4e0e3 100644 --- a/test/functional/java/lang/JNITest.java +++ b/test/functional/java/lang/JNITest.java @@ -301,6 +301,13 @@ public class JNITest extends TestCase { testAllocObject(Runnable.class); } }, InstantiationException.class); + + assertThrows(new Block() { + public void run() throws Throwable { + // AllocObject must throw InstantiationException for an abstract class + testAllocObject(ClassLoader.class); + } + }, InstantiationException.class); } public static void testIsInstanceOf() { diff --git a/vm/jni-interface.c b/vm/jni-interface.c index 6636057a..c87a9778 100644 --- a/vm/jni-interface.c +++ b/vm/jni-interface.c @@ -494,7 +494,7 @@ static jobject JNI_AllocObject(JNIEnv *env, jclass clazz) struct vm_class *class = vm_class_get_class_from_class_object(clazz); check_null(class); - if (vm_class_is_interface(class)) { + if (vm_class_is_interface(class) || vm_class_is_abstract(class)) { signal_new_exception(vm_java_lang_InstantiationException, NULL); return NULL; } |