diff options
author | Steve Block <steveblock@google.com> | 2010-01-21 19:12:36 +0000 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-01-27 16:09:22 +0000 |
commit | fbd2688ec2a4d79adf95888484958ee80341a5a2 (patch) | |
tree | 80c0930e35de99ee73593b734cd43defb2915edc | |
parent | 4aeef553983e9d7a42b18646498bbd4b5a1c8c0a (diff) | |
download | external_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.mk | 5 | ||||
-rw-r--r-- | V8Binding/jni/jni_runtime.cpp | 153 | ||||
-rw-r--r-- | WebCore/Android.v8bindings.mk | 1 |
3 files changed, 1 insertions, 158 deletions
@@ -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 \ |