Memakai Fasilitas Structured Search & Replace Di IntelliJ IDEA


Setelah memakai sebuah program cukup lama, saya menemukan bahwa bila JOptionPane dipanggil di luar event dispatching thread (EDT), terkadang-kadang akan muncul kesalahan tak terduga secara acak. Walaupun kesalahan acak ini tidak akan menganggu jalannya aplikasi, kehadirannya bisa membuat pengguna menjadi tidak tenang. Oleh sebab itu, saya membuat sebuah wrapper yang akan memastikan bahwa JOptionPane dipanggil dari EDT.

Dengan demikian, saya perlu mengubah kode program seperti:

if (JOptionPane.showConfirmDialog(view.mainPanel, 'Apakah Anda yakin ingin menghapus?',
   'Konfirmasi Hapus', JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) != JOptionPane.YES_OPTION) {
     return
}

menjadi berikut ini:

if (!DialogUtils.confirm(view.mainPanel, 'Apakah Anda yakin ingin menghapus?', 'Konfirmasi Hapus', 
   JOptionPane.WARNING_MESSAGE)) {
     return
}

Masalahnya adalah kode program yang harus diubah jumlahnya sangat banyak sekali. Saya tidak yakin dengan kualitas yang dihasilkan bila saya meng-edit kode program satu per satu di setiap class yang ada. Saya juga tidak bisa memakai fasilitas search and replace biasa karena parameter seperti pesan dan judul dialog bisa berbeda-beda.

Karena memakai IntelliJ IDEA, saya langsung teringat pada fasilitas structured replace yang dapat diakses melalui menu Edit, Find, Replace Structurally…. Structured search & replace dapat menyimpan bagian dari hasil pencarian sebagai variabel yang kemudian dapat dipakai sebagai replacement di posisi yang berbeda. Namun kelebihan utamanya yang sangat penting adalah pencarian dilakukan berdasarkan syntax Java atau Groovy sehingga whitespace (seperti spasi atau tab) dan urutan tidak akan mempengaruhi hasil pencarian.

Sebagai contoh, saya mengisi dialog yang muncul dengan template seperti pada gambar berikut ini:

Structured search & replace

Structured search & replace

Bagian yang diapit oleh tanda dollar ($) adalah nama variabel. Mereka memiliki fungsi yang hampir mirip dengan capturing group di regex. Bila saya men-klik tombol Edit variables…, saya bisa menyaring lebih lanjut lagi nilai variabel yang akan masuk dalam kategori pencarian:

Membatasi pencarian berdasarkan variabel

Membatasi pencarian berdasarkan variabel

Bila saya memulai pencarian, saya akan menemukan hasil seperti berikut ini:

Hasil pencarian

Hasil pencarian

Untuk melihat seperti apa hasil perubahan yang akan dilakukan, saya dapat men-klik tombol Preview Replacement. Selain itu, saya juga bisa mencoba mengubah hanya 1 baris terlebih dahulu dengan men-klik tombol Replace Selected. Setelah yakin dengan hasil perubahan, saya pun segera men-klik tombol Replace All untuk melakukan perubahan secara global pada 53 struktur kode program yang ditemukan tersebut.

Sebagai contoh lain, saya juga ingin semua kode program untuk closure close diapit oleh execInsideUISync sehingga kode program apa pun yang ada di dalamnya akan dikerjakan di EDT. Untuk mencapai tujuan tersebut, saya dapat menggunakan template seperti berikut ini:

Structured search & replace

Structured search & replace

Saya menghilangkan def di bagian replacement template agar IntelliJ IDEA tidak menghasilkan def yang duplikat. Ini adalah perilaku yang aneh karena IDEA harusnya bisa lebih pintar. Walaupun demikian, yang terpenting adalah pada akhirnya 29 method berhasil dimodifikasi secara global oleh structured search dengan hasil sesuai yang diharapkan.

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: