QObject* QtJambiShell_QDeclarativeListProperty::object() { QTJAMBI_DEBUG_TRACE("(shell) entering: QDeclarativeListProperty::object()"); jmethodID method_id = m_vtable->method(8); if (method_id) { JNIEnv *__jni_env = qtjambi_current_environment(); if (!__jni_env) { return QtjambiDeclarativeListProperty::object(); } __jni_env->PushLocalFrame(100); QObject* __qt_return_value; jobject __java_return_value_object = m_link->javaObject(__jni_env); if(__jni_env->IsSameObject(__java_return_value_object, 0) == JNI_FALSE) { jobject __java_return_value = __jni_env->CallObjectMethod(__java_return_value_object, method_id); qtjambi_exception_check(__jni_env); QObject* __qt_return_value_tmp = (QObject* ) qtjambi_to_qobject(__jni_env, __java_return_value); QTJAMBI_EXCEPTION_CHECK(__jni_env); __qt_return_value = __qt_return_value_tmp; } else { qtjambishell_throw_nullpointerexception(__jni_env, "QDeclarativeListProperty::object()"); __qt_return_value = 0; } qtjambi_exception_check(__jni_env); __jni_env->PopLocalFrame(0); QTJAMBI_DEBUG_TRACE("(shell) -> leaving: QDeclarativeListProperty::object()"); return __qt_return_value; } else { QTJAMBI_DEBUG_TRACE("(shell) -> super() and leaving: QDeclarativeListProperty::object()"); return QtjambiDeclarativeListProperty::object(); } }
void QtJambiShell_QDeclarativeListProperty::clear() { QTJAMBI_DEBUG_TRACE("(shell) entering: QDeclarativeListProperty::clear()"); jmethodID method_id = m_vtable->method(6); if (method_id) { JNIEnv *__jni_env = qtjambi_current_environment(); if (!__jni_env) { QtjambiDeclarativeListProperty::clear(); return; } __jni_env->PushLocalFrame(100); jobject __java_return_value_object = m_link->javaObject(__jni_env); if(__jni_env->IsSameObject(__java_return_value_object, 0) == JNI_FALSE) { __jni_env->CallVoidMethod(__java_return_value_object, method_id); qtjambi_exception_check(__jni_env); } else { qtjambishell_throw_nullpointerexception(__jni_env, "QDeclarativeListProperty::clear()"); } qtjambi_exception_check(__jni_env); __jni_env->PopLocalFrame(0); QTJAMBI_DEBUG_TRACE("(shell) -> leaving: QDeclarativeListProperty::clear()"); } else { QTJAMBI_DEBUG_TRACE("(shell) -> super() and leaving: QDeclarativeListProperty::clear()"); QtjambiDeclarativeListProperty::clear(); } }
bool qtjambi_resolve_classes(JNIEnv *env, ClassData *data) { bool rv = true; // Resolve Data... for (int i=0; data[i].cl; ++i) { if (*data[i].cl) // function is restartable continue; jclass cl = qtjambi_find_class(env, data[i].name); if (cl == 0) { // Handle possible exception qtjambi_exception_check(env); rv = false; continue; // best-effort try next one } jclass gcls = (jclass) env->NewGlobalRef(cl); if (gcls == 0) { qtjambi_exception_check(env); rv = false; goto next; // best-effort try next one } *data[i].cl = gcls; next: env->DeleteLocalRef(cl); } return rv; }
bool qtjambi_resolve_fields(JNIEnv *env, bool bf_static, FieldData *data) { bool rv = true; // Resolve fields for (int i=0; data[i].cl; ++i) { if (*data[i].id) // function is restartable continue; if (*data[i].cl == 0) { rv = false; // no class to lookup fieldID against continue; } jfieldID fid; if (bf_static) fid = env->GetStaticFieldID(*data[i].cl, data[i].name, data[i].signature); else fid = env->GetFieldID(*data[i].cl, data[i].name, data[i].signature); Q_ASSERT_X(fid, data[i].name, data[i].signature); if (fid == 0) { // Handle possible exception qtjambi_exception_check(env); rv = false; continue; // best-effort try next one } *data[i].id = fid; } return rv; }
int main(int argc, char **argv) { if (argc < 2) { printf("Usage:\n" " jambi <vm options> [classname] options\n"); return 0; } int start = 2; QStringList vm_parameters; for(int i=1; i<argc; i++){ QString arg = QLatin1String(argv[i]); if(arg.startsWith("-")){ vm_parameters << arg; start++; }else{ break; } } qtjambi_initialize_vm(vm_parameters); JNIEnv *env = qtjambi_current_environment(); QString class_name = QLatin1String(argv[start-1]); jclass java_class = env->FindClass(class_name.replace('.', '/').toLatin1()); if (!java_class) { printf("failed to find class: '%s'\n", qPrintable(class_name)); return 0; } jmethodID main_id = env->GetStaticMethodID(java_class, "main", "([Ljava/lang/String;)V"); if (!main_id) { printf("failed to find main(String[])\n"); return 0; } jclass string_class = env->FindClass("java/lang/String"); Q_ASSERT(string_class); jobjectArray args = env->NewObjectArray(argc - start, string_class, 0); for (int i = start; i < argc; ++i) { env->SetObjectArrayElement(args, i - start, qtjambi_from_qstring(env, QLatin1String(argv[i]))); } env->CallStaticVoidMethod(java_class, main_id, args); qtjambi_exception_check(env); qtjambi_destroy_vm(); return 0; }