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

#ifndef org_chromium_TestJni_JNI
#define org_chromium_TestJni_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 kTestJniClassPath[] = "org/chromium/TestJni";
const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass";
// Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_TestJni_clazz = NULL;
#define TestJni_clazz(env) g_TestJni_clazz

}  // namespace

// Step 2: method stubs.

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

static jint Java_org_chromium_TestJni_00024MyInnerClass_nativeInit(JNIEnv* env,
    jobject jcaller) {
  return Init(env, JavaParamRef<jobject>(env, jcaller));
}

// Step 3: RegisterNatives.

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

static bool RegisterNativesImpl(JNIEnv* env) {

  g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
      base::android::GetClass(env, kTestJniClassPath).obj()));

  const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass);

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

  return true;
}

#endif  // org_chromium_TestJni_JNI
