blob: a12d72dd246f36912e8dfa0996f481eab888d5e8 [file] [log] [blame]
// 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