// This file was generated by
//     //third_party/jni_zero/jni_zero.py
// For
//     this.is.a.package.prefix.J.N

#include <iterator>

#include "overridden/jni_zero_internal.h"
#include "header.h"

extern const int64_t kJniZeroHashWhole = 3865356290363738592LL;
extern const int64_t kJniZeroHashPriority = 0LL;

namespace jni_zero::internal {

// Class Index Definitions.
extern const uint16_t kClassIdx_org_jni_1zero_SampleForAnnotationProcessor = 0;
extern const uint16_t kClassIdx_org_jni_1zero_SampleForAnnotationProcessor_00024MultiLine = 1;

// CalledByNative Table and Indices.
extern const uint16_t kCbnIdx_this_is_a_package_prefix_org_jni_1zero_SampleForAnnotationProcessor_00024MultiLine_foo = 0;

std::atomic<jclass> cached_jclasses[2];
std::atomic<jmethodID> cached_method_ids[1];

extern const char kClassNameStringPool[] =
    "this.is.a.package.prefix.org.jni_zero.SampleForAnnotationProcessor\0"
    "this.is.a.package.prefix.org.jni_zero.SampleForAnnotationProcessor$MultiLine\0";
extern const uint16_t kClassNameOffsets[2] = {
    0,
    67,};

extern const CalledByNativeDescriptor kCbnDescriptors[1] = {
  CalledByNativeDescriptor{1, 0, 0},
};

extern const char kMethodNameStringPool[] =
    "foo\0";

extern const char kDescriptorStringPool[] =
    "()V\0";


}  // namespace jni_zero::internal

// Forward Declarations.
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_bar(
    JNIEnv* env,
    jobject sample);
JNI_ZERO_MUXED_ENTRYPOINT void Muxed_org_jni_1zero_SampleForAnnotationProcessor_foo(JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT bool Muxed_org_jni_1zero_SampleForAnnotationProcessor_hasPhalange(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnClass(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnClasses(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnConvertedAppObjects(
    JNIEnv* env,
    jobject __arrayClazz);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnConvertedInts(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnConvertedString(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnConvertedStrings(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnObject(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnObjects(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnString(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnStrings(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnStruct(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnStructs(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnThrowable(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnThrowables(
    JNIEnv* env);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_revString(
    JNIEnv* env,
    jobject stringToReverse);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_sendSamplesToNative(
    JNIEnv* env,
    jobject strs);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_sendToNative(
    JNIEnv* env,
    jobject strs);
JNI_ZERO_MUXED_ENTRYPOINT jobject Muxed_org_jni_1zero_SampleForAnnotationProcessor_testAllPrimitives(
    JNIEnv* env,
    int8_t zbyte,
    uint16_t zchar,
    double zdouble,
    float zfloat,
    int32_t zint,
    int64_t zlong,
    jobject ints,
    jobject longs,
    jobject shorts,
    jobject chars,
    jobject bytes,
    jobject doubles,
    jobject floats,
    jobject bools,
    int16_t zshort,
    bool zbool);
JNI_ZERO_MUXED_ENTRYPOINT void Muxed_org_jni_1zero_SampleForAnnotationProcessor_testSpecialTypes(
    JNIEnv* env,
    jobject clazz,
    jobject classes,
    jobject throwable,
    jobject throwables,
    jobject string,
    jobject strings,
    jobject convertedString,
    jobject convertedStrings,
    jobject optionalString,
    jobject funcType,
    jobject tStruct,
    jobject structs,
    jobject obj,
    jobject convertedObj,
    jobject objects,
    jobject nestedInterface,
    jobject view,
    jobject context,
    jobject convertedObjects);

// Multiplexing Methods.
JNI_ZERO_BOUNDARY_EXPORT void Java_this_is_a_package_prefix_J_N_V(JNIEnv* env, jclass jcaller) {
  return Muxed_org_jni_1zero_SampleForAnnotationProcessor_foo(env);
}
JNI_ZERO_BOUNDARY_EXPORT jobject Java_this_is_a_package_prefix_J_N_O(
    JNIEnv* env,
    jclass jcaller,
    int32_t switch_num) {
  JNI_ZERO_DCHECK(switch_num >= 0 && switch_num < 13);
  switch (switch_num) {
    case 0:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnClass(env);
    case 1:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnClasses(env);
    case 2:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnConvertedInts(env);
    case 3:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnConvertedString(env);
    case 4:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnConvertedStrings(env);
    case 5:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnObject(env);
    case 6:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnObjects(env);
    case 7:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnString(env);
    case 8:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnStrings(env);
    case 9:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnStruct(env);
    case 10:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnStructs(env);
    case 11:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnThrowable(env);
    case 12:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnThrowables(env);
    default:
      __builtin_unreachable();
  }
}
JNI_ZERO_BOUNDARY_EXPORT bool Java_this_is_a_package_prefix_J_N_Z(JNIEnv* env, jclass jcaller) {
  return Muxed_org_jni_1zero_SampleForAnnotationProcessor_hasPhalange(env);
}
JNI_ZERO_BOUNDARY_EXPORT jobject Java_this_is_a_package_prefix_J_N_OO(
    JNIEnv* env,
    jclass jcaller,
    int32_t switch_num,
    jobject p0) {
  JNI_ZERO_DCHECK(switch_num >= 0 && switch_num < 5);
  switch (switch_num) {
    case 0:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_bar(env, p0);
    case 1:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_returnConvertedAppObjects(env, p0);
    case 2:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_revString(env, p0);
    case 3:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_sendSamplesToNative(env, p0);
    case 4:
      return Muxed_org_jni_1zero_SampleForAnnotationProcessor_sendToNative(env, p0);
    default:
      __builtin_unreachable();
  }
}
JNI_ZERO_BOUNDARY_EXPORT jobject Java_this_is_a_package_prefix_J_N_OBCDFIJOOOOOOOOSZ(
    JNIEnv* env,
    jclass jcaller,
    int8_t p0,
    uint16_t p1,
    double p2,
    float p3,
    int32_t p4,
    int64_t p5,
    jobject p6,
    jobject p7,
    jobject p8,
    jobject p9,
    jobject p10,
    jobject p11,
    jobject p12,
    jobject p13,
    int16_t p14,
    bool p15) {
  return Muxed_org_jni_1zero_SampleForAnnotationProcessor_testAllPrimitives(env, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
}
JNI_ZERO_BOUNDARY_EXPORT void Java_this_is_a_package_prefix_J_N_VOOOOOOOOOOOOOOOOOOO(
    JNIEnv* env,
    jclass jcaller,
    jobject p0,
    jobject p1,
    jobject p2,
    jobject p3,
    jobject p4,
    jobject p5,
    jobject p6,
    jobject p7,
    jobject p8,
    jobject p9,
    jobject p10,
    jobject p11,
    jobject p12,
    jobject p13,
    jobject p14,
    jobject p15,
    jobject p16,
    jobject p17,
    jobject p18) {
  return Muxed_org_jni_1zero_SampleForAnnotationProcessor_testSpecialTypes(env, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
}

// Helper Methods.
namespace {

bool RegisterNative_this_is_a_package_prefix_J_N(JNIEnv* env) {
  static const JNINativeMethod kMethods[] = {
        {"V",
         "()V",
         reinterpret_cast<void*>(Java_this_is_a_package_prefix_J_N_V)},
         {"O",
         "(I)Ljava/lang/Object;",
         reinterpret_cast<void*>(Java_this_is_a_package_prefix_J_N_O)},
         {"Z",
         "()Z",
         reinterpret_cast<void*>(Java_this_is_a_package_prefix_J_N_Z)},
         {"OO",
         "(ILjava/lang/Object;)Ljava/lang/Object;",
         reinterpret_cast<void*>(Java_this_is_a_package_prefix_J_N_OO)},
         {"OBCDFIJOOOOOOOOSZ",
         "(BCDFIJLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;SZ)Ljava/lang/Object;",
         reinterpret_cast<void*>(Java_this_is_a_package_prefix_J_N_OBCDFIJOOOOOOOOSZ)},
         {"VOOOOOOOOOOOOOOOOOOO",
         "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V",
         reinterpret_cast<void*>(Java_this_is_a_package_prefix_J_N_VOOOOOOOOOOOOOOOOOOO)},

  };
  jni_zero::ScopedJavaLocalRef<jclass> native_clazz =
      jni_zero::GetClass(env, "this.is.a.package.prefix.J.N");
  if (env->RegisterNatives(native_clazz.obj(), kMethods, std::size(kMethods)) < 0) {
    jni_zero::internal::HandleRegistrationError(env, native_clazz.obj(), __FILE__);
    return false;
  }

  return true;
}

}  // namespace

// Main Register Function.
bool RegisterNatives(JNIEnv* env) {
  // Register natives in a proxy.
  if (!RegisterNative_this_is_a_package_prefix_J_N(env)) {
    return false;
  }

  return true;
}

