Add icu4c-backed transliteration.

Change-Id: I4194810646a2a0661331aaf941fb5f99ce7758b1
diff --git a/include/ScopedJavaUnicodeString.h b/include/ScopedJavaUnicodeString.h
index b108a6b..f6ed7ad 100644
--- a/include/ScopedJavaUnicodeString.h
+++ b/include/ScopedJavaUnicodeString.h
@@ -1,12 +1,12 @@
 /*
  * Copyright (C) 2010 The Android Open Source Project
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -24,34 +24,44 @@
 // jstring. We give ICU a direct pointer to the characters on the Java heap.
 // It's clever enough to copy-on-write if necessary.
 class ScopedJavaUnicodeString {
-public:
-    ScopedJavaUnicodeString(JNIEnv* env, jstring s) : mEnv(env), mString(s) {
-        mChars = env->GetStringChars(mString, NULL);
-        const int32_t charCount = env->GetStringLength(mString);
-        mUnicodeString.setTo(false, mChars, charCount);
+ public:
+  ScopedJavaUnicodeString(JNIEnv* env, jstring s) : mEnv(env), mString(s) {
+    if (s == NULL) {
+      jniThrowNullPointerException(mEnv, NULL);
+    } else {
+      mChars = env->GetStringChars(mString, NULL);
+      const int32_t charCount = env->GetStringLength(mString);
+      mUnicodeString.setTo(false, mChars, charCount);
     }
+  }
 
-    ~ScopedJavaUnicodeString() {
-        mEnv->ReleaseStringChars(mString, mChars);
+  ~ScopedJavaUnicodeString() {
+    if (mString != NULL) {
+      mEnv->ReleaseStringChars(mString, mChars);
     }
+  }
 
-    const UnicodeString& unicodeString() const {
-        return mUnicodeString;
-    }
+  bool valid() const {
+    return (mString != NULL);
+  }
 
-    UnicodeString& unicodeString() {
-        return mUnicodeString;
-    }
+  const UnicodeString& unicodeString() const {
+    return mUnicodeString;
+  }
 
-private:
-    JNIEnv* mEnv;
-    jstring mString;
-    const UChar* mChars;
-    UnicodeString mUnicodeString;
+  UnicodeString& unicodeString() {
+    return mUnicodeString;
+  }
 
-    // Disallow copy and assignment.
-    ScopedJavaUnicodeString(const ScopedJavaUnicodeString&);
-    void operator=(const ScopedJavaUnicodeString&);
+ private:
+  JNIEnv* mEnv;
+  jstring mString;
+  const UChar* mChars;
+  UnicodeString mUnicodeString;
+
+  // Disallow copy and assignment.
+  ScopedJavaUnicodeString(const ScopedJavaUnicodeString&);
+  void operator=(const ScopedJavaUnicodeString&);
 };
 
 #endif  // SCOPED_JAVA_UNICODE_STRING_H_included