public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
Próbuję refaktoryzować zmienną klasy value
, co dzieje się w miejscu. Oznacza to, że nie pojawia się żadne okno dialogowe; Wciskam Enter i próbuje refaktoryzować cały projekt, włączając komentarze, a co nie, w tym:
<%--<link href="<c:url value="../core/core.css" />" />--%>
w pliku .jsp. Jest to zbyt „sprytne”, aby próbować refaktoryzować komentarze pasujące do całego projektu. Często powoduje to duże ryzyko błędów, a refaktoryzacja w środowisku Java nie jest już bezpieczna.
To samo działo się w Intellij 12. Poważnie, nie potrzebuję Intellij do rekomendowania czegokolwiek, co jest uważane za niebezpieczne lub gdy nie ma pewności, że jest to to samo!
Mogę wykluczyć refaktoryzacje, ale nie mam czasu na ocenę pięciu „sugestii” za każdym razem. Po prostu zwiększa ryzyko błędu ludzkiego: przez większość czasu po prostu wciskam enter i ups, wszystko jest refaktoryzowane.
Refaktoryzacja jest również poważnym problemem w środowisku Java, gdy czasami próbuje zastąpić elementy w plikach .js. Poważnie, to musi się skończyć.
Bez wyskakującego okienka nie mogę odznaczyć opcji „ciągi wyszukiwania”. Nawet jeśli jest zaznaczone, Intellij nigdy nie powinien domyślnie uwzględniać sugestii, zwłaszcza gdy znajduje się poza bieżącym plikiem. Może również zalecić ich refaktoryzację, ale powinny one być domyślnie wykluczone. Oznacza to, że powinna to być funkcja opt-in, a nie domyślnie wszystko niszczyć.
Jest to poważny problem z doświadczeniem użytkownika w przypadku nowszych tak zwanych „inteligentnych” refaktoryzacji Intellij. Podczas refaktoryzacji plików JS nie chcę przeszukiwać plików Java pod kątem komentarzy lub ciągów! Kropka! I wzajemnie!
Bezpieczeństwo jest najważniejsze! Programiści, którzy wiedzą, co robią, w razie potrzeby sami wyszukają łańcuchy. W dynamicznym środowisku językowym uniemożliwia korzystanie z Intellij, ponieważ często i bez wyraźnego wzorca czasami przechodzą refaktoryzacje, a czasami zmienia rzeczy w całym projekcie, a co nie.
Powinna istnieć opcja, która mówi: „refaktoryzuj tylko w odniesieniu do tego pliku lub gdy zostanie wyciągnięty w 100%!”, Szczególnie w przypadku języków dynamicznych! W przypadku języków statycznych nie powinien nawet próbować szukać komentarzy i łańcuchów poza plikiem.
Nie chciałem tego publicznie ujawnić, ale poruszyłem ten problem ponad 2 lata temu w bugtrackerze, ale nikt nie zwrócił na to uwagi.
EDYTOWAĆ
Dla tych z Was, którzy myślą, że mogę zajść daleko, właśnie wypróbowałem to:
W tej klasie:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
I dodając to do dowolnej klasy Java, na przykład:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
Podczas refaktoryzacji KV.val
jak poprzednio otrzymuję następujące zalecenia, ENTER od katastrofy i coś, co muszę oceniać i wykluczać pojedynczo. Wymaga wysiłku, jest po prostu denerwujące i ryzykowne. To tak, jakby ktoś krzyczał: STOP! A potem ooh, nic po minucie, frustracja i 1000 słów eseju (to).
Poważnie, czy istnieje sposób na wyłączenie tego rodzaju ryzykownych zachowań !? I czy jest jakiś powód, dla którego to jest domyślnie włączone?
EDYCJA 20200706
Gówno trwa dalej w 2020 roku: https://youtrack.jetbrains.com/issue/IDEA-245370
źródło
User
naMyUser
to, zmienisz nazwę wszystkiego, w tym plików konfiguracyjnych, etykiet, adresów URL, ścieżek w mapowaniu wywołań reszty ...Odpowiedzi:
Po
Shift + F6 (Refactor Rename)
dwukrotnym naciśnięciu otwiera się okno dialogowe, w którym można wyłączyć opcję „Szukaj w komentarzach i ciągach znaków”źródło
Tak jest. Obecnie ludzie mają tendencję do używania zbyt wielu DSL, szablonów i zastrzyków językowych. W zwykłej starej Javie wszystkie te rzeczy istnieją głównie jako łańcuchy. Interfejs API odbicia reprezentuje również nazwę metody / klasy jako ciąg. Żadne IDE nie jest w stanie obsługiwać i rozpoznawać ich wszystkich, dlatego najlepiej jest zapewnić Ci siatkę bezpieczeństwa przed możliwymi błędami w refaktoryzacji. Jeśli jednak masz doskonałe pokrycie testów jednostkowych, prawdopodobnie jesteś tutaj bezpieczny.
Jeśli chodzi o komentarze, często zawierają próbki kodu. Te fragmenty kodu szybko stają się przestarzałe podczas zmiany nazwy, więc jest pomocne, gdy IDE przypomina o ich istnieniu.
Ta kontrola oczywiście czasami prowadzi do fałszywych alarmów. Jeśli jednak nadasz swoim zmiennym opisowe, nie wymagające wyjaśnienia nazwy (nie mam na myśli „var” czy „val”), jest to mało prawdopodobne. Tak więc, IDE w jakiś sposób popycha Cię w kierunku lepszego stylu kodu.
Jeśli nadal nie jesteś przekonany, skorzystaj z porady @Meo i wyłącz wyszukiwanie w ciągach znaków i komentarzach.
źródło