Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit d6e9ae6

Browse files
committed
Added TSRange implementation
1 parent b909970 commit d6e9ae6

File tree

3 files changed

+83
-8
lines changed

3 files changed

+83
-8
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.itsaky.androidide.treesitter;
2+
3+
/**
4+
* @author Akash Yadav
5+
*/
6+
public class TSRange {
7+
private int startByte;
8+
private int endByte;
9+
private TSPoint startPoint;
10+
private TSPoint endPoint;
11+
12+
public TSRange(int startByte, int endByte, TSPoint startPoint, TSPoint endPoint) {
13+
this.startByte = startByte;
14+
this.endByte = endByte;
15+
this.startPoint = startPoint;
16+
this.endPoint = endPoint;
17+
}
18+
19+
public int getStartByte() {
20+
return startByte;
21+
}
22+
23+
public int getEndByte() {
24+
return endByte;
25+
}
26+
27+
public TSPoint getStartPoint() {
28+
return startPoint;
29+
}
30+
31+
public TSPoint getEndPoint() {
32+
return endPoint;
33+
}
34+
}

lib/ts_utils.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,17 @@ void onLoad(JNIEnv* env);
2525
void onUnload(JNIEnv* env);
2626

2727
jobject _marshalNode(JNIEnv* env, TSNode node);
28-
2928
TSNode _unmarshalNode(JNIEnv* env, jobject javaObject);
3029

31-
jobject _marshalTreeCursorNode(JNIEnv* env, TreeCursorNode node);
32-
3330
jobject _marshalPoint(JNIEnv* env, TSPoint point);
34-
3531
TSPoint _unmarshalPoint(JNIEnv* env, jobject javaObject);
3632

37-
TSInputEdit _unmarshalInputEdit(JNIEnv* env, jobject inputEdit);
33+
jobject _marshalRange(JNIEnv *env, TSRange range);
34+
TSRange _unmarshalRange(JNIEnv *env, jobject javaObject);
3835

3936
jobject _marshalMatch(JNIEnv *env, TSQueryMatch match);
40-
jobject _marshalCapture(JNIEnv *env, TSQueryCapture capture);
37+
jobject _marshalCapture(JNIEnv *env, TSQueryCapture capture);
38+
39+
jobject _marshalTreeCursorNode(JNIEnv* env, TreeCursorNode node);
40+
41+
TSInputEdit _unmarshalInputEdit(JNIEnv* env, jobject inputEdit);

lib/utils.cc

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ static jclass _pointClass;
2424
static jfieldID _pointRowField;
2525
static 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
2834
static jclass _inputEditClass;
2935
static 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) {
189206
jobject _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

Comments
 (0)