// 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.

// This file is autogenerated by
//     base/android/jni_generator/jni_generator.py
// For
//     org/chromium/example/jni_generator/SampleForTests

#ifndef org_chromium_example_jni_generator_SampleForTests_JNI
#define org_chromium_example_jni_generator_SampleForTests_JNI

#include <jni.h>

#include "base/android/jni_generator/jni_generator_helper.h"

#include "base/android/jni_int_wrapper.h"

// Step 1: forward declarations.
namespace {
const char kSampleForTestsClassPath[] =
    "org/chromium/example/jni_generator/SampleForTests";
// Leaking this jclass as we cannot use LazyInstance from some threads.
base::subtle::AtomicWord g_SampleForTests_clazz __attribute__((unused)) = 0;
#define SampleForTests_clazz(env) base::android::LazyGetClass(env, kSampleForTestsClassPath, &g_SampleForTests_clazz)

}  // namespace

// Step 2: method stubs.
extern "C" __attribute__((visibility("default")))
jint
    Java_org_chromium_example_jni_1generator_SampleForTests_nativeStaticMethod(JNIEnv*
    env,
    jobject jcaller,
    jlong nativeTest,
    jint arg1) {
  Test* native = reinterpret_cast<Test*>(nativeTest);
  CHECK_NATIVE_PTR(env, jcaller, native, "StaticMethod", 0);
  return native->StaticMethod(env, JavaParamRef<jobject>(env, jcaller), arg1);
}

extern "C" __attribute__((visibility("default")))
jint
    Java_org_chromium_example_jni_1generator_SampleForTests_nativeMethod(JNIEnv*
    env,
    jobject jcaller,
    jlong nativeTest,
    jint arg1) {
  Test* native = reinterpret_cast<Test*>(nativeTest);
  CHECK_NATIVE_PTR(env, jcaller, native, "Method", 0);
  return native->Method(env, JavaParamRef<jobject>(env, jcaller), arg1);
}

static jint Init(JNIEnv* env, const JavaParamRef<jobject>& jcaller);

extern "C" __attribute__((visibility("default")))
jint
    Java_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_nativeInit(JNIEnv*
    env, jobject jcaller) {
  return Init(env, JavaParamRef<jobject>(env, jcaller));
}

static jint Init(JNIEnv* env, const JavaParamRef<jobject>& jcaller);

extern "C" __attribute__((visibility("default")))
jint
    Java_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_nativeInit(JNIEnv*
    env, jobject jcaller) {
  return Init(env, JavaParamRef<jobject>(env, jcaller));
}

static base::subtle::AtomicWord g_SampleForTests_testMethodWithParam = 0;
static void Java_SampleForTests_testMethodWithParam(JNIEnv* env, jobject obj,
    JniIntWrapper iParam) {
  /* Must call RegisterNativesImpl()  */
  CHECK_CLAZZ(env, obj,
      SampleForTests_clazz(env));
  jmethodID method_id =
      base::android::MethodID::LazyGet<
      base::android::MethodID::TYPE_INSTANCE>(
      env, SampleForTests_clazz(env),
      "testMethodWithParam",

"("
"I"
")"
"V",
      &g_SampleForTests_testMethodWithParam);

     env->CallVoidMethod(obj,
          method_id, as_jint(iParam));
  jni_generator::CheckException(env);

}

static base::subtle::AtomicWord g_SampleForTests_testMethodWithParamAndReturn =
    0;
static ScopedJavaLocalRef<jstring>
    Java_SampleForTests_testMethodWithParamAndReturn(JNIEnv* env, jobject obj,
    JniIntWrapper iParam) {
  /* Must call RegisterNativesImpl()  */
  CHECK_CLAZZ(env, obj,
      SampleForTests_clazz(env), NULL);
  jmethodID method_id =
      base::android::MethodID::LazyGet<
      base::android::MethodID::TYPE_INSTANCE>(
      env, SampleForTests_clazz(env),
      "testMethodWithParamAndReturn",

"("
"I"
")"
"Ljava/lang/String;",
      &g_SampleForTests_testMethodWithParamAndReturn);

  jstring ret =
      static_cast<jstring>(env->CallObjectMethod(obj,
          method_id, as_jint(iParam)));
  jni_generator::CheckException(env);
  return ScopedJavaLocalRef<jstring>(env, ret);
}

static base::subtle::AtomicWord g_SampleForTests_testStaticMethodWithParam = 0;
static jint Java_SampleForTests_testStaticMethodWithParam(JNIEnv* env,
    JniIntWrapper iParam) {
  /* Must call RegisterNativesImpl()  */
  CHECK_CLAZZ(env, SampleForTests_clazz(env),
      SampleForTests_clazz(env), 0);
  jmethodID method_id =
      base::android::MethodID::LazyGet<
      base::android::MethodID::TYPE_STATIC>(
      env, SampleForTests_clazz(env),
      "testStaticMethodWithParam",

"("
"I"
")"
"I",
      &g_SampleForTests_testStaticMethodWithParam);

  jint ret =
      env->CallStaticIntMethod(SampleForTests_clazz(env),
          method_id, as_jint(iParam));
  jni_generator::CheckException(env);
  return ret;
}

static base::subtle::AtomicWord g_SampleForTests_testMethodWithNoParam = 0;
static jdouble Java_SampleForTests_testMethodWithNoParam(JNIEnv* env) {
  /* Must call RegisterNativesImpl()  */
  CHECK_CLAZZ(env, SampleForTests_clazz(env),
      SampleForTests_clazz(env), 0);
  jmethodID method_id =
      base::android::MethodID::LazyGet<
      base::android::MethodID::TYPE_STATIC>(
      env, SampleForTests_clazz(env),
      "testMethodWithNoParam",

"("
")"
"D",
      &g_SampleForTests_testMethodWithNoParam);

  jdouble ret =
      env->CallStaticDoubleMethod(SampleForTests_clazz(env),
          method_id);
  jni_generator::CheckException(env);
  return ret;
}

static base::subtle::AtomicWord g_SampleForTests_testStaticMethodWithNoParam =
    0;
static ScopedJavaLocalRef<jstring>
    Java_SampleForTests_testStaticMethodWithNoParam(JNIEnv* env) {
  /* Must call RegisterNativesImpl()  */
  CHECK_CLAZZ(env, SampleForTests_clazz(env),
      SampleForTests_clazz(env), NULL);
  jmethodID method_id =
      base::android::MethodID::LazyGet<
      base::android::MethodID::TYPE_STATIC>(
      env, SampleForTests_clazz(env),
      "testStaticMethodWithNoParam",

"("
")"
"Ljava/lang/String;",
      &g_SampleForTests_testStaticMethodWithNoParam);

  jstring ret =
static_cast<jstring>(env->CallStaticObjectMethod(SampleForTests_clazz(env),
          method_id));
  jni_generator::CheckException(env);
  return ScopedJavaLocalRef<jstring>(env, ret);
}

// Step 3: RegisterNatives.

static const JNINativeMethod kMethodsMyOtherInnerClass[] = {
    { "nativeInit",
"("
")"
"I",
    reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_nativeInit)
    },
};

static const JNINativeMethod kMethodsMyInnerClass[] = {
    { "nativeInit",
"("
")"
"I",
    reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_nativeInit)
    },
};

static const JNINativeMethod kMethodsSampleForTests[] = {
    { "nativeStaticMethod",
"("
"J"
"I"
")"
"I",
    reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTests_nativeStaticMethod)
    },
    { "nativeMethod",
"("
"J"
"I"
")"
"I",
    reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTests_nativeMethod)
    },
};

static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) {
  if (base::android::IsManualJniRegistrationDisabled()) return true;

  base::subtle::Release_Store(&g_SampleForTests_clazz,
      static_cast<base::subtle::AtomicWord>(env->NewWeakGlobalRef(clazz));

  const int kMethodsMyOtherInnerClassSize =
      arraysize(kMethodsMyOtherInnerClass);

  if (env->RegisterNatives(MyOtherInnerClass_clazz(env),
                           kMethodsMyOtherInnerClass,
                           kMethodsMyOtherInnerClassSize) < 0) {
    jni_generator::HandleRegistrationError(
        env, MyOtherInnerClass_clazz(env), __FILE__);
    return false;
  }

  const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass);

  if (env->RegisterNatives(MyInnerClass_clazz(env),
                           kMethodsMyInnerClass,
                           kMethodsMyInnerClassSize) < 0) {
    jni_generator::HandleRegistrationError(
        env, MyInnerClass_clazz(env), __FILE__);
    return false;
  }

  const int kMethodsSampleForTestsSize = arraysize(kMethodsSampleForTests);

  if (env->RegisterNatives(SampleForTests_clazz(env),
                           kMethodsSampleForTests,
                           kMethodsSampleForTestsSize) < 0) {
    jni_generator::HandleRegistrationError(
        env, SampleForTests_clazz(env), __FILE__);
    return false;
  }

  return true;
}

extern "C" JNIEXPORT bool JNICALL
Java_org_chromium_example_jni_1generator_SampleForTests_nativeInitNativeClass(JNIEnv*
    env, jclass clazz) {
  return RegisterNativesImpl(env, clazz);
}

#endif  // org_chromium_example_jni_generator_SampleForTests_JNI
