@@ -24,6 +24,12 @@ static jclass _pointClass;
2424static jfieldID _pointRowField;
2525static jfieldID _pointColumnField;
2626
27+ static jclass _rangeClass;
28+ static jfieldID _rangeClassStartByteField;
29+ static jfieldID _rangeClassEndByteField;
30+ static jfieldID _rangeClassStartPointField;
31+ static jfieldID _rangeClassEndPointField;
32+
2733// TSInputEdit
2834static jclass _inputEditClass;
2935static jfieldID _inputEditStartByteField;
@@ -70,6 +76,15 @@ void onLoad(JNIEnv* env) {
7076 _loadField (_pointRowField, _pointClass, " row" , " I" );
7177 _loadField (_pointColumnField, _pointClass, " column" , " I" );
7278
79+ // TSRange
80+ _loadClass (_rangeClass, " com/itsaky/androidide/treesitter/TSRange" );
81+ _loadField (_rangeClassStartByteField, _rangeClass, " startByte" , " I" );
82+ _loadField (_rangeClassEndByteField, _rangeClass, " endByte" , " I" );
83+ _loadField (_rangeClassStartPointField, _rangeClass, " startPoint" ,
84+ " Lcom/itsaky/androidide/treesitter/TSPoint;" );
85+ _loadField (_rangeClassEndPointField, _rangeClass, " endPoint" ,
86+ " Lcom/itsaky/androidide/treesitter/TSPoint;" );
87+
7388 // TSInputEdit
7489 _loadClass (_inputEditClass, " com/itsaky/androidide/treesitter/TSInputEdit" );
7590 _loadField (_inputEditStartByteField, _inputEditClass, " startByte" , " I" );
@@ -100,6 +115,7 @@ void onUnload(JNIEnv* env) {
100115 env->DeleteGlobalRef (_nodeClass);
101116 env->DeleteGlobalRef (_treeCursorNodeClass);
102117 env->DeleteGlobalRef (_pointClass);
118+ env->DeleteGlobalRef (_rangeClass);
103119 env->DeleteGlobalRef (_inputEditClass);
104120 env->DeleteGlobalRef (_matchClass);
105121 env->DeleteGlobalRef (_captureClass);
@@ -177,7 +193,8 @@ jobject _marshalMatch(JNIEnv* env, TSQueryMatch match) {
177193 jobject obj = env->AllocObject (_matchClass);
178194 env->SetIntField (obj, _matchClassIdField, match.id );
179195 env->SetIntField (obj, _matchClassPatternIndexField, match.pattern_index );
180- jobjectArray captures = env->NewObjectArray (match.capture_count , _captureClass, NULL );
196+ jobjectArray captures =
197+ env->NewObjectArray (match.capture_count , _captureClass, NULL );
181198 for (int i = 0 ; i < match.capture_count ; i++) {
182199 const TSQueryCapture* c = match.captures + i;
183200 env->SetObjectArrayElement (captures, i, _marshalCapture (env, *c));
@@ -189,8 +206,31 @@ jobject _marshalMatch(JNIEnv* env, TSQueryMatch match) {
189206jobject _marshalCapture (JNIEnv* env, TSQueryCapture capture) {
190207 jobject obj = env->AllocObject (_captureClass);
191208 env->SetIntField (obj, _captureClassIndexField, capture.index );
192- env->SetObjectField (obj, _captureClassNodeField, _marshalNode (env, capture.node ));
209+ env->SetObjectField (obj, _captureClassNodeField,
210+ _marshalNode (env, capture.node ));
211+ return obj;
212+ }
213+
214+ jobject _marshalRange (JNIEnv* env, TSRange range) {
215+ jobject obj = env->AllocObject (_rangeClass);
216+ env->SetIntField (obj, _rangeClassStartByteField, range.start_byte );
217+ env->SetIntField (obj, _rangeClassEndByteField, range.end_byte );
218+ env->SetObjectField (obj, _rangeClassStartPointField,
219+ _marshalPoint (env, range.start_point ));
220+ env->SetObjectField (obj, _rangeClassEndPointField,
221+ _marshalPoint (env, range.end_point ));
193222 return obj;
194223}
195224
225+ TSRange _unmarshalRange (JNIEnv* env, jobject javaObject) {
226+ return (TSRange) {
227+ _unmarshalPoint (
228+ env, env->GetObjectField (javaObject, _rangeClassStartPointField)),
229+ _unmarshalPoint (
230+ env, env->GetObjectField (javaObject, _rangeClassEndPointField)),
231+ (uint32_t )env->GetIntField (javaObject, _rangeClassStartByteField),
232+ (uint32_t )env->GetIntField (javaObject, _rangeClassEndByteField)
233+ };
234+ }
235+
196236#endif
0 commit comments