| 131 | } |
| 132 | |
| 133 | jclass CallbackHandlers::ResolveClass(Isolate *isolate, const string &baseClassName, |
| 134 | const string &fullClassName, |
| 135 | const Local<Object> &implementationObject, bool isInterface) { |
| 136 | JEnv env; |
| 137 | jclass globalRefToGeneratedClass = env.CheckForClassInCache(fullClassName); |
| 138 | |
| 139 | if (globalRefToGeneratedClass == nullptr) { |
| 140 | |
| 141 | // get needed arguments in order to load binding |
| 142 | JniLocalRef javaBaseClassName(env.NewStringUTF(baseClassName.c_str())); |
| 143 | JniLocalRef javaFullClassName(env.NewStringUTF(fullClassName.c_str())); |
| 144 | |
| 145 | jobjectArray methodOverrides = GetMethodOverrides(env, implementationObject); |
| 146 | |
| 147 | jobjectArray implementedInterfaces = GetImplementedInterfaces(env, implementationObject); |
| 148 | |
| 149 | auto runtime = Runtime::GetRuntime(isolate); |
| 150 | |
| 151 | // create or load generated binding (java class) |
| 152 | jclass generatedClass = (jclass) env.CallObjectMethod(runtime->GetJavaRuntime(), |
| 153 | RESOLVE_CLASS_METHOD_ID, |
| 154 | (jstring) javaBaseClassName, |
| 155 | (jstring) javaFullClassName, |
| 156 | methodOverrides, |
| 157 | implementedInterfaces, |
| 158 | isInterface); |
| 159 | |
| 160 | globalRefToGeneratedClass = env.InsertClassIntoCache(fullClassName, generatedClass); |
| 161 | |
| 162 | env.DeleteGlobalRef(methodOverrides); |
| 163 | env.DeleteGlobalRef(implementedInterfaces); |
| 164 | } |
| 165 | |
| 166 | return globalRefToGeneratedClass; |
| 167 | } |
| 168 | |
| 169 | // Called by ExtendMethodCallback when extending a class |
| 170 | string CallbackHandlers::ResolveClassName(Isolate *isolate, jclass &clazz) { |
nothing calls this directly
no test coverage detected