public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
Ich versuche, die Klassenvariable zu überarbeiten value
, was an Ort und Stelle geschieht. Das bedeutet, dass kein Dialogfeld angezeigt wird. Ich drücke die Eingabetaste und es wird versucht, das gesamte Projekt zu überarbeiten, einschließlich Kommentaren und was nicht, einschließlich:
<%--<link href="<c:url value="../core/core.css" />" />--%>
in einer .jsp-Datei. Das ist viel zu "clever", um Kommentare zu überarbeiten , die über das gesamte Projekt hinweg übereinstimmen. Dies führt häufig zu einem hohen Fehlerrisiko, und das Refactoring in einer Java-Umgebung ist nicht mehr sicher.
Dasselbe geschah in Intellij 12. Im Ernst, ich brauche Intellij nicht, um etwas zu empfehlen, das als unsicher gilt, oder wenn es nicht sicher ist, ob es dasselbe ist!
Ich kann die Refactorings ausschließen, habe aber nicht jedes Mal Zeit, fünf "Vorschläge" zu bewerten. Es erhöht nur die Wahrscheinlichkeit menschlicher Fehler: Die meiste Zeit drücke ich einfach die Eingabetaste und woops Dinge werden überarbeitet.
Refactoring ist auch ein großes Problem in einer Java-Umgebung, wenn manchmal versucht wird, Dinge in .js-Dateien zu ersetzen. Im Ernst, das muss aufhören.
Ohne das Popup-Dialogfeld kann ich "Suchzeichenfolgen" nicht deaktivieren. Selbst wenn dies angekreuzt wurde, sollte Intellij die Vorschläge standardmäßig niemals einschließen, insbesondere wenn sie sich außerhalb der aktuellen Datei befinden. Es kann empfohlen werden, sie ebenfalls umzugestalten, sie sollten jedoch standardmäßig ausgeschlossen werden. Das heißt, es sollte eine Opt-In-Funktion sein, anstatt standardmäßig alles zu zerstören.
Dies ist ein ernstes Problem mit der Benutzererfahrung beim neueren sogenannten "intelligenten" Intellij-Refactoring. Beim Refactoring von JS-Dateien möchte ich Java-Dateien nicht nach Kommentaren oder Zeichenfolgen durchsuchen! Zeitraum! Und umgekehrt!
Sicherheit steht an erster Stelle! Entwickler, die wissen, was sie tun, suchen bei Bedarf selbst nach Zeichenfolgen. In einer dynamischen Sprachumgebung ist die Verwendung von Intellij unmöglich, da häufig und ohne klares Muster manchmal Refactorings durchgeführt werden, manchmal Änderungen im gesamten Projekt vorgenommen werden und was nicht.
Es sollte eine Option geben, die besagt: "Refactor nur relativ zu dieser Datei oder wenn 100% abgeleitet!", Insbesondere für dynamische Sprachen! Bei statischen Sprachen sollte nicht einmal versucht werden, nach Kommentaren und Zeichenfolgen außerhalb der Datei zu suchen.
Ich wollte es nicht öffentlich machen, aber ich habe dieses Problem vor über 2 Jahren im Bugtracker angesprochen, aber niemand hat darauf geachtet.
BEARBEITEN
Für diejenigen unter Ihnen, die denken, dass ich zu weit gehen könnte, habe ich dies einfach ausprobiert:
Mit dieser Klasse:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
Und dies zu jeder Java-Klasse hinzufügen , zum Beispiel:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
Beim Refactoring KV.val
wie zuvor erhalte ich die folgenden Empfehlungen, eine EINGABE von einer Katastrophe und etwas, das ich einzeln bewerten und ausschließen muss. Es kostet Mühe und ist nur nervig und riskant. Es ist wie wenn jemand schreit, STOP! Und dann ooh, nichts nach einer Minute, Frustration und einem 1000-langen Wortaufsatz (dies).
Im Ernst, gibt es eine Möglichkeit, diese Art von riskantem Verhalten zu deaktivieren? Und gibt es einen Grund, warum dies standardmäßig aktiviert ist?
EDIT 20200706
Die Scheiße geht 2020 weiter: https://youtrack.jetbrains.com/issue/IDEA-245370
quelle
User
umMyUser
es wird alles , einschließlich Konfigurationsdateien umbenennen, Etiketten, Urls, Wege in Ruhe Anrufe Mapping ...Antworten:
Wenn Sie
Shift + F6 (Refactor Rename)
zweimal drücken , wird der Dialog geöffnet und Sie können "In Kommentaren und Zeichenfolgen suchen" deaktivieren.quelle
Ja da ist. Heutzutage verwenden die Leute viel zu viele DSLs, Vorlagen und Sprachinjektionen. Im einfachen alten Java existieren all diese Dinge hauptsächlich als Strings. Die Reflection-API repräsentiert auch den Methoden- / Klassennamen als String. Es ist keiner IDE möglich, sie alle zu unterstützen und zu erkennen. Es ist daher am besten, Ihnen ein Sicherheitsnetz gegen mögliche Refactoring-Fehler zur Verfügung zu stellen. Wenn Sie jedoch eine hervorragende Abdeckung für Unit-Tests haben, sind Sie hier wahrscheinlich sicher.
Kommentare enthalten häufig Codebeispiele. Diese Codeblöcke werden beim Umbenennen schnell veraltet. Daher ist es hilfreich, wenn IDE Sie an ihre Existenz erinnert.
Diese Überprüfung führt natürlich manchmal zu Fehlalarmen. Wenn Sie Ihren Variablen jedoch beschreibende selbsterklärende Namen geben (ich meine nicht "var" oder "val"), ist dies unwahrscheinlich. IDE bringt Sie also in irgendeiner Weise zu einem besseren Codestil.
Wenn Sie immer noch nicht überzeugt sind, befolgen Sie die Anweisungen von @Meo und deaktivieren Sie die Suche in Zeichenfolgen und Kommentaren.
quelle