summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-01-21 19:12:36 +0000
committerSteve Block <steveblock@google.com>2010-01-27 16:09:22 +0000
commitfbd2688ec2a4d79adf95888484958ee80341a5a2 (patch)
tree80c0930e35de99ee73593b734cd43defb2915edc
parent4aeef553983e9d7a42b18646498bbd4b5a1c8c0a (diff)
downloadexternal_webkit-fbd2688ec2a4d79adf95888484958ee80341a5a2.zip
external_webkit-fbd2688ec2a4d79adf95888484958ee80341a5a2.tar.gz
external_webkit-fbd2688ec2a4d79adf95888484958ee80341a5a2.tar.bz2
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
-rw-r--r--Android.mk5
-rw-r--r--V8Binding/jni/jni_runtime.cpp153
-rw-r--r--WebCore/Android.v8bindings.mk1
3 files changed, 1 insertions, 158 deletions
diff --git a/Android.mk b/Android.mk
index e24770e..c91ec08 100644
--- a/Android.mk
+++ b/Android.mk
@@ -171,11 +171,6 @@ include $(LOCAL_PATH)/Android.jscbindings.mk
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 @@ LOCAL_SRC_FILES += \
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 \