2121import android .text .Editable ;
2222import android .text .TextWatcher ;
2323import android .util .Log ;
24-
24+ import android . widget . ArrayAdapter ;
2525import androidx .annotation .NonNull ;
2626import androidx .annotation .Nullable ;
2727import androidx .appcompat .app .AppCompatActivity ;
28-
2928import com .itsaky .androidide .androidtreesitter .databinding .ActivityMainBinding ;
3029import com .itsaky .androidide .androidtreesitter .databinding .ContentMainBinding ;
3130import com .itsaky .androidide .treesitter .TSLanguage ;
3231import com .itsaky .androidide .treesitter .TSParser ;
3332import com .itsaky .androidide .treesitter .TSTreeCursor ;
34- import com .itsaky .androidide .treesitter .string .UTF16String ;
3533import com .itsaky .androidide .treesitter .java .TSLanguageJava ;
34+ import com .itsaky .androidide .treesitter .json .TSLanguageJson ;
35+ import com .itsaky .androidide .treesitter .kotlin .TSLanguageKotlin ;
3636import com .itsaky .androidide .treesitter .python .TSLanguagePython ;
3737import com .itsaky .androidide .treesitter .string .UTF16StringFactory ;
38-
38+ import com . itsaky . androidide . treesitter . xml . TSLanguageXml ;
3939import java .io .PrintWriter ;
4040import java .io .StringWriter ;
41+ import java .util .HashMap ;
4142import java .util .Locale ;
43+ import java .util .Map ;
44+ import java .util .Objects ;
4245
4346/**
4447 * @author Akash Yadav
4548 */
4649public class MainActivity extends AppCompatActivity {
4750
51+ private static final Map <String , TSLanguage > languageMap ;
52+
4853 static {
4954 System .loadLibrary ("android-tree-sitter" );
5055 System .loadLibrary ("tree-sitter-java" );
56+ System .loadLibrary ("tree-sitter-json" );
57+ System .loadLibrary ("tree-sitter-kotlin" );
5158 System .loadLibrary ("tree-sitter-python" );
59+ System .loadLibrary ("tree-sitter-xml" );
60+
61+ languageMap = new HashMap <>();
62+ languageMap .put ("Java" , TSLanguageJava .newInstance ());
63+ languageMap .put ("JSON" , TSLanguageJson .newInstance ());
64+ languageMap .put ("Kotlin" , TSLanguageKotlin .newInstance ());
65+ languageMap .put ("Python" , TSLanguagePython .newInstance ());
66+ languageMap .put ("XML" , TSLanguageXml .newInstance ());
5267 }
5368
54- private final TSLanguage [] langs = {TSLanguageJava .newInstance (), TSLanguagePython .newInstance ()};
55- private ActivityMainBinding binding ;
5669 private ContentMainBinding content ;
5770
5871 @ Override
5972 public void onCreate (@ Nullable Bundle savedInstanceState ) {
6073 super .onCreate (savedInstanceState );
61- binding = ActivityMainBinding .inflate (getLayoutInflater ());
74+ com .itsaky .androidide .androidtreesitter .databinding .ActivityMainBinding binding = ActivityMainBinding .inflate (
75+ getLayoutInflater ());
6276 content = binding .content ;
6377
6478 setContentView (binding .getRoot ());
6579 setSupportActionBar (binding .toolbar );
6680
81+ content .languageChooser .setAdapter (
82+ new ArrayAdapter <>(this , android .R .layout .simple_list_item_1 ,
83+ languageMap .keySet ().toArray (new String [0 ])));
84+
6785 // new String(byte[], String) is not supported on Android)
6886 // so we use ByteBuffer to decode the string
6987 // Test working of UTF16String.toString() on Android
7088 final var utf16String = UTF16StringFactory .newString ("android-tree-sitter UTF16String" );
7189 Log .d ("MainActivity" , "UTF16Str: " + utf16String );
7290 utf16String .close ();
7391
74- content .code .addTextChangedListener (
75- new Watcher () {
76- @ Override
77- public void afterTextChanged (Editable editable ) {
78- afterInputChanged (editable );
79- }
80- });
92+ content .code .addTextChangedListener (new Watcher () {
93+ @ Override
94+ public void afterTextChanged (Editable editable ) {
95+ afterInputChanged (editable );
96+ }
97+ });
8198 }
8299
83100 private void afterInputChanged (Editable editable ) {
84101 final var start = System .currentTimeMillis ();
85102 try (final var parser = new TSParser ()) {
86- parser .setLanguage (langs [content .languageChooser .getSelectedItemPosition ()]);
103+ parser .setLanguage (Objects .requireNonNull (
104+ languageMap .get ((String ) content .languageChooser .getSelectedItem ())));
87105 try (final var tree = parser .parseString (editable .toString ())) {
88106 try (final var cursor = tree .getRootNode ().walk ()) {
89107 final var duration = System .currentTimeMillis () - start ;
@@ -134,10 +152,13 @@ private void repeatSpaces(StringBuilder sb, int count) {
134152 }
135153
136154 private abstract static class Watcher implements TextWatcher {
155+
137156 @ Override
138- public void beforeTextChanged (CharSequence charSequence , int i , int i1 , int i2 ) {}
157+ public void beforeTextChanged (CharSequence charSequence , int i , int i1 , int i2 ) {
158+ }
139159
140160 @ Override
141- public void onTextChanged (CharSequence charSequence , int i , int i1 , int i2 ) {}
161+ public void onTextChanged (CharSequence charSequence , int i , int i1 , int i2 ) {
162+ }
142163 }
143164}
0 commit comments