public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
Estou tentando refatorar a variável de classe value
, o que acontece no lugar. Isso significa que nenhuma caixa de diálogo é exibida; Eu pressiono enter e ele tenta refatorar todo o projeto, incluindo comentários e o que não, incluindo:
<%--<link href="<c:url value="../core/core.css" />" />--%>
em um arquivo .jsp. Isso é muito "inteligente" para tentar refatorar comentários que correspondam em todo o projeto. Isso geralmente causa muitos riscos de bug e a refatoração em um ambiente Java não é mais segura.
A mesma coisa estava ocorrendo no Intellij 12. Sério, eu não preciso do Intellij para recomendar nada que seja considerado inseguro, ou quando não tenho certeza se é a mesma coisa!
Posso excluir as refatorações, mas não tenho tempo para avaliar cinco "sugestões" todas as vezes. Isso apenas aumenta a chance de erro humano: na maioria das vezes eu apenas pressiono enter e, woops, as coisas são refeitas.
Refatorar também é um grande problema em um ambiente Java, quando às vezes tenta substituir coisas em arquivos .js. Sério, isso tem que parar.
Sem a caixa de diálogo pop-up, não consigo desmarcar "strings de pesquisa". Mesmo se isso estiver marcado, o Intellij nunca deve incluir as sugestões por padrão, especialmente quando estiver fora do arquivo atual. Ele pode recomendar refatorá-los também, mas eles devem ser excluídos por padrão. Ou seja, deve ser um recurso opcional, em vez de destruir tudo por padrão.
Este é um sério problema de experiência do usuário com a chamada refatoração "inteligente" do Intellij mais recente. Ao refatorar arquivos JS, não quero procurar comentários ou strings nos arquivos Java! Período! E vice versa!
A segurança está em primeiro lugar! Os desenvolvedores que sabem o que estão fazendo, eles próprios procurarão strings, se necessário. Em um ambiente de linguagem dinâmico, torna o Intellij impossível de usar, porque frequentemente, e sem nenhum padrão claro, às vezes as refatorações passam, às vezes muda as coisas no projeto e outras coisas.
Deve haver uma opção que diz, "refatorar apenas em relação a este arquivo ou quando 100% inferido!", Especialmente para linguagens dinâmicas! Para linguagens estáticas, não deve nem tentar procurar comentários e strings fora do arquivo.
Eu não queria colocá-lo em público, mas levantei esse problema há mais de 2 anos no bugtracker, mas ninguém prestou atenção.
EDITAR
Para aqueles de vocês que pensam que eu posso estar indo longe, eu apenas experimentei isto:
Com esta classe:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
E adicionando isso a qualquer classe Java, por exemplo:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
Ao refatorar KV.val
como antes, recebo as seguintes recomendações, um ENTER do desastre e algo que tenho que avaliar e excluir um de cada vez. É preciso esforço e é apenas irritante e arriscado. É como se alguém gritasse, PARE! E então ooh, nada depois de um minuto, frustração e um ensaio de 1000 palavras (isso).
Sério, existe uma maneira de desabilitar esse tipo de comportamento de risco !? E há alguma razão para isso estar ativado por padrão ??
EDIT 20200706
A merda continua em 2020: https://youtrack.jetbrains.com/issue/IDEA-245370
fonte
User
para,MyUser
ela renomeará tudo, incluindo arquivos de configuração, rótulos, urls, caminhos no mapeamento de chamadas restantes ...Respostas:
Quando você pressiona
Shift + F6 (Refactor Rename)
duas vezes, a caixa de diálogo é aberta e você pode desativar a opção "Pesquisar em comentários e strings"fonte
Sim existe. As pessoas tendem a usar muitas DSLs, modelos e injeções de linguagem hoje em dia. No antigo Java, todas essas coisas existem principalmente como Strings. A API de reflexão também representa o nome do método / classe como uma String. Não é possível para nenhum IDE suportar e reconhecer todos eles, então é melhor fornecer a você uma rede de segurança contra possíveis erros de refatoração. Porém, se você tiver uma excelente cobertura de teste de unidade, provavelmente está seguro aqui.
Quanto aos comentários, eles geralmente contêm exemplos de código. Esses fragmentos de código tornam-se obsoletos rapidamente durante as renomeações, por isso é útil quando o IDE lembra você de sua existência.
Essa verificação, é claro, às vezes resulta em falsos positivos. No entanto, se você estiver dando às suas variáveis nomes descritivos e autoexplicativos (não quero dizer "var" ou "val"), é improvável que isso aconteça. Portanto, o IDE está empurrando você para um estilo de código melhor de alguma forma.
Se você ainda não está convencido, siga um conselho de @Meo e desative a busca em strings e comentários.
fonte