V8 can now use WebCore/bridge/jni/JNIBridge.cpp

JNIBridge.cpp is now used by both JSC and V8

This removes the last file from V8Bindings

$ diff WebCore/bridge/jni/JNIBridge.cpp V8Binding/jni/jni_runtime.cpp
2d1
<  * Copyright (C) 2003, 2004, 2005, 2007, 2009 Apple Inc. All rights reserved.
28c27
< #include "JNIBridge.h"
---
> #include "jni_runtime.h"
30,32c29
< #if ENABLE(MAC_JAVA_BRIDGE)
<
< #include "CString.h"
---
> #include "JNIUtility.h"
35,45d31
<
< #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;
49d34
<
106,109d90
< #if USE(JSC)
<     ASSERT(JSLock::lockCount() > 0);
< #endif
<
127,130d107
< #if USE(JSC)
<         JSLock lock(SilenceAssertionsOnly);
< #endif
<
177,178d153
<
< #endif // ENABLE(MAC_JAVA_BRIDGE)

Change-Id: I3f0aabc5af56083aa950eca1609b2fe9b46726c9
diff --git a/Android.mk b/Android.mk
index e24770e..c91ec08 100644
--- a/Android.mk
+++ b/Android.mk
@@ -171,11 +171,6 @@
 endif
 ifeq ($(JAVASCRIPT_ENGINE),v8)
 include $(LOCAL_PATH)/Android.v8bindings.mk
-# TODO: We should use the WebCore JNI code instead.
-JNI_PATH := V8Binding/jni
-JNI_SRC_FILES := \
-	jni_runtime.cpp
-WEBKIT_SRC_FILES += $(addprefix $(JNI_PATH)/,$(JNI_SRC_FILES))
 endif
 WEBKIT_SRC_FILES += $(addprefix $d/,$(LOCAL_SRC_FILES))
 LOCAL_C_INCLUDES += $(BINDING_C_INCLUDES)
diff --git a/V8Binding/jni/jni_runtime.cpp b/V8Binding/jni/jni_runtime.cpp
deleted file mode 100644
index edb1b2f..0000000
--- a/V8Binding/jni/jni_runtime.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * 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 "JNIBridge.h"
-
-#include "JNIUtility.h"
-#include "StringBuilder.h"
-
-using namespace JSC::Bindings;
-using namespace WebCore;
-
-JavaParameter::JavaParameter(JNIEnv* env, jstring type)
-{
-    m_type = JavaString(env, type);
-    m_JNIType = JNITypeFromClassName(m_type.UTF8String());
-}
-
-JavaMethod::JavaMethod(JNIEnv* env, jobject aMethod)
-{
-    // Get return type
-    jobject returnType = callJNIMethod<jobject>(aMethod, "getReturnType", "()Ljava/lang/Class;");
-    jstring returnTypeName = static_cast<jstring>(callJNIMethod<jobject>(returnType, "getName", "()Ljava/lang/String;"));
-    m_returnType = JavaString(env, returnTypeName);
-    m_JNIReturnType = JNITypeFromClassName(m_returnType.UTF8String());
-    env->DeleteLocalRef(returnType);
-    env->DeleteLocalRef(returnTypeName);
-
-    // Get method name
-    jstring methodName = static_cast<jstring>(callJNIMethod<jobject>(aMethod, "getName", "()Ljava/lang/String;"));
-    m_name = JavaString(env, methodName);
-    env->DeleteLocalRef(methodName);
-
-    // Get parameters
-    jarray jparameters = static_cast<jarray>(callJNIMethod<jobject>(aMethod, "getParameterTypes", "()[Ljava/lang/Class;"));
-    m_numParameters = env->GetArrayLength(jparameters);
-    m_parameters = new JavaParameter[m_numParameters];
-
-    for (int i = 0; i < m_numParameters; i++) {
-        jobject aParameter = env->GetObjectArrayElement(static_cast<jobjectArray>(jparameters), i);
-        jstring parameterName = static_cast<jstring>(callJNIMethod<jobject>(aParameter, "getName", "()Ljava/lang/String;"));
-        m_parameters[i] = JavaParameter(env, parameterName);
-        env->DeleteLocalRef(aParameter);
-        env->DeleteLocalRef(parameterName);
-    }
-    env->DeleteLocalRef(jparameters);
-
-    // Created lazily.
-    m_signature = 0;
-    m_methodID = 0;
-
-    jclass modifierClass = env->FindClass("java/lang/reflect/Modifier");
-    int modifiers = callJNIMethod<jint>(aMethod, "getModifiers", "()I");
-    m_isStatic = static_cast<bool>(callJNIStaticMethod<jboolean>(modifierClass, "isStatic", "(I)Z", modifiers));
-    env->DeleteLocalRef(modifierClass);
-}
-
-JavaMethod::~JavaMethod()
-{
-    if (m_signature)
-        free(m_signature);
-    delete[] m_parameters;
-};
-
-// JNI method signatures use '/' between components of a class name, but
-// we get '.' between components from the reflection API.
-static void appendClassName(StringBuilder& builder, const char* className)
-{
-    char* c = strdup(className);
-
-    char* result = c;
-    while (*c) {
-        if (*c == '.')
-            *c = '/';
-        c++;
-    }
-
-    builder.append(result);
-
-    free(result);
-}
-
-const char* JavaMethod::signature() const
-{
-    if (!m_signature) {
-        StringBuilder signatureBuilder;
-        signatureBuilder.append("(");
-        for (int i = 0; i < m_numParameters; i++) {
-            JavaParameter* aParameter = parameterAt(i);
-            JNIType type = aParameter->getJNIType();
-            if (type == array_type)
-                appendClassName(signatureBuilder, aParameter->type());
-            else {
-                signatureBuilder.append(signatureFromPrimitiveType(type));
-                if (type == object_type) {
-                    appendClassName(signatureBuilder, aParameter->type());
-                    signatureBuilder.append(";");
-                }
-            }
-        }
-        signatureBuilder.append(")");
-
-        const char* returnType = m_returnType.UTF8String();
-        if (m_JNIReturnType == array_type)
-            appendClassName(signatureBuilder, returnType);
-        else {
-            signatureBuilder.append(signatureFromPrimitiveType(m_JNIReturnType));
-            if (m_JNIReturnType == object_type) {
-                appendClassName(signatureBuilder, returnType);
-                signatureBuilder.append(";");
-            }
-        }
-
-        String signatureString = signatureBuilder.toString();
-        m_signature = strdup(signatureString.utf8().data());
-    }
-
-    return m_signature;
-}
-
-JNIType JavaMethod::JNIReturnType() const
-{
-    return m_JNIReturnType;
-}
-
-jmethodID JavaMethod::methodID(jobject obj) const
-{
-    if (!m_methodID)
-        m_methodID = getMethodID(obj, m_name.UTF8String(), signature());
-    return m_methodID;
-}
diff --git a/WebCore/Android.v8bindings.mk b/WebCore/Android.v8bindings.mk
index 6aa18d4..ffbcc20 100644
--- a/WebCore/Android.v8bindings.mk
+++ b/WebCore/Android.v8bindings.mk
@@ -175,6 +175,7 @@
 	bindings/v8/custom/V8XMLSerializerConstructor.cpp
 
 LOCAL_SRC_FILES += \
+	bridge/jni/JNIBridge.cpp \
 	bridge/jni/JNIUtility.cpp \
 	bridge/jni/v8/JNIBridgeV8.cpp \
 	bridge/jni/v8/JNIUtilityPrivate.cpp \