| Index: content/browser/renderer_host/java/java_method.cc
|
| diff --git a/content/browser/renderer_host/java/java_method.cc b/content/browser/renderer_host/java/java_method.cc
|
| deleted file mode 100644
|
| index 03bdb2d7e06dd68b09724db4cd4864e49930f8d6..0000000000000000000000000000000000000000
|
| --- a/content/browser/renderer_host/java/java_method.cc
|
| +++ /dev/null
|
| @@ -1,242 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/browser/renderer_host/java/java_method.h"
|
| -
|
| -#include "base/android/jni_android.h"
|
| -#include "base/android/jni_string.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/memory/singleton.h"
|
| -#include "base/strings/string_util.h" // For ReplaceSubstringsAfterOffset
|
| -#include "content/browser/renderer_host/java/jni_helper.h"
|
| -
|
| -using base::android::AttachCurrentThread;
|
| -using base::android::ConvertJavaStringToUTF8;
|
| -using base::android::GetClass;
|
| -using base::android::MethodID;
|
| -using base::android::ScopedJavaGlobalRef;
|
| -using base::android::ScopedJavaLocalRef;
|
| -
|
| -namespace content {
|
| -namespace {
|
| -
|
| -const char kGetName[] = "getName";
|
| -const char kGetDeclaringClass[] = "getDeclaringClass";
|
| -const char kGetModifiers[] = "getModifiers";
|
| -const char kGetParameterTypes[] = "getParameterTypes";
|
| -const char kGetReturnType[] = "getReturnType";
|
| -const char kIntegerReturningBoolean[] = "(I)Z";
|
| -const char kIsStatic[] = "isStatic";
|
| -const char kJavaLangClass[] = "java/lang/Class";
|
| -const char kJavaLangReflectMethod[] = "java/lang/reflect/Method";
|
| -const char kJavaLangReflectModifier[] = "java/lang/reflect/Modifier";
|
| -const char kReturningInteger[] = "()I";
|
| -const char kReturningJavaLangClass[] = "()Ljava/lang/Class;";
|
| -const char kReturningJavaLangClassArray[] = "()[Ljava/lang/Class;";
|
| -const char kReturningJavaLangString[] = "()Ljava/lang/String;";
|
| -
|
| -struct ModifierClassTraits :
|
| - public base::internal::LeakyLazyInstanceTraits<ScopedJavaGlobalRef<
|
| - jclass> > {
|
| - static ScopedJavaGlobalRef<jclass>* New(void* instance) {
|
| - JNIEnv* env = AttachCurrentThread();
|
| - // Use placement new to initialize our instance in our preallocated space.
|
| - return new (instance) ScopedJavaGlobalRef<jclass>(
|
| - GetClass(env, kJavaLangReflectModifier));
|
| - }
|
| -};
|
| -
|
| -base::LazyInstance<ScopedJavaGlobalRef<jclass>, ModifierClassTraits>
|
| - g_java_lang_reflect_modifier_class = LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -std::string BinaryNameToJNIName(const std::string& binary_name,
|
| - JavaType* type) {
|
| - DCHECK(type);
|
| - *type = JavaType::CreateFromBinaryName(binary_name);
|
| - switch (type->type) {
|
| - case JavaType::TypeBoolean:
|
| - return "Z";
|
| - case JavaType::TypeByte:
|
| - return "B";
|
| - case JavaType::TypeChar:
|
| - return "C";
|
| - case JavaType::TypeShort:
|
| - return "S";
|
| - case JavaType::TypeInt:
|
| - return "I";
|
| - case JavaType::TypeLong:
|
| - return "J";
|
| - case JavaType::TypeFloat:
|
| - return "F";
|
| - case JavaType::TypeDouble:
|
| - return "D";
|
| - case JavaType::TypeVoid:
|
| - return "V";
|
| - case JavaType::TypeArray: {
|
| - // For array types, the binary name uses the JNI name encodings.
|
| - std::string jni_name = binary_name;
|
| - ReplaceSubstringsAfterOffset(&jni_name, 0, ".", "/");
|
| - return jni_name;
|
| - }
|
| - case JavaType::TypeString:
|
| - case JavaType::TypeObject:
|
| - std::string jni_name = "L" + binary_name + ";";
|
| - ReplaceSubstringsAfterOffset(&jni_name, 0, ".", "/");
|
| - return jni_name;
|
| - }
|
| - NOTREACHED();
|
| - return std::string();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -JavaMethod::JavaMethod(const base::android::JavaRef<jobject>& method)
|
| - : java_method_(method),
|
| - have_calculated_num_parameters_(false),
|
| - id_(NULL) {
|
| - JNIEnv* env = AttachCurrentThread();
|
| - // On construction, we do nothing except get the name. Everything else is
|
| - // done lazily.
|
| - ScopedJavaLocalRef<jstring> name(env, static_cast<jstring>(
|
| - env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
|
| - env,
|
| - kJavaLangReflectMethod,
|
| - kGetName,
|
| - kReturningJavaLangString))));
|
| - name_ = ConvertJavaStringToUTF8(name);
|
| -}
|
| -
|
| -JavaMethod::~JavaMethod() {
|
| -}
|
| -
|
| -size_t JavaMethod::num_parameters() const {
|
| - EnsureNumParametersIsSetUp();
|
| - return num_parameters_;
|
| -}
|
| -
|
| -bool JavaMethod::is_static() const {
|
| - EnsureTypesAndIDAreSetUp();
|
| - return is_static_;
|
| -}
|
| -
|
| -const JavaType& JavaMethod::parameter_type(size_t index) const {
|
| - EnsureTypesAndIDAreSetUp();
|
| - return parameter_types_[index];
|
| -}
|
| -
|
| -const JavaType& JavaMethod::return_type() const {
|
| - EnsureTypesAndIDAreSetUp();
|
| - return return_type_;
|
| -}
|
| -
|
| -jmethodID JavaMethod::id() const {
|
| - EnsureTypesAndIDAreSetUp();
|
| - return id_;
|
| -}
|
| -
|
| -void JavaMethod::EnsureNumParametersIsSetUp() const {
|
| - if (have_calculated_num_parameters_) {
|
| - return;
|
| - }
|
| - have_calculated_num_parameters_ = true;
|
| -
|
| - // The number of parameters will be used frequently when determining
|
| - // whether to call this method. We don't get the ID etc until actually
|
| - // required.
|
| - JNIEnv* env = AttachCurrentThread();
|
| - ScopedJavaLocalRef<jarray> parameters(env, static_cast<jarray>(
|
| - env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
|
| - env,
|
| - kJavaLangReflectMethod,
|
| - kGetParameterTypes,
|
| - kReturningJavaLangClassArray))));
|
| - num_parameters_ = env->GetArrayLength(parameters.obj());
|
| -}
|
| -
|
| -void JavaMethod::EnsureTypesAndIDAreSetUp() const {
|
| - if (id_) {
|
| - return;
|
| - }
|
| -
|
| - // Get the parameters
|
| - JNIEnv* env = AttachCurrentThread();
|
| - ScopedJavaLocalRef<jobjectArray> parameters(env, static_cast<jobjectArray>(
|
| - env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
|
| - env,
|
| - kJavaLangReflectMethod,
|
| - kGetParameterTypes,
|
| - kReturningJavaLangClassArray))));
|
| - // Usually, this will already have been called.
|
| - EnsureNumParametersIsSetUp();
|
| - DCHECK_EQ(num_parameters_,
|
| - static_cast<size_t>(env->GetArrayLength(parameters.obj())));
|
| -
|
| - // Java gives us the argument type using an extended version of the 'binary
|
| - // name'. See
|
| - // http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getName().
|
| - // If we build the signature now, there's no need to store the binary name
|
| - // of the arguments. We just store the simple type.
|
| - std::string signature("(");
|
| -
|
| - // Form the signature and record the parameter types.
|
| - parameter_types_.resize(num_parameters_);
|
| - for (size_t i = 0; i < num_parameters_; ++i) {
|
| - ScopedJavaLocalRef<jobject> parameter(env, env->GetObjectArrayElement(
|
| - parameters.obj(), i));
|
| - ScopedJavaLocalRef<jstring> name(env, static_cast<jstring>(
|
| - env->CallObjectMethod(parameter.obj(), GetMethodIDFromClassName(
|
| - env,
|
| - kJavaLangClass,
|
| - kGetName,
|
| - kReturningJavaLangString))));
|
| - std::string name_utf8 = ConvertJavaStringToUTF8(name);
|
| - signature += BinaryNameToJNIName(name_utf8, ¶meter_types_[i]);
|
| - }
|
| - signature += ")";
|
| -
|
| - // Get the return type
|
| - ScopedJavaLocalRef<jclass> clazz(env, static_cast<jclass>(
|
| - env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
|
| - env,
|
| - kJavaLangReflectMethod,
|
| - kGetReturnType,
|
| - kReturningJavaLangClass))));
|
| - ScopedJavaLocalRef<jstring> name(env, static_cast<jstring>(
|
| - env->CallObjectMethod(clazz.obj(), GetMethodIDFromClassName(
|
| - env,
|
| - kJavaLangClass,
|
| - kGetName,
|
| - kReturningJavaLangString))));
|
| - signature += BinaryNameToJNIName(ConvertJavaStringToUTF8(name),
|
| - &return_type_);
|
| -
|
| - // Determine whether the method is static.
|
| - jint modifiers = env->CallIntMethod(
|
| - java_method_.obj(), GetMethodIDFromClassName(env,
|
| - kJavaLangReflectMethod,
|
| - kGetModifiers,
|
| - kReturningInteger));
|
| - is_static_ = env->CallStaticBooleanMethod(
|
| - g_java_lang_reflect_modifier_class.Get().obj(),
|
| - MethodID::Get<MethodID::TYPE_STATIC>(
|
| - env, g_java_lang_reflect_modifier_class.Get().obj(), kIsStatic,
|
| - kIntegerReturningBoolean),
|
| - modifiers);
|
| -
|
| - // Get the ID for this method.
|
| - ScopedJavaLocalRef<jclass> declaring_class(env, static_cast<jclass>(
|
| - env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
|
| - env,
|
| - kJavaLangReflectMethod,
|
| - kGetDeclaringClass,
|
| - kReturningJavaLangClass))));
|
| - id_ = is_static_ ?
|
| - MethodID::Get<MethodID::TYPE_STATIC>(
|
| - env, declaring_class.obj(), name_.c_str(), signature.c_str()) :
|
| - MethodID::Get<MethodID::TYPE_INSTANCE>(
|
| - env, declaring_class.obj(), name_.c_str(), signature.c_str());
|
| - java_method_.Reset();
|
| -}
|
| -
|
| -} // namespace content
|
|
|