| {TARGET_TYPE} retrieve{PTYPE}Field(String className, String fieldName, String signature) { | |
| return using((Arena arena) { | |
| final arena = Arena(); | |
| final env = getEnv(); | |
| final classNameChars = className.toNativeChars(arena); | |
| final fieldNameChars = fieldName.toNativeChars(arena); | |
| final signatueChars = signature.toNativeChars(arena); | |
| final cls = _bindings.LoadClass(classNameChars); | |
| if (cls == nullptr) { | |
| env.checkException(); | |
| } | |
| final fieldID = env.GetStaticFieldID(cls, fieldNameChars, signatueChars); | |
| if (fieldID == nullptr) { | |
| try { | |
| env.checkException(); | |
| } catch (e) { | |
| env.DeleteLocalRef(cls); | |
| rethrow; | |
| } | |
| } | |
| final result = env.GetStatic{TYPE}Field(cls, fieldID); | |
| {CLS_REF_DEL} | |
| {STR_REF_DEL} | |
| env.checkException(); | |
| {INVOKE_RESULT}; | |
| }); | |
| } | |