public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
Saya mencoba untuk merefaktor variabel kelas value
, yang terjadi di tempat. Itu berarti tidak ada dialog yang muncul; Saya menekan enter dan mencoba melakukan refactor di seluruh proyek, termasuk komentar dan apa yang tidak, termasuk:
<%--<link href="<c:url value="../core/core.css" />" />--%>
dalam file .jsp. Itu terlalu "pintar" untuk mencoba mengubah komentar yang cocok di seluruh proyek. Hal ini sering kali menyebabkan banyak risiko bug, dan pemfaktoran ulang di lingkungan Java tidak lagi aman.
Hal yang sama terjadi di Intellij 12. Sungguh, saya tidak perlu Intellij merekomendasikan apa pun yang dianggap tidak aman, atau bila tidak yakin itu adalah hal yang sama!
Saya dapat mengecualikan pemfaktoran ulang tetapi saya tidak punya waktu untuk mengevaluasi lima "saran" setiap saat. Itu hanya meningkatkan kemungkinan kesalahan manusia: sebagian besar waktu saya hanya menekan enter, dan banyak hal yang difaktor ulang.
Refactoring juga merupakan masalah utama dalam lingkungan Java ketika terkadang mencoba mengganti sesuatu dalam file .js. Serius, ini harus dihentikan.
Tanpa dialog popup, saya tidak bisa menghapus centang "string pencarian". Meskipun sudah dicentang, Intellij tidak boleh menyertakan saran secara default, terutama bila itu berada di luar file saat ini. Ini dapat merekomendasikan untuk memfaktor ulang mereka juga, tetapi mereka harus dikecualikan secara default. Artinya, itu harus menjadi fitur keikutsertaan, daripada secara default menghancurkan semuanya.
Ini adalah masalah pengalaman pengguna yang serius dengan yang lebih baru yang disebut pemfaktoran ulang "pintar" Intellij. Saat melakukan refactoring file JS, saya tidak ingin mencari file Java untuk komentar atau string! Titik! Dan sebaliknya!
Keamanan adalah yang utama! Pengembang yang tahu apa yang mereka lakukan akan mencari string sendiri jika diperlukan. Dalam lingkungan bahasa yang dinamis, hal itu membuat Intellij tidak mungkin digunakan, karena seringkali, dan tanpa pola yang jelas, terkadang refactorings berjalan, terkadang hal itu mengubah banyak hal di seluruh proyek dan apa yang tidak.
Harus ada opsi yang mengatakan, "refactor hanya relatif terhadap file ini atau ketika 100% disimpulkan!", Terutama untuk bahasa dinamis! Untuk bahasa statis seharusnya tidak mencoba mencari komentar dan string di luar file.
Saya tidak bermaksud untuk mempublikasikannya, tetapi saya telah mengangkat masalah ini lebih dari 2 tahun yang lalu di bugtracker, tetapi tidak ada yang memperhatikan.
EDIT
Bagi Anda yang berpikir bahwa saya mungkin akan bertindak jauh, saya baru saja mencoba ini:
Dengan kelas ini:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
Dan menambahkan ini ke kelas Java apa pun , misalnya:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
Ketika melakukan refactoring KV.val
seperti sebelumnya, saya mendapatkan rekomendasi berikut, ENTER dari bencana dan sesuatu yang harus saya evaluasi dan kecualikan satu per satu. Itu membutuhkan usaha dan hanya mengganggu dan berisiko. Ini seperti seseorang berteriak, BERHENTI! Dan kemudian ooh, tidak ada setelah satu menit, frustrasi dan esai 1000 kata panjang (ini).
Sungguh, apakah ada cara untuk menonaktifkan perilaku berisiko seperti ini !? Dan apakah ada alasan mengapa ini diaktifkan secara default ??
EDIT 20200706
Sial berlanjut di 2020: https://youtrack.jetbrains.com/issue/IDEA-245370
sumber
User
menjadiMyUser
itu akan mengganti nama semuanya termasuk file konfigurasi, label, url, jalur dalam pemetaan panggilan istirahat ...Jawaban:
Saat Anda menekan
Shift + F6 (Refactor Rename)
dua kali, dialog akan terbuka dan Anda dapat menonaktifkan "Telusuri di komentar dan string"sumber
Ya ada. Orang-orang cenderung menggunakan terlalu banyak DSL, templat, dan suntikan bahasa akhir-akhir ini. Di Jawa lama biasa semua hal ini terutama ada sebagai String. API Refleksi juga mewakili metode / nama kelas sebagai String. IDE tidak mungkin mendukung dan mengenali semuanya, jadi sebaiknya berikan jaring pengaman kepada Anda dari kemungkinan kesalahan pemfaktoran ulang. Jika Anda memiliki cakupan pengujian unit yang sangat baik, Anda mungkin aman di sini.
Adapun komentar, sering kali berisi contoh kode. Potongan kode ini menjadi usang dengan cepat selama penggantian nama, jadi akan membantu jika IDE mengingatkan Anda tentang keberadaannya.
Pemeriksaan ini, tentu saja, terkadang menghasilkan positif palsu. Namun, jika Anda memberi nama variabel deskriptif penjelasan diri (maksud saya bukan "var" atau "val"), ini tidak mungkin terjadi. Jadi, IDE mendorong Anda menuju gaya kode yang lebih baik dalam beberapa cara.
Jika Anda masih belum yakin, ikuti saran oleh @Meo dan nonaktifkan pencarian di string dan komentar.
sumber