public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
Я пытаюсь реорганизовать переменную класса value
, что происходит на месте. Это означает, что диалоговое окно не появляется; Я нажимаю Enter, и он пытается выполнить рефакторинг всего проекта, включая комментарии и многое другое, в том числе:
<%--<link href="<c:url value="../core/core.css" />" />--%>
в файле .jsp. Это слишком «умно», чтобы пытаться реорганизовать комментарии , соответствующие всему проекту. Это часто вызывает большой риск ошибок, и рефакторинг в среде Java больше не является безопасным.
То же самое происходило в Intellij 12. Серьезно, мне не нужно, чтобы Intellij рекомендовал что-либо, что считается небезопасным, или когда он не уверен, что это то же самое!
Я могу исключить рефакторинг, но у меня нет времени каждый раз оценивать пять «предложений». Это просто увеличивает вероятность человеческой ошибки: большую часть времени я просто нажимаю клавишу ввода, и что-то реорганизуется.
Рефакторинг также является серьезной проблемой в среде Java, когда он иногда пытается заменить что-то в файлах .js. Серьезно, это нужно прекратить.
Без всплывающего диалогового окна я не могу убрать галочку с «строки поиска». Даже если это было отмечено, Intellij никогда не должен включать предложения по умолчанию, особенно если они находятся за пределами текущего файла. Он также может рекомендовать их рефакторинг, но они должны быть исключены по умолчанию. То есть это должна быть функция согласия, а не уничтожать все по умолчанию.
Это серьезная проблема пользовательского опыта с недавним так называемым «умным» рефакторингом Intellij. При рефакторинге файлов JS я не хочу искать в файлах Java комментарии или строки! Период! Наоборот!
Безопасность превыше всего! Разработчики, которые знают, что делают, при необходимости сами будут искать строки. В динамической языковой среде это делает Intellij невозможным для использования, потому что часто и без какого-либо четкого шаблона иногда происходит рефакторинг, иногда он меняет вещи во всем проекте, а что-то нет.
Должна быть опция, которая гласит: «Рефакторинг только относительно этого файла или при 100% выводе!», Особенно для динамических языков! Для статических языков не следует даже пытаться искать комментарии и строки вне файла.
Я не собирался обнародовать это, но я поднял этот вопрос более двух лет назад в багтрекере, но никто не обратил на это внимания.
РЕДАКТИРОВАТЬ
Для тех из вас, кто думает, что я могу зайти слишком далеко, я просто попробовал следующее:
С этим классом:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
И добавив это, например, к любому классу Java:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
При рефакторинге, KV.val
как и раньше, я получаю следующие рекомендации: ENTER от катастрофы и кое-что, что я должен оценивать и исключать по одному. Это требует усилий, просто раздражает и рискованно. Как будто кто-то кричит: СТОП! А потом ох, ничего через минуту, разочарование и эссе из 1000 слов (это).
Серьезно, есть ли способ предотвратить такое рискованное поведение !? И есть ли причина, по которой это включено по умолчанию ??
ИЗМЕНИТЬ 20200706
Дерьмо продолжается в 2020 году: https://youtrack.jetbrains.com/issue/IDEA-245370
User
вMyUser
него, он переименует все, включая файлы конфигурации, метки, URL-адреса, пути в сопоставлении вызовов отдыха ...Ответы:
При двойном нажатии
Shift + F6 (Refactor Rename)
открывается диалоговое окно, и вы можете отключить «Поиск в комментариях и строках»источник
Да, есть. В наши дни люди склонны использовать слишком много DSL, шаблонов и языковых инъекций. В простой старой Java все эти вещи в основном существуют как строки. Reflection API также представляет имя метода / класса в виде строки. Ни одна среда IDE не может поддерживать и распознавать их все, поэтому лучше всего предоставить вам страховку от возможных ошибок рефакторинга. Однако, если у вас есть отличное покрытие модульными тестами, тогда вы, вероятно, здесь в безопасности.
Что касается комментариев, то они часто содержат образцы кода. Эти фрагменты кода быстро устаревают при переименовании, поэтому полезно, когда IDE напоминает вам об их существовании.
Эта проверка, конечно, иногда приводит к ложным срабатываниям. Однако, если вы даете своим переменным описательные и понятные имена (я имею в виду не «var» или «val»), это вряд ли произойдет. Итак, IDE каким-то образом подталкивает вас к лучшему стилю кода.
Если вы все еще не уверены, то следуйте совету @Meo и отключите поиск по строкам и комментариям.
источник