/*
 *  Copyright 2017 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

// Originally these classes are from Chromium.
// https://cs.chromium.org/chromium/src/base/android/scoped_java_ref.h.

#ifndef SDK_ANDROID_NATIVE_API_JNI_SCOPED_JAVA_REF_H_
#define SDK_ANDROID_NATIVE_API_JNI_SCOPED_JAVA_REF_H_

#include <jni.h>

#include "third_party/jni_zero/jni_zero.h"

namespace webrtc {
template <typename T>
using JavaParamRef = jni_zero::JavaRef<T>;
using jni_zero::AdoptRef;
using jni_zero::CreateLeaky;
using jni_zero::JavaRef;
using jni_zero::ScopedJavaGlobalRef;
using jni_zero::ScopedJavaLocalRef;

template <typename T>
inline jni_zero::ScopedJavaLocalRef<T> static_java_ref_cast(
    JNIEnv* env,
    jni_zero::JavaRef<jobject> const& ref) {
  jni_zero::ScopedJavaLocalRef<jobject> owned_ref =
      jni_zero::ScopedJavaLocalRef<jobject>(ref);
  return jni_zero::ScopedJavaLocalRef<T>::Adopt(
      env, static_cast<T>(owned_ref.Release()));
}

}  // namespace webrtc

#endif  // SDK_ANDROID_NATIVE_API_JNI_SCOPED_JAVA_REF_H_
