// natObjectInputStream.cc - Native part of ObjectInputStream class. /* Copyright (C) 1998, 1999, 2000 Free Software Foundation This ObjectInputStream is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the ObjectInputStream "LIBGCJ_LICENSE" for details. */ #include #include #include #include #include #include #include #include #include #ifdef DEBUG #include #include #endif jobject java::io::ObjectInputStream::allocateObject (jclass klass) { jobject obj = NULL; using namespace java::lang::reflect; try { JvAssert (klass && ! klass->isArray ()); if (klass->isInterface() || Modifier::isAbstract(klass->getModifiers())) obj = NULL; else { // FIXME: will this work for String? obj = JvAllocObject (klass); } } catch (jthrowable t) { return NULL; } return obj; } #define ObjectClass java::lang::Object::class$ #define ClassClass java::lang::Class::class$ void java::io::ObjectInputStream::callConstructor (jclass klass, jobject obj) { jstring init_name = JvNewStringLatin1 (""); JArray *arg_types = (JArray *) JvNewObjectArray (0, &ClassClass, NULL); JArray *args = (JArray *) JvNewObjectArray (0, &ObjectClass, NULL); java::lang::reflect::Method *m = klass->getPrivateMethod (init_name, arg_types); m->invoke (obj, args); } java::lang::reflect::Field * java::io::ObjectInputStream::getField (jclass klass, jstring name) { return klass->getPrivateField (name); } java::lang::reflect::Method * java::io::ObjectInputStream::getMethod (jclass klass, jstring name, JArray *arg_types) { return klass->getPrivateMethod (name, arg_types); }