|  | // Copyright 2014 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. | 
|  |  | 
|  | #ifndef CONTENT_BROWSER_ANDROID_JAVA_JAVA_METHOD_H_ | 
|  | #define CONTENT_BROWSER_ANDROID_JAVA_JAVA_METHOD_H_ | 
|  |  | 
|  | #include <jni.h> | 
|  | #include <stddef.h> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/android/scoped_java_ref.h" | 
|  | #include "content/browser/android/java/java_type.h" | 
|  | #include "content/common/content_export.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | // Wrapper around java.lang.reflect.Method. This class must be used on a single | 
|  | // thread only. | 
|  | class CONTENT_EXPORT JavaMethod { | 
|  | public: | 
|  | JavaMethod() = delete; | 
|  |  | 
|  | explicit JavaMethod(const base::android::JavaRef<jobject>& method); | 
|  |  | 
|  | JavaMethod(const JavaMethod&) = delete; | 
|  | JavaMethod& operator=(const JavaMethod&) = delete; | 
|  |  | 
|  | ~JavaMethod(); | 
|  |  | 
|  | const std::string& name() const { return name_; } | 
|  | size_t num_parameters() const; | 
|  | bool is_static() const; | 
|  | const JavaType& parameter_type(size_t index) const; | 
|  | const JavaType& return_type() const; | 
|  | jmethodID id() const; | 
|  |  | 
|  | private: | 
|  | void EnsureNumParametersIsSetUp() const; | 
|  | void EnsureTypesAndIDAreSetUp() const; | 
|  |  | 
|  | std::string name_; | 
|  | mutable base::android::ScopedJavaGlobalRef<jobject> java_method_; | 
|  | mutable bool have_calculated_num_parameters_; | 
|  | mutable size_t num_parameters_; | 
|  | mutable std::vector<JavaType> parameter_types_; | 
|  | mutable JavaType return_type_; | 
|  | mutable bool is_static_; | 
|  | mutable jmethodID id_; | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_ANDROID_JAVA_JAVA_METHOD_H_ |