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();
    }
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
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;
}