aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoonas Reynders <joonas.reynders@iki.fi>2012-01-14 10:32:18 +0200
committerPekka Enberg <penberg@kernel.org>2012-01-14 12:01:13 +0200
commit84ce358a2ca281de8ba35cdb0a03a2aaa560af4a (patch)
tree0f395a5a346df4a4f1e66365ac72ed1796c03bda
parent4510ec96d083bb837ccf404bbfe353790ec9f89f (diff)
downloadjato-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.java7
-rw-r--r--vm/jni-interface.c2
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;
}