blob: 4875ca7301a10fffa71c3b8ae54e7db086a28b1e (
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
|
@import io.github.landerlyoung.jenny.JteData
@import io.github.landerlyoung.jenny.Constants
@import io.github.landerlyoung.jenny.HandyHelper
@import io.github.landerlyoung.jenny.MethodOverloadResolver.MethodRecord
@import javax.lang.model.type.TypeKind
@param jteData: JteData
${jteData.initClassPrefix} bool ${jteData.className}::initClazz(JNIEnv* env) {
#define JENNY_CHECK_NULL(val) \
do { \
if ((val) == nullptr) { \
@if (!jteData.environment.configurations.errorLoggerFunction.isNullOrBlank()) ${jteData.environment.configurations.errorLoggerFunction}(env, "can't init ${jteData.className}::" #val); \@else env->ExceptionDescribe(); \@endif
return false; \
} \
} while(false)
auto& state = getClassInitState();
@if (jteData.environment.configurations.threadSafe)
if (!state.sInited) {
std::lock_guard<std::mutex> lg(state.sInitLock);
@endif
if (!state.sInited) {
auto clazz = env->FindClass(FULL_CLASS_NAME);
JENNY_CHECK_NULL(clazz);
state.sClazz = reinterpret_cast<jclass>(env->NewGlobalRef(clazz));
env->DeleteLocalRef(clazz);
JENNY_CHECK_NULL(state.sClazz);
|