aboutsummaryrefslogtreecommitdiffstats
path: root/sample-android/templates/initclass_preamble.kte
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);