// Copyright 2016 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.

#include "flutter/lib/jni/jni_string.h"

namespace blink {

IMPLEMENT_WRAPPERTYPEINFO(jni, JniString);

JniString::JniString(JNIEnv* env, jstring object) : JniObject(env, object) {}

JniString::~JniString() {}

jstring JniString::java_string() {
  return static_cast<jstring>(java_object());
}

ftl::RefPtr<JniString> JniString::Create(Dart_Handle dart_string) {
  Dart_Handle exception = nullptr;
  {
    ENTER_JNI();

    jstring java_string =
        DartJni::DartToJavaString(env, dart_string, &exception);
    if (exception)
      goto fail;

    return ftl::MakeRefCounted<JniString>(env, java_string);
  }
fail:
  Dart_ThrowException(exception);
  FTL_NOTREACHED();
  return nullptr;
}

Dart_Handle JniString::GetText() {
  Dart_Handle exception = nullptr;
  {
    ENTER_JNI();

    jsize length = env->GetStringLength(java_string());
    if (CheckJniException(env, &exception))
      goto fail;

    const jchar* chars = env->GetStringChars(java_string(), NULL);
    if (CheckJniException(env, &exception))
      goto fail;

    Dart_Handle result = Dart_NewStringFromUTF16(chars, length);
    env->ReleaseStringChars(java_string(), chars);

    return result;
  }
fail:
  Dart_ThrowException(exception);
  FTL_NOTREACHED();
  return Dart_Null();
}

}  // namespace blink
