blob: 3faaed6d5a386252221af0a124148dbf52c3c5dc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
// Copyright (C) 2019 Google LLC
//
// 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.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef ICING_JNI_JNI_CACHE_H_
#define ICING_JNI_JNI_CACHE_H_
#ifndef ICING_REVERSE_JNI_SEGMENTATION
namespace icing {
namespace lib {
class JniCache {}; // Declare an empty class definition for non-Android builds.
} // namespace lib
} // namespace icing
#else // ICING_REVERSE_JNI_SEGMENTATION
#include <jni.h>
#include "icing/text_classifier/lib3/utils/base/statusor.h"
#include "icing/text_classifier/lib3/utils/java/jni-base.h"
namespace icing {
namespace lib {
// A helper class to cache class and method pointers for calls from JNI to Java.
// (for implementations such as Java ICU that need to make calls from C++ to
// Java)
struct JniCache {
static libtextclassifier3::StatusOr<std::unique_ptr<JniCache>> Create(
JNIEnv* env);
// Returns the correct JNIEnv of the current thread. This allows multiple
// threads, each accessing the same instance of JniCache, to retrieve their
// unique JNIEnv pointers.
JNIEnv* GetEnv() const;
// Returns true if there are any pending exceptions from the execution of JNI
// calls. Also clears the exception if any existed.
bool ExceptionCheckAndClear() const;
JavaVM* jvm = nullptr;
// java.lang.String
libtextclassifier3::ScopedGlobalRef<jclass> string_class;
jmethodID string_constructor = nullptr;
jmethodID string_code_point_count = nullptr;
jmethodID string_length = nullptr;
libtextclassifier3::ScopedGlobalRef<jstring> string_utf8;
// java.util.Locale
libtextclassifier3::ScopedGlobalRef<jclass> locale_class;
libtextclassifier3::ScopedGlobalRef<jobject> locale_us;
jmethodID locale_constructor = nullptr;
jmethodID locale_for_language_tag = nullptr;
// BreakIteratorBatcher
libtextclassifier3::ScopedGlobalRef<jclass> breakiterator_class;
jmethodID breakiterator_constructor = nullptr;
jmethodID breakiterator_settext = nullptr;
jmethodID breakiterator_next = nullptr;
jmethodID breakiterator_first = nullptr;
jmethodID breakiterator_following = nullptr;
jmethodID breakiterator_preceding = nullptr;
// Helper to convert lib3 UnicodeText to Java strings.
libtextclassifier3::StatusOr<libtextclassifier3::ScopedLocalRef<jstring>>
ConvertToJavaString(const char* utf8_text,
const int utf8_text_size_bytes) const;
private:
explicit JniCache(JavaVM* jvm);
};
} // namespace lib
} // namespace icing
#endif // !ICING_REVERSE_JNI_SEGMENTATION
#endif // ICING_JNI_JNI_CACHE_H_
|