blob: 696c84bc64d1df4fe9639d9188c908a56544a532 [file] [log] [blame]
// 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 <jni.h>
#include "base/android/jni_android.h"
#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<JniClass> FromName(const char* className);
static ftl::RefPtr<JniClass> FromClassObject(const JniObject* clazz);
jclass java_class() const { return static_cast<jclass>(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<JniObject> NewObject(jmethodID methodId,
const std::vector<Dart_Handle>& args);
bool IsAssignable(const JniClass* clazz);
ftl::RefPtr<JniObject> 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<JniObject> CallStaticObjectMethod(
jmethodID methodId,
const std::vector<Dart_Handle>& args);
bool CallStaticBooleanMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
int64_t CallStaticByteMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
int64_t CallStaticCharMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
int64_t CallStaticShortMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
int64_t CallStaticIntMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
int64_t CallStaticLongMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
double CallStaticFloatMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
double CallStaticDoubleMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
void CallStaticVoidMethod(jmethodID methodId,
const std::vector<Dart_Handle>& args);
private:
JniClass(JNIEnv* env, jclass clazz);
};
} // namespace blink
#endif // FLUTTER_LIB_JNI_JNI_CLASS_H_