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