//
// This file was generated by //third_party/jni_zero/jni_zero.py
//
package org.jni_zero;

import android.content.Context;
import android.view.View;
import org.jni_zero.CheckDiscard;
import org.jni_zero.JniStaticTestMocker;
import org.jni_zero.NativeLibraryLoadedStatus;
import org.jni_zero.SampleForAnnotationProcessor;
import org.stubs.MyClass;

class SampleForAnnotationProcessorJni implements SampleForAnnotationProcessor.Natives {
  private static SampleForAnnotationProcessor.Natives testInstance;

  public static final JniStaticTestMocker<SampleForAnnotationProcessor.Natives> TEST_HOOKS =
      new JniStaticTestMocker<SampleForAnnotationProcessor.Natives>() {
    @Override
    public void setInstanceForTesting(SampleForAnnotationProcessor.Natives instance) {
      testInstance = instance;
    }
  };

  @Override
  public SampleForAnnotationProcessor bar(SampleForAnnotationProcessor sample) {
    return (SampleForAnnotationProcessor) nativeBar(sample);
  }
  private static native Object nativeBar(Object sample);

  @Override
  public void foo() {
    nativeFoo();
  }
  private static native void nativeFoo();

  @Override
  public boolean hasPhalange() {
    return (boolean) nativeHasPhalange();
  }
  private static native boolean nativeHasPhalange();

  @Override
  public Class returnClass() {
    return (Class) nativeReturnClass();
  }
  private static native Class nativeReturnClass();

  @Override
  public Class[] returnClasses() {
    return (Class[]) nativeReturnClasses();
  }
  private static native Class[] nativeReturnClasses();

  @Override
  public SampleForAnnotationProcessor[] returnConvertedAppObjects() {
    return (SampleForAnnotationProcessor[]) nativeReturnConvertedAppObjects(SampleForAnnotationProcessor.class);
  }
  private static native Object[] nativeReturnConvertedAppObjects(Class __arrayClazz);

  @Override
  public int[] returnConvertedInts() {
    return (int[]) nativeReturnConvertedInts();
  }
  private static native int[] nativeReturnConvertedInts();

  @Override
  public String returnConvertedString() {
    return (String) nativeReturnConvertedString();
  }
  private static native String nativeReturnConvertedString();

  @Override
  public String[] returnConvertedStrings() {
    return (String[]) nativeReturnConvertedStrings();
  }
  private static native String[] nativeReturnConvertedStrings();

  @Override
  public Object returnObject() {
    return (Object) nativeReturnObject();
  }
  private static native Object nativeReturnObject();

  @Override
  public Object[] returnObjects() {
    return (Object[]) nativeReturnObjects();
  }
  private static native Object[] nativeReturnObjects();

  @Override
  public String returnString() {
    return (String) nativeReturnString();
  }
  private static native String nativeReturnString();

  @Override
  public String[] returnStrings() {
    return (String[]) nativeReturnStrings();
  }
  private static native String[] nativeReturnStrings();

  @Override
  public SampleForAnnotationProcessor.TestStruct returnStruct() {
    return (SampleForAnnotationProcessor.TestStruct) nativeReturnStruct();
  }
  private static native Object nativeReturnStruct();

  @Override
  public SampleForAnnotationProcessor.TestStruct[] returnStructs() {
    return (SampleForAnnotationProcessor.TestStruct[]) nativeReturnStructs();
  }
  private static native Object[] nativeReturnStructs();

  @Override
  public Throwable returnThrowable() {
    return (Throwable) nativeReturnThrowable();
  }
  private static native Throwable nativeReturnThrowable();

  @Override
  public Throwable[] returnThrowables() {
    return (Throwable[]) nativeReturnThrowables();
  }
  private static native Throwable[] nativeReturnThrowables();

  @Override
  public String revString(String stringToReverse) {
    return (String) nativeRevString(stringToReverse);
  }
  private static native String nativeRevString(String stringToReverse);

  @Override
  public SampleForAnnotationProcessor[] sendSamplesToNative(SampleForAnnotationProcessor[] strs) {
    return (SampleForAnnotationProcessor[]) nativeSendSamplesToNative(strs);
  }
  private static native Object[] nativeSendSamplesToNative(Object[] strs);

  @Override
  public String[] sendToNative(String[] strs) {
    return (String[]) nativeSendToNative(strs);
  }
  private static native String[] nativeSendToNative(String[] strs);

  @Override
  public int[] 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) {
    return (int[]) nativeTestAllPrimitives(zint, ints, zlong, longs, zshort, shorts, zchar, chars, zbyte, bytes, zdouble, doubles, zfloat, floats, zbool, bools);
  }
  private static native int[] nativeTestAllPrimitives(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);

  @Override
  public void testSpecialTypes(Class clazz, Class[] classes, Throwable throwable, Throwable[] throwables, String string, String[] strings, String convertedString, String[] convertedStrings, String optionalString, SampleForAnnotationProcessor.TestStruct tStruct, SampleForAnnotationProcessor.TestStruct[] structs, Object obj, Object convertedObj, Object[] objects, MyClass.SecondNestedInterface nestedInterface, View view, Context context, Object[] convertedObjects) {
    nativeTestSpecialTypes(clazz, classes, throwable, throwables, string, strings, convertedString, convertedStrings, optionalString, tStruct, structs, obj, convertedObj, objects, nestedInterface, view, context, convertedObjects);
  }
  private static native void nativeTestSpecialTypes(Class clazz, Class[] classes, Throwable throwable, Throwable[] throwables, String string, String[] strings, String convertedString, String[] convertedStrings, String optionalString, Object tStruct, Object[] structs, Object obj, Object convertedObj, Object[] objects, Object nestedInterface, Object view, Object context, Object[] convertedObjects);

  public static SampleForAnnotationProcessor.Natives get() {
    NativeLibraryLoadedStatus.checkLoaded();
    return new SampleForAnnotationProcessorJni();
  }
}
