[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.19-706-ge5415e9

eric at webkit.org eric at webkit.org
Thu Feb 4 21:27:58 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit aff1348e87a5bf5d04419b869d719ee8bceeda53
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Jan 26 12:05:50 2010 +0000

    2010-01-26  Steve Block  <steveblock at google.com>
    
            Reviewed by Adam Barth.
    
            Moves JSC-specific classes from bridge/jni/JNIBridge to bridge/jni/jsc/JNIBridgeJSC
            https://bugs.webkit.org/show_bug.cgi?id=33958
    
            This allows bridge/jni/JNIBridge to be used with both JSC and V8.
            A later change will add the V8 equivalent of these JSC-specific classes.
    
            No new tests, refactoring only.
    
            * Android.jscbindings.mk: Modified. Added JNIBridgeJSC.cpp
            * GNUmakefile.am: Modified. Added JNIBridgeJSC.h
            * WebCore.xcodeproj/project.pbxproj: Modified. Added JNIBridgeJSC.[cpp|h]
            * bridge/jni/JNIBridge.cpp: Modified. Moved JavaField and JavaArray to JNIBridgeJSC.cpp
            (appendClassName): Modfied. Guard calls to JSLock
            (JavaMethod::signature): Modfied. Guard calls to JSLock
            * bridge/jni/JNIBridge.h: Modified. Moved JavaField and JavaArray to JNIBridgeJSC.h
            * bridge/jni/jsc/JNIBridgeJSC.cpp: Copied from WebCore/bridge/jni/JNIBridge.cpp.
            * bridge/jni/jsc/JNIBridgeJSC.h: Copied from WebCore/bridge/jni/JNIBridge.h.
            * bridge/jni/jsc/JNIUtilityPrivate.cpp: Modified. Include JNIBridgeJSC.h
            * bridge/jni/jsc/JavaClassJSC.h: Modified. Include JNIBridgeJSC.h
            * bridge/jni/jsc/JavaInstanceJSC.cpp: Modified. Include JNIBridgeJSC.h
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53849 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/Android.jscbindings.mk b/WebCore/Android.jscbindings.mk
index cdbd98d..5bd2b69 100644
--- a/WebCore/Android.jscbindings.mk
+++ b/WebCore/Android.jscbindings.mk
@@ -186,6 +186,7 @@ LOCAL_SRC_FILES += \
 	bridge/c/c_utility.cpp \
 	bridge/jni/JNIBridge.cpp \
 	bridge/jni/JNIUtility.cpp \
+	bridge/jni/jsc/JNIBridgeJSC.cpp \
 	bridge/jni/jsc/JNIUtilityPrivate.cpp \
 	bridge/jni/jsc/JavaClassJSC.cpp \
 	bridge/jni/jsc/JavaInstanceJSC.cpp \
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index fe17611..447d4e5 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,28 @@
+2010-01-26  Steve Block  <steveblock at google.com>
+
+        Reviewed by Adam Barth.
+
+        Moves JSC-specific classes from bridge/jni/JNIBridge to bridge/jni/jsc/JNIBridgeJSC
+        https://bugs.webkit.org/show_bug.cgi?id=33958
+
+        This allows bridge/jni/JNIBridge to be used with both JSC and V8.
+        A later change will add the V8 equivalent of these JSC-specific classes.
+
+        No new tests, refactoring only.
+
+        * Android.jscbindings.mk: Modified. Added JNIBridgeJSC.cpp
+        * GNUmakefile.am: Modified. Added JNIBridgeJSC.h
+        * WebCore.xcodeproj/project.pbxproj: Modified. Added JNIBridgeJSC.[cpp|h]
+        * bridge/jni/JNIBridge.cpp: Modified. Moved JavaField and JavaArray to JNIBridgeJSC.cpp
+        (appendClassName): Modfied. Guard calls to JSLock
+        (JavaMethod::signature): Modfied. Guard calls to JSLock
+        * bridge/jni/JNIBridge.h: Modified. Moved JavaField and JavaArray to JNIBridgeJSC.h
+        * bridge/jni/jsc/JNIBridgeJSC.cpp: Copied from WebCore/bridge/jni/JNIBridge.cpp.
+        * bridge/jni/jsc/JNIBridgeJSC.h: Copied from WebCore/bridge/jni/JNIBridge.h.
+        * bridge/jni/jsc/JNIUtilityPrivate.cpp: Modified. Include JNIBridgeJSC.h
+        * bridge/jni/jsc/JavaClassJSC.h: Modified. Include JNIBridgeJSC.h
+        * bridge/jni/jsc/JavaInstanceJSC.cpp: Modified. Include JNIBridgeJSC.h
+
 2010-01-26  Jocelyn Turcotte  <jocelyn.turcotte at nokia.com>
 
         Unreviewed build fix.
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index 9bbc843..102cfe2 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -518,6 +518,7 @@ webcore_sources += \
 	WebCore/bridge/jni/JNIBridge.h \
 	WebCore/bridge/jni/JNIUtility.h \
 	WebCore/bridge/jni/jni_jsobject.h \
+	WebCore/bridge/jni/jsc/JNIBridgeJSC.h \
 	WebCore/bridge/jni/jsc/JavaClassJSC.h \
 	WebCore/bridge/jni/jsc/JavaInstanceJSC.h \
 	WebCore/bridge/jsc/BridgeJSC.h \
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index 1a5d665..81919d8 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -1130,6 +1130,8 @@
 		59C77F2B10545B3B00506104 /* GeolocationServiceMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 59C77F2910545B3B00506104 /* GeolocationServiceMock.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		59E560A71105336600AA1258 /* JavaClassJSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E560A61105336600AA1258 /* JavaClassJSC.h */; };
 		59E560A91105336F00AA1258 /* JavaClassJSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59E560A81105336F00AA1258 /* JavaClassJSC.cpp */; };
+		59E842661109E5A2000305AD /* JNIBridgeJSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E842651109E5A2000305AD /* JNIBridgeJSC.h */; };
+		59E842681109E5AE000305AD /* JNIBridgeJSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59E842671109E5AE000305AD /* JNIBridgeJSC.cpp */; };
 		59EE122C1106080500885116 /* JNIUtilityPrivate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59EE122B1106080500885116 /* JNIUtilityPrivate.cpp */; };
 		59EE122E1106080F00885116 /* JNIUtilityPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EE122D1106080F00885116 /* JNIUtilityPrivate.h */; };
 		59EE12301106081F00885116 /* JNIUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59EE122F1106081F00885116 /* JNIUtility.cpp */; };
@@ -6515,6 +6517,8 @@
 		59C77F2910545B3B00506104 /* GeolocationServiceMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GeolocationServiceMock.h; path = mock/GeolocationServiceMock.h; sourceTree = "<group>"; };
 		59E560A61105336600AA1258 /* JavaClassJSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JavaClassJSC.h; path = jsc/JavaClassJSC.h; sourceTree = "<group>"; };
 		59E560A81105336F00AA1258 /* JavaClassJSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JavaClassJSC.cpp; path = jsc/JavaClassJSC.cpp; sourceTree = "<group>"; };
+		59E842651109E5A2000305AD /* JNIBridgeJSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JNIBridgeJSC.h; path = jsc/JNIBridgeJSC.h; sourceTree = "<group>"; };
+		59E842671109E5AE000305AD /* JNIBridgeJSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JNIBridgeJSC.cpp; path = jsc/JNIBridgeJSC.cpp; sourceTree = "<group>"; };
 		59EE122B1106080500885116 /* JNIUtilityPrivate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JNIUtilityPrivate.cpp; path = jsc/JNIUtilityPrivate.cpp; sourceTree = "<group>"; };
 		59EE122D1106080F00885116 /* JNIUtilityPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JNIUtilityPrivate.h; path = jsc/JNIUtilityPrivate.h; sourceTree = "<group>"; };
 		59EE122F1106081F00885116 /* JNIUtility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JNIUtility.cpp; sourceTree = "<group>"; };
@@ -11129,6 +11133,8 @@
 		599D1E2F10C97D4C00E0EF12 /* jsc */ = {
 			isa = PBXGroup;
 			children = (
+				59E842671109E5AE000305AD /* JNIBridgeJSC.cpp */,
+				59E842651109E5A2000305AD /* JNIBridgeJSC.h */,
 				59EE122D1106080F00885116 /* JNIUtilityPrivate.h */,
 				59EE122B1106080500885116 /* JNIUtilityPrivate.cpp */,
 				59BC393E11054A1300FD85DB /* JavaStringJSC.h */,
@@ -18475,6 +18481,7 @@
 				59B5977511086579007159E8 /* BridgeJSC.h in Headers */,
 				93C4F6EB1108F9A50099D0DB /* AccessibilityScrollbar.h in Headers */,
 				082FCAC4110927CE00CC4821 /* JSSVGContextCache.h in Headers */,
+				59E842661109E5A2000305AD /* JNIBridgeJSC.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -20653,6 +20660,7 @@
 				2E2D99E810E2BC1C00496337 /* DOMBlob.mm in Sources */,
 				59B597731108656B007159E8 /* BridgeJSC.cpp in Sources */,
 				93C4F6EA1108F9A50099D0DB /* AccessibilityScrollbar.cpp in Sources */,
+				59E842681109E5AE000305AD /* JNIBridgeJSC.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/WebCore/bridge/jni/JNIBridge.cpp b/WebCore/bridge/jni/JNIBridge.cpp
index 627d227..4810e5f 100644
--- a/WebCore/bridge/jni/JNIBridge.cpp
+++ b/WebCore/bridge/jni/JNIBridge.cpp
@@ -30,14 +30,8 @@
 #if ENABLE(MAC_JAVA_BRIDGE)
 
 #include "CString.h"
-#include "JNIUtility.h"
-#include "JNIUtilityPrivate.h"
 #include "StringBuilder.h"
-#include "runtime_array.h"
-#include "runtime_object.h"
-#include "runtime_root.h"
-#include <runtime/Error.h>
-#include <runtime/JSLock.h>
+
 
 #ifdef NDEBUG
 #define JS_LOG(formatAndArgs...) ((void)0)
@@ -59,206 +53,6 @@ JavaParameter::JavaParameter(JNIEnv* env, jstring type)
     m_JNIType = JNITypeFromClassName(m_type.UTF8String());
 }
 
-JavaField::JavaField(JNIEnv* env, jobject aField)
-{
-    // Get field type
-    jobject fieldType = callJNIMethod<jobject>(aField, "getType", "()Ljava/lang/Class;");
-    jstring fieldTypeName = static_cast<jstring>(callJNIMethod<jobject>(fieldType, "getName", "()Ljava/lang/String;"));
-    m_type = JavaString(env, fieldTypeName);
-    m_JNIType = JNITypeFromClassName(m_type.UTF8String());
-
-    // Get field name
-    jstring fieldName = static_cast<jstring>(callJNIMethod<jobject>(aField, "getName", "()Ljava/lang/String;"));
-    m_name = JavaString(env, fieldName);
-
-    m_field = new JObjectWrapper(aField);
-}
-
-JSValue JavaArray::convertJObjectToArray(ExecState* exec, jobject anObject, const char* type, PassRefPtr<RootObject> rootObject)
-{
-    if (type[0] != '[')
-        return jsUndefined();
-
-    return new (exec) RuntimeArray(exec, new JavaArray(anObject, type, rootObject));
-}
-
-jvalue JavaField::dispatchValueFromInstance(ExecState* exec, const JavaInstance* instance, const char* name, const char* sig, JNIType returnType) const
-{
-    jobject jinstance = instance->javaInstance();
-    jobject fieldJInstance = m_field->m_instance;
-    JNIEnv* env = getJNIEnv();
-    jvalue result;
-
-    bzero(&result, sizeof(jvalue));
-    jclass cls = env->GetObjectClass(fieldJInstance);
-    if (cls) {
-        jmethodID mid = env->GetMethodID(cls, name, sig);
-        if (mid) {
-            RootObject* rootObject = instance->rootObject();
-            if (rootObject && rootObject->nativeHandle()) {
-                JSValue exceptionDescription;
-                jvalue args[1];
-
-                args[0].l = jinstance;
-                dispatchJNICall(exec, rootObject->nativeHandle(), fieldJInstance, false, returnType, mid, args, result, 0, exceptionDescription);
-                if (exceptionDescription)
-                    throwError(exec, GeneralError, exceptionDescription.toString(exec));
-            }
-        }
-    }
-    return result;
-}
-
-JSValue JavaField::valueFromInstance(ExecState* exec, const Instance* i) const
-{
-    const JavaInstance* instance = static_cast<const JavaInstance*>(i);
-
-    JSValue jsresult = jsUndefined();
-
-    switch (m_JNIType) {
-    case array_type:
-    case object_type:
-        {
-            jvalue result = dispatchValueFromInstance(exec, instance, "get", "(Ljava/lang/Object;)Ljava/lang/Object;", object_type);
-            jobject anObject = result.l;
-
-            const char* arrayType = type();
-            if (arrayType[0] == '[')
-                jsresult = JavaArray::convertJObjectToArray(exec, anObject, arrayType, instance->rootObject());
-            else if (anObject)
-                jsresult = JavaInstance::create(anObject, instance->rootObject())->createRuntimeObject(exec);
-        }
-        break;
-
-    case boolean_type:
-        jsresult = jsBoolean(dispatchValueFromInstance(exec, instance, "getBoolean", "(Ljava/lang/Object;)Z", boolean_type).z);
-        break;
-
-    case byte_type:
-    case char_type:
-    case short_type:
-
-    case int_type:
-        {
-            jint value;
-            jvalue result = dispatchValueFromInstance(exec, instance, "getInt", "(Ljava/lang/Object;)I", int_type);
-            value = result.i;
-            jsresult = jsNumber(exec, static_cast<int>(value));
-        }
-        break;
-
-    case long_type:
-    case float_type:
-    case double_type:
-        {
-            jdouble value;
-            jvalue result = dispatchValueFromInstance(exec, instance, "getDouble", "(Ljava/lang/Object;)D", double_type);
-            value = result.i;
-            jsresult = jsNumber(exec, static_cast<double>(value));
-        }
-        break;
-    default:
-        break;
-    }
-
-    JS_LOG("getting %s = %s\n", UString(name()).UTF8String().c_str(), jsresult.toString(exec).ascii());
-
-    return jsresult;
-}
-
-void JavaField::dispatchSetValueToInstance(ExecState* exec, const JavaInstance* instance, jvalue javaValue, const char* name, const char* sig) const
-{
-    jobject jinstance = instance->javaInstance();
-    jobject fieldJInstance = m_field->m_instance;
-    JNIEnv* env = getJNIEnv();
-
-    jclass cls = env->GetObjectClass(fieldJInstance);
-    if (cls) {
-        jmethodID mid = env->GetMethodID(cls, name, sig);
-        if (mid) {
-            RootObject* rootObject = instance->rootObject();
-            if (rootObject && rootObject->nativeHandle()) {
-                JSValue exceptionDescription;
-                jvalue args[2];
-                jvalue result;
-
-                args[0].l = jinstance;
-                args[1] = javaValue;
-                dispatchJNICall(exec, rootObject->nativeHandle(), fieldJInstance, false, void_type, mid, args, result, 0, exceptionDescription);
-                if (exceptionDescription)
-                    throwError(exec, GeneralError, exceptionDescription.toString(exec));
-            }
-        }
-    }
-}
-
-void JavaField::setValueToInstance(ExecState* exec, const Instance* i, JSValue aValue) const
-{
-    const JavaInstance* instance = static_cast<const JavaInstance*>(i);
-    jvalue javaValue = convertValueToJValue(exec, aValue, m_JNIType, type());
-
-    JS_LOG("setting value %s to %s\n", UString(name()).UTF8String().c_str(), aValue.toString(exec).ascii());
-
-    switch (m_JNIType) {
-    case array_type:
-    case object_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "set", "(Ljava/lang/Object;Ljava/lang/Object;)V");
-        }
-        break;
-
-    case boolean_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "setBoolean", "(Ljava/lang/Object;Z)V");
-        }
-        break;
-
-    case byte_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "setByte", "(Ljava/lang/Object;B)V");
-        }
-        break;
-
-    case char_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "setChar", "(Ljava/lang/Object;C)V");
-        }
-        break;
-
-    case short_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "setShort", "(Ljava/lang/Object;S)V");
-        }
-        break;
-
-    case int_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "setInt", "(Ljava/lang/Object;I)V");
-        }
-        break;
-
-    case long_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "setLong", "(Ljava/lang/Object;J)V");
-        }
-        break;
-
-    case float_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "setFloat", "(Ljava/lang/Object;F)V");
-        }
-        break;
-
-    case double_type:
-        {
-            dispatchSetValueToInstance(exec, instance, javaValue, "setDouble", "(Ljava/lang/Object;D)V");
-        }
-        break;
-    default:
-        break;
-    }
-}
-
 JavaMethod::JavaMethod(JNIEnv* env, jobject aMethod)
 {
     // Get return type
@@ -309,7 +103,9 @@ JavaMethod::~JavaMethod()
 // we get '.' between components from the reflection API.
 static void appendClassName(StringBuilder& builder, const char* className)
 {
+#if USE(JSC)
     ASSERT(JSLock::lockCount() > 0);
+#endif
 
     char* c = strdup(className);
 
@@ -328,7 +124,9 @@ static void appendClassName(StringBuilder& builder, const char* className)
 const char* JavaMethod::signature() const
 {
     if (!m_signature) {
+#if USE(JSC)
         JSLock lock(SilenceAssertionsOnly);
+#endif
 
         StringBuilder signatureBuilder;
         signatureBuilder.append("(");
@@ -377,200 +175,4 @@ jmethodID JavaMethod::methodID(jobject obj) const
     return m_methodID;
 }
 
-
-JavaArray::JavaArray(jobject array, const char* type, PassRefPtr<RootObject> rootObject)
-    : Array(rootObject)
-{
-    m_array = new JObjectWrapper(array);
-    // Java array are fixed length, so we can cache length.
-    JNIEnv* env = getJNIEnv();
-    m_length = env->GetArrayLength(static_cast<jarray>(m_array->m_instance));
-    m_type = strdup(type);
-    m_rootObject = rootObject;
-}
-
-JavaArray::~JavaArray()
-{
-    free(const_cast<char*>(m_type));
-}
-
-RootObject* JavaArray::rootObject() const
-{
-    return m_rootObject && m_rootObject->isValid() ? m_rootObject.get() : 0;
-}
-
-void JavaArray::setValueAt(ExecState* exec, unsigned index, JSValue aValue) const
-{
-    JNIEnv* env = getJNIEnv();
-    char* javaClassName = 0;
-
-    JNIType arrayType = JNITypeFromPrimitiveType(m_type[1]);
-    if (m_type[1] == 'L') {
-        // The type of the array will be something like:
-        // "[Ljava.lang.string;".  This is guaranteed, so no need
-        // for extra sanity checks.
-        javaClassName = strdup(&m_type[2]);
-        javaClassName[strchr(javaClassName, ';')-javaClassName] = 0;
-    }
-    jvalue aJValue = convertValueToJValue(exec, aValue, arrayType, javaClassName);
-
-    switch (arrayType) {
-    case object_type:
-        {
-            env->SetObjectArrayElement(static_cast<jobjectArray>(javaArray()), index, aJValue.l);
-            break;
-        }
-
-    case boolean_type:
-        {
-            env->SetBooleanArrayRegion(static_cast<jbooleanArray>(javaArray()), index, 1, &aJValue.z);
-            break;
-        }
-
-    case byte_type:
-        {
-            env->SetByteArrayRegion(static_cast<jbyteArray>(javaArray()), index, 1, &aJValue.b);
-            break;
-        }
-
-    case char_type:
-        {
-            env->SetCharArrayRegion(static_cast<jcharArray>(javaArray()), index, 1, &aJValue.c);
-            break;
-        }
-
-    case short_type:
-        {
-            env->SetShortArrayRegion(static_cast<jshortArray>(javaArray()), index, 1, &aJValue.s);
-            break;
-        }
-
-    case int_type:
-        {
-            env->SetIntArrayRegion(static_cast<jintArray>(javaArray()), index, 1, &aJValue.i);
-            break;
-        }
-
-    case long_type:
-        {
-            env->SetLongArrayRegion(static_cast<jlongArray>(javaArray()), index, 1, &aJValue.j);
-        }
-
-    case float_type:
-        {
-            env->SetFloatArrayRegion(static_cast<jfloatArray>(javaArray()), index, 1, &aJValue.f);
-            break;
-        }
-
-    case double_type:
-        {
-            env->SetDoubleArrayRegion(static_cast<jdoubleArray>(javaArray()), index, 1, &aJValue.d);
-            break;
-        }
-    default:
-        break;
-    }
-
-    if (javaClassName)
-        free(const_cast<char*>(javaClassName));
-}
-
-
-JSValue JavaArray::valueAt(ExecState* exec, unsigned index) const
-{
-    JNIEnv* env = getJNIEnv();
-    JNIType arrayType = JNITypeFromPrimitiveType(m_type[1]);
-    switch (arrayType) {
-    case object_type:
-        {
-            jobjectArray objectArray = static_cast<jobjectArray>(javaArray());
-            jobject anObject;
-            anObject = env->GetObjectArrayElement(objectArray, index);
-
-            // No object?
-            if (!anObject)
-                return jsNull();
-
-            // Nested array?
-            if (m_type[1] == '[')
-                return JavaArray::convertJObjectToArray(exec, anObject, m_type + 1, rootObject());
-            // or array of other object type?
-            return JavaInstance::create(anObject, rootObject())->createRuntimeObject(exec);
-        }
-
-    case boolean_type:
-        {
-            jbooleanArray booleanArray = static_cast<jbooleanArray>(javaArray());
-            jboolean aBoolean;
-            env->GetBooleanArrayRegion(booleanArray, index, 1, &aBoolean);
-            return jsBoolean(aBoolean);
-        }
-
-    case byte_type:
-        {
-            jbyteArray byteArray = static_cast<jbyteArray>(javaArray());
-            jbyte aByte;
-            env->GetByteArrayRegion(byteArray, index, 1, &aByte);
-            return jsNumber(exec, aByte);
-        }
-
-    case char_type:
-        {
-            jcharArray charArray = static_cast<jcharArray>(javaArray());
-            jchar aChar;
-            env->GetCharArrayRegion(charArray, index, 1, &aChar);
-            return jsNumber(exec, aChar);
-            break;
-        }
-
-    case short_type:
-        {
-            jshortArray shortArray = static_cast<jshortArray>(javaArray());
-            jshort aShort;
-            env->GetShortArrayRegion(shortArray, index, 1, &aShort);
-            return jsNumber(exec, aShort);
-        }
-
-    case int_type:
-        {
-            jintArray intArray = static_cast<jintArray>(javaArray());
-            jint anInt;
-            env->GetIntArrayRegion(intArray, index, 1, &anInt);
-            return jsNumber(exec, anInt);
-        }
-
-    case long_type:
-        {
-            jlongArray longArray = static_cast<jlongArray>(javaArray());
-            jlong aLong;
-            env->GetLongArrayRegion(longArray, index, 1, &aLong);
-            return jsNumber(exec, aLong);
-        }
-
-    case float_type:
-        {
-            jfloatArray floatArray = static_cast<jfloatArray>(javaArray());
-            jfloat aFloat;
-            env->GetFloatArrayRegion(floatArray, index, 1, &aFloat);
-            return jsNumber(exec, aFloat);
-        }
-
-    case double_type:
-        {
-            jdoubleArray doubleArray = static_cast<jdoubleArray>(javaArray());
-            jdouble aDouble;
-            env->GetDoubleArrayRegion(doubleArray, index, 1, &aDouble);
-            return jsNumber(exec, aDouble);
-        }
-    default:
-        break;
-    }
-    return jsUndefined();
-}
-
-unsigned int JavaArray::getLength() const
-{
-    return m_length;
-}
-
 #endif // ENABLE(MAC_JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/JNIBridge.h b/WebCore/bridge/jni/JNIBridge.h
index ce129af..712ee7d 100644
--- a/WebCore/bridge/jni/JNIBridge.h
+++ b/WebCore/bridge/jni/JNIBridge.h
@@ -30,7 +30,6 @@
 #if ENABLE(MAC_JAVA_BRIDGE)
 
 #include "JNIUtility.h"
-#include "JavaInstanceJSC.h"
 
 #if USE(JSC)
 #include "JavaStringJSC.h"
@@ -84,30 +83,6 @@ private:
     JNIType m_JNIType;
 };
 
-
-class JavaField : public Field {
-public:
-    JavaField(JNIEnv*, jobject aField);
-
-    virtual JSValue valueFromInstance(ExecState*, const Instance*) const;
-    virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const;
-
-    const JavaString& name() const { return m_name; }
-    virtual RuntimeType type() const { return m_type.UTF8String(); }
-
-    JNIType getJNIType() const { return m_JNIType; }
-
-private:
-    void dispatchSetValueToInstance(ExecState*, const JavaInstance*, jvalue, const char* name, const char* sig) const;
-    jvalue dispatchValueFromInstance(ExecState*, const JavaInstance*, const char* name, const char* sig, JNIType returnType) const;
-
-    JavaString m_name;
-    JavaString m_type;
-    JNIType m_JNIType;
-    RefPtr<JObjectWrapper> m_field;
-};
-
-
 class JavaMethod : public Method {
 public:
     JavaMethod(JNIEnv*, jobject aMethod);
@@ -136,27 +111,6 @@ private:
     bool m_isStatic;
 };
 
-class JavaArray : public Array {
-public:
-    JavaArray(jobject array, const char* type, PassRefPtr<RootObject>);
-    virtual ~JavaArray();
-
-    RootObject* rootObject() const;
-
-    virtual void setValueAt(ExecState*, unsigned int index, JSValue) const;
-    virtual JSValue valueAt(ExecState*, unsigned int index) const;
-    virtual unsigned int getLength() const;
-
-    jobject javaArray() const { return m_array->m_instance; }
-
-    static JSValue convertJObjectToArray(ExecState*, jobject, const char* type, PassRefPtr<RootObject>);
-
-private:
-    RefPtr<JObjectWrapper> m_array;
-    unsigned int m_length;
-    const char* m_type;
-};
-
 } // namespace Bindings
 
 } // namespace JSC
diff --git a/WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp b/WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp
new file mode 100644
index 0000000..4bc6c47
--- /dev/null
+++ b/WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp
@@ -0,0 +1,445 @@
+/*
+ * Copyright (C) 2003, 2004, 2005, 2007, 2009 Apple Inc. All rights reserved.
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "JNIBridgeJSC.h"
+
+#if ENABLE(MAC_JAVA_BRIDGE)
+
+#include "JNIUtilityPrivate.h"
+#include "runtime_array.h"
+#include "runtime_object.h"
+#include <runtime/Error.h>
+
+#ifdef NDEBUG
+#define JS_LOG(formatAndArgs...) ((void)0)
+#else
+#define JS_LOG(formatAndArgs...) { \
+    fprintf(stderr, "%s:%d -- %s:  ", __FILE__, __LINE__, __FUNCTION__); \
+    fprintf(stderr, formatAndArgs); \
+}
+#endif
+
+using namespace JSC;
+using namespace JSC::Bindings;
+
+
+JavaField::JavaField(JNIEnv* env, jobject aField)
+{
+    // Get field type
+    jobject fieldType = callJNIMethod<jobject>(aField, "getType", "()Ljava/lang/Class;");
+    jstring fieldTypeName = static_cast<jstring>(callJNIMethod<jobject>(fieldType, "getName", "()Ljava/lang/String;"));
+    m_type = JavaString(env, fieldTypeName);
+    m_JNIType = JNITypeFromClassName(m_type.UTF8String());
+
+    // Get field name
+    jstring fieldName = static_cast<jstring>(callJNIMethod<jobject>(aField, "getName", "()Ljava/lang/String;"));
+    m_name = JavaString(env, fieldName);
+
+    m_field = new JObjectWrapper(aField);
+}
+
+JSValue JavaArray::convertJObjectToArray(ExecState* exec, jobject anObject, const char* type, PassRefPtr<RootObject> rootObject)
+{
+    if (type[0] != '[')
+        return jsUndefined();
+
+    return new (exec) RuntimeArray(exec, new JavaArray(anObject, type, rootObject));
+}
+
+jvalue JavaField::dispatchValueFromInstance(ExecState* exec, const JavaInstance* instance, const char* name, const char* sig, JNIType returnType) const
+{
+    jobject jinstance = instance->javaInstance();
+    jobject fieldJInstance = m_field->m_instance;
+    JNIEnv* env = getJNIEnv();
+    jvalue result;
+
+    bzero(&result, sizeof(jvalue));
+    jclass cls = env->GetObjectClass(fieldJInstance);
+    if (cls) {
+        jmethodID mid = env->GetMethodID(cls, name, sig);
+        if (mid) {
+            RootObject* rootObject = instance->rootObject();
+            if (rootObject && rootObject->nativeHandle()) {
+                JSValue exceptionDescription;
+                jvalue args[1];
+
+                args[0].l = jinstance;
+                dispatchJNICall(exec, rootObject->nativeHandle(), fieldJInstance, false, returnType, mid, args, result, 0, exceptionDescription);
+                if (exceptionDescription)
+                    throwError(exec, GeneralError, exceptionDescription.toString(exec));
+            }
+        }
+    }
+    return result;
+}
+
+JSValue JavaField::valueFromInstance(ExecState* exec, const Instance* i) const
+{
+    const JavaInstance* instance = static_cast<const JavaInstance*>(i);
+
+    JSValue jsresult = jsUndefined();
+
+    switch (m_JNIType) {
+    case array_type:
+    case object_type:
+        {
+            jvalue result = dispatchValueFromInstance(exec, instance, "get", "(Ljava/lang/Object;)Ljava/lang/Object;", object_type);
+            jobject anObject = result.l;
+
+            const char* arrayType = type();
+            if (arrayType[0] == '[')
+                jsresult = JavaArray::convertJObjectToArray(exec, anObject, arrayType, instance->rootObject());
+            else if (anObject)
+                jsresult = JavaInstance::create(anObject, instance->rootObject())->createRuntimeObject(exec);
+        }
+        break;
+
+    case boolean_type:
+        jsresult = jsBoolean(dispatchValueFromInstance(exec, instance, "getBoolean", "(Ljava/lang/Object;)Z", boolean_type).z);
+        break;
+
+    case byte_type:
+    case char_type:
+    case short_type:
+
+    case int_type:
+        {
+            jint value;
+            jvalue result = dispatchValueFromInstance(exec, instance, "getInt", "(Ljava/lang/Object;)I", int_type);
+            value = result.i;
+            jsresult = jsNumber(exec, static_cast<int>(value));
+        }
+        break;
+
+    case long_type:
+    case float_type:
+    case double_type:
+        {
+            jdouble value;
+            jvalue result = dispatchValueFromInstance(exec, instance, "getDouble", "(Ljava/lang/Object;)D", double_type);
+            value = result.i;
+            jsresult = jsNumber(exec, static_cast<double>(value));
+        }
+        break;
+    default:
+        break;
+    }
+
+    JS_LOG("getting %s = %s\n", UString(name()).UTF8String().c_str(), jsresult.toString(exec).ascii());
+
+    return jsresult;
+}
+
+void JavaField::dispatchSetValueToInstance(ExecState* exec, const JavaInstance* instance, jvalue javaValue, const char* name, const char* sig) const
+{
+    jobject jinstance = instance->javaInstance();
+    jobject fieldJInstance = m_field->m_instance;
+    JNIEnv* env = getJNIEnv();
+
+    jclass cls = env->GetObjectClass(fieldJInstance);
+    if (cls) {
+        jmethodID mid = env->GetMethodID(cls, name, sig);
+        if (mid) {
+            RootObject* rootObject = instance->rootObject();
+            if (rootObject && rootObject->nativeHandle()) {
+                JSValue exceptionDescription;
+                jvalue args[2];
+                jvalue result;
+
+                args[0].l = jinstance;
+                args[1] = javaValue;
+                dispatchJNICall(exec, rootObject->nativeHandle(), fieldJInstance, false, void_type, mid, args, result, 0, exceptionDescription);
+                if (exceptionDescription)
+                    throwError(exec, GeneralError, exceptionDescription.toString(exec));
+            }
+        }
+    }
+}
+
+void JavaField::setValueToInstance(ExecState* exec, const Instance* i, JSValue aValue) const
+{
+    const JavaInstance* instance = static_cast<const JavaInstance*>(i);
+    jvalue javaValue = convertValueToJValue(exec, aValue, m_JNIType, type());
+
+    JS_LOG("setting value %s to %s\n", UString(name()).UTF8String().c_str(), aValue.toString(exec).ascii());
+
+    switch (m_JNIType) {
+    case array_type:
+    case object_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "set", "(Ljava/lang/Object;Ljava/lang/Object;)V");
+        }
+        break;
+
+    case boolean_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "setBoolean", "(Ljava/lang/Object;Z)V");
+        }
+        break;
+
+    case byte_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "setByte", "(Ljava/lang/Object;B)V");
+        }
+        break;
+
+    case char_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "setChar", "(Ljava/lang/Object;C)V");
+        }
+        break;
+
+    case short_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "setShort", "(Ljava/lang/Object;S)V");
+        }
+        break;
+
+    case int_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "setInt", "(Ljava/lang/Object;I)V");
+        }
+        break;
+
+    case long_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "setLong", "(Ljava/lang/Object;J)V");
+        }
+        break;
+
+    case float_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "setFloat", "(Ljava/lang/Object;F)V");
+        }
+        break;
+
+    case double_type:
+        {
+            dispatchSetValueToInstance(exec, instance, javaValue, "setDouble", "(Ljava/lang/Object;D)V");
+        }
+        break;
+    default:
+        break;
+    }
+}
+
+JavaArray::JavaArray(jobject array, const char* type, PassRefPtr<RootObject> rootObject)
+    : Array(rootObject)
+{
+    m_array = new JObjectWrapper(array);
+    // Java array are fixed length, so we can cache length.
+    JNIEnv* env = getJNIEnv();
+    m_length = env->GetArrayLength(static_cast<jarray>(m_array->m_instance));
+    m_type = strdup(type);
+    m_rootObject = rootObject;
+}
+
+JavaArray::~JavaArray()
+{
+    free(const_cast<char*>(m_type));
+}
+
+RootObject* JavaArray::rootObject() const
+{
+    return m_rootObject && m_rootObject->isValid() ? m_rootObject.get() : 0;
+}
+
+void JavaArray::setValueAt(ExecState* exec, unsigned index, JSValue aValue) const
+{
+    JNIEnv* env = getJNIEnv();
+    char* javaClassName = 0;
+
+    JNIType arrayType = JNITypeFromPrimitiveType(m_type[1]);
+    if (m_type[1] == 'L') {
+        // The type of the array will be something like:
+        // "[Ljava.lang.string;".  This is guaranteed, so no need
+        // for extra sanity checks.
+        javaClassName = strdup(&m_type[2]);
+        javaClassName[strchr(javaClassName, ';')-javaClassName] = 0;
+    }
+    jvalue aJValue = convertValueToJValue(exec, aValue, arrayType, javaClassName);
+
+    switch (arrayType) {
+    case object_type:
+        {
+            env->SetObjectArrayElement(static_cast<jobjectArray>(javaArray()), index, aJValue.l);
+            break;
+        }
+
+    case boolean_type:
+        {
+            env->SetBooleanArrayRegion(static_cast<jbooleanArray>(javaArray()), index, 1, &aJValue.z);
+            break;
+        }
+
+    case byte_type:
+        {
+            env->SetByteArrayRegion(static_cast<jbyteArray>(javaArray()), index, 1, &aJValue.b);
+            break;
+        }
+
+    case char_type:
+        {
+            env->SetCharArrayRegion(static_cast<jcharArray>(javaArray()), index, 1, &aJValue.c);
+            break;
+        }
+
+    case short_type:
+        {
+            env->SetShortArrayRegion(static_cast<jshortArray>(javaArray()), index, 1, &aJValue.s);
+            break;
+        }
+
+    case int_type:
+        {
+            env->SetIntArrayRegion(static_cast<jintArray>(javaArray()), index, 1, &aJValue.i);
+            break;
+        }
+
+    case long_type:
+        {
+            env->SetLongArrayRegion(static_cast<jlongArray>(javaArray()), index, 1, &aJValue.j);
+        }
+
+    case float_type:
+        {
+            env->SetFloatArrayRegion(static_cast<jfloatArray>(javaArray()), index, 1, &aJValue.f);
+            break;
+        }
+
+    case double_type:
+        {
+            env->SetDoubleArrayRegion(static_cast<jdoubleArray>(javaArray()), index, 1, &aJValue.d);
+            break;
+        }
+    default:
+        break;
+    }
+
+    if (javaClassName)
+        free(const_cast<char*>(javaClassName));
+}
+
+
+JSValue JavaArray::valueAt(ExecState* exec, unsigned index) const
+{
+    JNIEnv* env = getJNIEnv();
+    JNIType arrayType = JNITypeFromPrimitiveType(m_type[1]);
+    switch (arrayType) {
+    case object_type:
+        {
+            jobjectArray objectArray = static_cast<jobjectArray>(javaArray());
+            jobject anObject;
+            anObject = env->GetObjectArrayElement(objectArray, index);
+
+            // No object?
+            if (!anObject)
+                return jsNull();
+
+            // Nested array?
+            if (m_type[1] == '[')
+                return JavaArray::convertJObjectToArray(exec, anObject, m_type + 1, rootObject());
+            // or array of other object type?
+            return JavaInstance::create(anObject, rootObject())->createRuntimeObject(exec);
+        }
+
+    case boolean_type:
+        {
+            jbooleanArray booleanArray = static_cast<jbooleanArray>(javaArray());
+            jboolean aBoolean;
+            env->GetBooleanArrayRegion(booleanArray, index, 1, &aBoolean);
+            return jsBoolean(aBoolean);
+        }
+
+    case byte_type:
+        {
+            jbyteArray byteArray = static_cast<jbyteArray>(javaArray());
+            jbyte aByte;
+            env->GetByteArrayRegion(byteArray, index, 1, &aByte);
+            return jsNumber(exec, aByte);
+        }
+
+    case char_type:
+        {
+            jcharArray charArray = static_cast<jcharArray>(javaArray());
+            jchar aChar;
+            env->GetCharArrayRegion(charArray, index, 1, &aChar);
+            return jsNumber(exec, aChar);
+            break;
+        }
+
+    case short_type:
+        {
+            jshortArray shortArray = static_cast<jshortArray>(javaArray());
+            jshort aShort;
+            env->GetShortArrayRegion(shortArray, index, 1, &aShort);
+            return jsNumber(exec, aShort);
+        }
+
+    case int_type:
+        {
+            jintArray intArray = static_cast<jintArray>(javaArray());
+            jint anInt;
+            env->GetIntArrayRegion(intArray, index, 1, &anInt);
+            return jsNumber(exec, anInt);
+        }
+
+    case long_type:
+        {
+            jlongArray longArray = static_cast<jlongArray>(javaArray());
+            jlong aLong;
+            env->GetLongArrayRegion(longArray, index, 1, &aLong);
+            return jsNumber(exec, aLong);
+        }
+
+    case float_type:
+        {
+            jfloatArray floatArray = static_cast<jfloatArray>(javaArray());
+            jfloat aFloat;
+            env->GetFloatArrayRegion(floatArray, index, 1, &aFloat);
+            return jsNumber(exec, aFloat);
+        }
+
+    case double_type:
+        {
+            jdoubleArray doubleArray = static_cast<jdoubleArray>(javaArray());
+            jdouble aDouble;
+            env->GetDoubleArrayRegion(doubleArray, index, 1, &aDouble);
+            return jsNumber(exec, aDouble);
+        }
+    default:
+        break;
+    }
+    return jsUndefined();
+}
+
+unsigned int JavaArray::getLength() const
+{
+    return m_length;
+}
+
+#endif // ENABLE(MAC_JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/jsc/JNIBridgeJSC.h b/WebCore/bridge/jni/jsc/JNIBridgeJSC.h
new file mode 100644
index 0000000..902bd4e
--- /dev/null
+++ b/WebCore/bridge/jni/jsc/JNIBridgeJSC.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2003, 2004, 2005, 2007, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef JNIBridgeJSC_h
+#define JNIBridgeJSC_h
+
+#if ENABLE(MAC_JAVA_BRIDGE)
+
+#include "Bridge.h"
+#include "JNIBridge.h"
+#include <JavaVM/jni.h>
+
+namespace JSC {
+
+namespace Bindings {
+
+class JavaField : public Field {
+public:
+    JavaField(JNIEnv*, jobject aField);
+
+    virtual JSValue valueFromInstance(ExecState*, const Instance*) const;
+    virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const;
+
+    const JavaString& name() const { return m_name; }
+    virtual RuntimeType type() const { return m_type.UTF8String(); }
+
+    JNIType getJNIType() const { return m_JNIType; }
+
+private:
+    void dispatchSetValueToInstance(ExecState*, const JavaInstance*, jvalue, const char* name, const char* sig) const;
+    jvalue dispatchValueFromInstance(ExecState*, const JavaInstance*, const char* name, const char* sig, JNIType returnType) const;
+
+    JavaString m_name;
+    JavaString m_type;
+    JNIType m_JNIType;
+    RefPtr<JObjectWrapper> m_field;
+};
+
+class JavaArray : public Array {
+public:
+    JavaArray(jobject array, const char* type, PassRefPtr<RootObject>);
+    virtual ~JavaArray();
+
+    RootObject* rootObject() const;
+
+    virtual void setValueAt(ExecState*, unsigned int index, JSValue) const;
+    virtual JSValue valueAt(ExecState*, unsigned int index) const;
+    virtual unsigned int getLength() const;
+
+    jobject javaArray() const { return m_array->m_instance; }
+
+    static JSValue convertJObjectToArray(ExecState*, jobject, const char* type, PassRefPtr<RootObject>);
+
+private:
+    RefPtr<JObjectWrapper> m_array;
+    unsigned int m_length;
+    const char* m_type;
+};
+
+} // namespace Bindings
+
+} // namespace JSC
+
+#endif // ENABLE(MAC_JAVA_BRIDGE)
+
+#endif // JNIBridge_h
diff --git a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp b/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
index e89d0e0..e238ab8 100644
--- a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
+++ b/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
@@ -29,7 +29,7 @@
 
 #if ENABLE(MAC_JAVA_BRIDGE)
 
-#include "JNIBridge.h"
+#include "JNIBridgeJSC.h"
 #include "runtime_array.h"
 #include "runtime_object.h"
 #include <runtime/JSArray.h>
diff --git a/WebCore/bridge/jni/jsc/JavaClassJSC.h b/WebCore/bridge/jni/jsc/JavaClassJSC.h
index b20781b..09b93e9 100644
--- a/WebCore/bridge/jni/jsc/JavaClassJSC.h
+++ b/WebCore/bridge/jni/jsc/JavaClassJSC.h
@@ -28,7 +28,7 @@
 
 #if ENABLE(MAC_JAVA_BRIDGE)
 
-#include "JNIBridge.h"
+#include "JNIBridgeJSC.h"
 #include <wtf/HashMap.h>
 
 namespace JSC {
diff --git a/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp b/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp
index 6216416..aab0d5c 100644
--- a/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp
+++ b/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp
@@ -28,7 +28,7 @@
 
 #if ENABLE(MAC_JAVA_BRIDGE)
 
-#include "JNIBridge.h"
+#include "JNIBridgeJSC.h"
 #include "JNIUtility.h"
 #include "JNIUtilityPrivate.h"
 #include "JavaClassJSC.h"

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list