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

#ifndef org_chromium_example_jni_generator_Test_JNI
#define org_chromium_example_jni_generator_Test_JNI

#include <jni.h>

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

// Step 1: forward declarations.
namespace {
const char kTestClassPath[] = "org/chromium/example/jni_generator/Test";
// Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_Test_clazz = NULL;

}  // namespace

// Step 2: method stubs.
static jint Method(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, jcaller, arg1);
}

// Step 3: RegisterNatives.

static const JNINativeMethod kMethodsTest[] = {
    { "nativeMethod",
"("
"J"
"I"
")"
"I", reinterpret_cast<void*>(Method) },
};

static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) {
  g_Test_clazz = static_cast<jclass>(env->NewWeakGlobalRef(clazz));

  const int kMethodsTestSize = arraysize(kMethodsTest);

  if (env->RegisterNatives(g_Test_clazz,
                           kMethodsTest,
                           kMethodsTestSize) < 0) {
    jni_generator::HandleRegistrationError(
        env, g_Test_clazz, __FILE__);
    return false;
  }

  return true;
}

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

#endif  // org_chromium_example_jni_generator_Test_JNI
