181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch/*
281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2003, 2004, 2005, 2007, 2009 Apple Inc. All rights reserved.
381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright 2010, The Android Open Source Project
481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *
581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Redistribution and use in source and binary forms, with or without
681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * modification, are permitted provided that the following conditions
781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * are met:
881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 1. Redistributions of source code must retain the above copyright
981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    notice, this list of conditions and the following disclaimer.
1081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    notice, this list of conditions and the following disclaimer in the
1281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    documentation and/or other materials provided with the distribution.
1381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *
1481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
1581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
1881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
1981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
2081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
2181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
2281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch */
2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "config.h"
2881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "JavaFieldJSC.h"
2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if ENABLE(JAVA_BRIDGE)
3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "JNIUtilityPrivate.h"
3381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "JavaArrayJSC.h"
3481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "Logging.h"
3581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "runtime_array.h"
3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "runtime_object.h"
3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <runtime/Error.h>
3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochusing namespace JSC;
4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochusing namespace JSC::Bindings;
4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochusing namespace WebCore;
4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochJavaField::JavaField(JNIEnv* env, jobject aField)
4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Get field type name
4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jstring fieldTypeName = 0;
47698a253f5568db010beb93b2255697997d180406Steve Block    jclass fieldType = static_cast<jclass>(callJNIMethod<jobject>(aField, "getType", "()Ljava/lang/Class;"));
48698a253f5568db010beb93b2255697997d180406Steve Block    if (fieldType)
4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        fieldTypeName = static_cast<jstring>(callJNIMethod<jobject>(fieldType, "getName", "()Ljava/lang/String;"));
5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!fieldTypeName)
5181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        fieldTypeName = env->NewStringUTF("<Unknown>");
522bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_typeClassName = JavaString(env, fieldTypeName);
5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
542bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_type = javaTypeFromClassName(m_typeClassName.utf8());
55698a253f5568db010beb93b2255697997d180406Steve Block    env->DeleteLocalRef(fieldType);
56698a253f5568db010beb93b2255697997d180406Steve Block    env->DeleteLocalRef(fieldTypeName);
5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Get field name
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jstring fieldName = static_cast<jstring>(callJNIMethod<jobject>(aField, "getName", "()Ljava/lang/String;"));
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!fieldName)
6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        fieldName = env->NewStringUTF("<Unknown>");
6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_name = JavaString(env, fieldName);
63698a253f5568db010beb93b2255697997d180406Steve Block    env->DeleteLocalRef(fieldName);
6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
6581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_field = new JobjectWrapper(aField);
6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
682bde8e466a4451c7319e3a072d118917957d6554Steve Blockjvalue JavaField::dispatchValueFromInstance(ExecState* exec, const JavaInstance* instance, const char* name, const char* sig, JavaType returnType) const
6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jobject jinstance = instance->javaInstance();
7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jobject fieldJInstance = m_field->m_instance;
7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    JNIEnv* env = getJNIEnv();
7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jvalue result;
7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
7581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    memset(&result, 0, sizeof(jvalue));
7681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jclass cls = env->GetObjectClass(fieldJInstance);
7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (cls) {
7881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        jmethodID mid = env->GetMethodID(cls, name, sig);
7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        if (mid) {
8081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            RootObject* rootObject = instance->rootObject();
8181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            if (rootObject && rootObject->nativeHandle()) {
8281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                JSValue exceptionDescription;
8381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                jvalue args[1];
8481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
8581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                args[0].l = jinstance;
8681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                dispatchJNICall(exec, rootObject->nativeHandle(), fieldJInstance, false, returnType, mid, args, result, 0, exceptionDescription);
8781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                if (exceptionDescription)
8881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                    throwError(exec, createError(exec, exceptionDescription.toString(exec)));
8981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            }
9081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
9181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return result;
9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
9481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
9581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochJSValue JavaField::valueFromInstance(ExecState* exec, const Instance* i) const
9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
9781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const JavaInstance* instance = static_cast<const JavaInstance*>(i);
9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
9981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    JSValue jsresult = jsUndefined();
10081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1012bde8e466a4451c7319e3a072d118917957d6554Steve Block    switch (m_type) {
1022bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeArray:
1032bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeObject:
10481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
1052bde8e466a4451c7319e3a072d118917957d6554Steve Block            jvalue result = dispatchValueFromInstance(exec, instance, "get", "(Ljava/lang/Object;)Ljava/lang/Object;", JavaTypeObject);
10681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            jobject anObject = result.l;
10781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
10881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            if (!anObject)
10981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                return jsNull();
11081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1112bde8e466a4451c7319e3a072d118917957d6554Steve Block            const char* arrayType = typeClassName();
11281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            if (arrayType[0] == '[')
11381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                jsresult = JavaArray::convertJObjectToArray(exec, anObject, arrayType, instance->rootObject());
11481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            else if (anObject)
11581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                jsresult = JavaInstance::create(anObject, instance->rootObject())->createRuntimeObject(exec);
11681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
11781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
11881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1192bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeBoolean:
1202bde8e466a4451c7319e3a072d118917957d6554Steve Block        jsresult = jsBoolean(dispatchValueFromInstance(exec, instance, "getBoolean", "(Ljava/lang/Object;)Z", JavaTypeBoolean).z);
12181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
12281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1232bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeByte:
1242bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeChar:
1252bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeShort:
12681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1272bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeInt:
12881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
12981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            jint value;
1302bde8e466a4451c7319e3a072d118917957d6554Steve Block            jvalue result = dispatchValueFromInstance(exec, instance, "getInt", "(Ljava/lang/Object;)I", JavaTypeInt);
13181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            value = result.i;
13281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            jsresult = jsNumber(static_cast<int>(value));
13381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
13481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
13581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1362bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeLong:
1372bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeFloat:
1382bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeDouble:
13981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
14081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            jdouble value;
1412bde8e466a4451c7319e3a072d118917957d6554Steve Block            jvalue result = dispatchValueFromInstance(exec, instance, "getDouble", "(Ljava/lang/Object;)D", JavaTypeDouble);
14281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            value = result.i;
14381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            jsresult = jsNumber(static_cast<double>(value));
14481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
14581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
14681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    default:
14781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
14881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
14981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
15081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    LOG(LiveConnect, "JavaField::valueFromInstance getting %s = %s", UString(name().impl()).utf8().data(), jsresult.toString(exec).ascii().data());
15181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
15281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return jsresult;
15381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
15481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
15581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid JavaField::dispatchSetValueToInstance(ExecState* exec, const JavaInstance* instance, jvalue javaValue, const char* name, const char* sig) const
15681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
15781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jobject jinstance = instance->javaInstance();
15881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jobject fieldJInstance = m_field->m_instance;
15981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    JNIEnv* env = getJNIEnv();
16081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
16181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    jclass cls = env->GetObjectClass(fieldJInstance);
16281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (cls) {
16381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        jmethodID mid = env->GetMethodID(cls, name, sig);
16481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        if (mid) {
16581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            RootObject* rootObject = instance->rootObject();
16681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            if (rootObject && rootObject->nativeHandle()) {
16781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                JSValue exceptionDescription;
16881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                jvalue args[2];
16981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                jvalue result;
17081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
17181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                args[0].l = jinstance;
17281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                args[1] = javaValue;
1732bde8e466a4451c7319e3a072d118917957d6554Steve Block                dispatchJNICall(exec, rootObject->nativeHandle(), fieldJInstance, false, JavaTypeVoid, mid, args, result, 0, exceptionDescription);
17481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                if (exceptionDescription)
17581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                    throwError(exec, createError(exec, exceptionDescription.toString(exec)));
17681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            }
17781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
17881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
17981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
18081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
18181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid JavaField::setValueToInstance(ExecState* exec, const Instance* i, JSValue aValue) const
18281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
18381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const JavaInstance* instance = static_cast<const JavaInstance*>(i);
1842bde8e466a4451c7319e3a072d118917957d6554Steve Block    jvalue javaValue = convertValueToJValue(exec, i->rootObject(), aValue, m_type, typeClassName());
18581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
18681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    LOG(LiveConnect, "JavaField::setValueToInstance setting value %s to %s", UString(name().impl()).utf8().data(), aValue.toString(exec).ascii().data());
18781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1882bde8e466a4451c7319e3a072d118917957d6554Steve Block    switch (m_type) {
1892bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeArray:
1902bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeObject:
19181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
19281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "set", "(Ljava/lang/Object;Ljava/lang/Object;)V");
19381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
19481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
19581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1962bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeBoolean:
19781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
19881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "setBoolean", "(Ljava/lang/Object;Z)V");
19981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
20081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
20181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2022bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeByte:
20381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
20481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "setByte", "(Ljava/lang/Object;B)V");
20581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
20681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
20781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2082bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeChar:
20981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
21081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "setChar", "(Ljava/lang/Object;C)V");
21181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
21281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
21381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2142bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeShort:
21581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
21681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "setShort", "(Ljava/lang/Object;S)V");
21781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
21881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
21981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2202bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeInt:
22181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
22281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "setInt", "(Ljava/lang/Object;I)V");
22381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
22481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
22581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2262bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeLong:
22781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
22881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "setLong", "(Ljava/lang/Object;J)V");
22981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
23081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
23181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2322bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeFloat:
23381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
23481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "setFloat", "(Ljava/lang/Object;F)V");
23581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
23681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
23781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2382bde8e466a4451c7319e3a072d118917957d6554Steve Block    case JavaTypeDouble:
23981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        {
24081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            dispatchSetValueToInstance(exec, instance, javaValue, "setDouble", "(Ljava/lang/Object;D)V");
24181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        }
24281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
24381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    default:
24481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        break;
24581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
24681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
24781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
24881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif // ENABLE(JAVA_BRIDGE)
249