// Copyright 2016 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 FLUTTER_LIB_JNI_JNI_CLASS_H_ #define FLUTTER_LIB_JNI_JNI_CLASS_H_ #include #include "flutter/lib/jni/jni_object.h" #include "lib/tonic/dart_wrappable.h" namespace blink { // Wrapper that exposes a JNI jclass to Dart class JniClass : public JniObject { DEFINE_WRAPPERTYPEINFO(); friend class JniObject; FRIEND_MAKE_REF_COUNTED(JniClass); public: ~JniClass() override; static ftl::RefPtr FromName(const char* className); static ftl::RefPtr FromClassObject(const JniObject* clazz); jclass java_class() const { return static_cast(object_.obj()); } intptr_t GetFieldId(const char* name, const char* sig); intptr_t GetStaticFieldId(const char* name, const char* sig); intptr_t GetMethodId(const char* name, const char* sig); intptr_t GetStaticMethodId(const char* name, const char* sig); ftl::RefPtr NewObject(jmethodID methodId, const std::vector& args); bool IsAssignable(const JniClass* clazz); ftl::RefPtr GetStaticObjectField(jfieldID fieldId); bool GetStaticBooleanField(jfieldID fieldId); int64_t GetStaticByteField(jfieldID fieldId); int64_t GetStaticCharField(jfieldID fieldId); int64_t GetStaticShortField(jfieldID fieldId); int64_t GetStaticIntField(jfieldID fieldId); int64_t GetStaticLongField(jfieldID fieldId); double GetStaticFloatField(jfieldID fieldId); double GetStaticDoubleField(jfieldID fieldId); void SetStaticObjectField(jfieldID fieldId, const JniObject* value); void SetStaticBooleanField(jfieldID fieldId, bool value); void SetStaticByteField(jfieldID fieldId, int64_t value); void SetStaticCharField(jfieldID fieldId, int64_t value); void SetStaticShortField(jfieldID fieldId, int64_t value); void SetStaticIntField(jfieldID fieldId, int64_t value); void SetStaticLongField(jfieldID fieldId, int64_t value); void SetStaticFloatField(jfieldID fieldId, double value); void SetStaticDoubleField(jfieldID fieldId, double value); ftl::RefPtr CallStaticObjectMethod( jmethodID methodId, const std::vector& args); bool CallStaticBooleanMethod(jmethodID methodId, const std::vector& args); int64_t CallStaticByteMethod(jmethodID methodId, const std::vector& args); int64_t CallStaticCharMethod(jmethodID methodId, const std::vector& args); int64_t CallStaticShortMethod(jmethodID methodId, const std::vector& args); int64_t CallStaticIntMethod(jmethodID methodId, const std::vector& args); int64_t CallStaticLongMethod(jmethodID methodId, const std::vector& args); double CallStaticFloatMethod(jmethodID methodId, const std::vector& args); double CallStaticDoubleMethod(jmethodID methodId, const std::vector& args); void CallStaticVoidMethod(jmethodID methodId, const std::vector& args); private: JniClass(JNIEnv* env, jclass clazz); }; } // namespace blink #endif // FLUTTER_LIB_JNI_JNI_CLASS_H_