// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package this.is.a.package.prefix.org.chromium.base.natives;

// This file is autogenerated by
//     base/android/jni_generator/jni_registration_generator.py
// Please do not change its content.

public class GEN_JNI {
    public static final boolean TESTING_ENABLED = false;
    public static final boolean REQUIRE_MOCK = false;


      // Hashed name: Java_J_N_MGfHLNVl
      public static native void this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_foo();
      // Hashed name: Java_J_N_M5EfCheU
      public static native Object this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_bar(Object sample);
      // Hashed name: Java_J_N_MXQefv1w
      public static native String this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_revString(String stringToReverse);
      // Hashed name: Java_J_N_MSYtnUBS
      public static native String[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendToNative(String[] strs);
      // Hashed name: Java_J_N_MaV5G8K8
      public static native Object[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendSamplesToNative(Object[] strs);
      // Hashed name: Java_J_N_MM2Yz6XD
      public static native boolean this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_hasPhalange();
      // Hashed name: Java_J_N_MMy4dcxH
      public static native int[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testAllPrimitives(int zint, int[] ints, long zlong, long[] longs, short zshort, short[] shorts, char zchar, char[] chars, byte zbyte, byte[] bytes, double zdouble, double[] doubles, float zfloat, float[] floats, boolean zbool, boolean[] bools);
      // Hashed name: Java_J_N_MSslZIsy
      public static native void this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testSpecialTypes(Class clazz, Class[] classes, Throwable throwable, Throwable[] throwables, String string, String[] strings, Object tStruct, Object[] structs, Object obj, Object[] objects);
      // Hashed name: Java_J_N_Mehs9t7u
      public static native Throwable this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowable();
      // Hashed name: Java_J_N_MQH82FhP
      public static native Throwable[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowables();
      // Hashed name: Java_J_N_MyxAHj2Y
      public static native Class this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClass();
      // Hashed name: Java_J_N_MNGv55Cm
      public static native Class[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClasses();
      // Hashed name: Java_J_N_Mysjo$pl
      public static native String this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnString();
      // Hashed name: Java_J_N_M3B287zk
      public static native String[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStrings();
      // Hashed name: Java_J_N_M8UGsyhL
      public static native Object this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStruct();
      // Hashed name: Java_J_N_MtYMX5wX
      public static native Object[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStructs();
      // Hashed name: Java_J_N_MIs8T9aQ
      public static native Object this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObject();
      // Hashed name: Java_J_N_MtkQGyRy
      public static native Object[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObjects();
}
