O que Há de Novo no 3.2 (JDT)

Aqui estão as descrições de algumas das alterações mais interessantes ou significativas feitas nas ferramentas de desenvolvimento Java para o release 3.2 do Eclipse. Elas são agrupadas em:

Consulte também o documento Plataforma Eclipse: O que Há de Novo no 3.2 para saber as alterações na Plataforma.

Reformulação Java

Introduzir reformulação de via indireta

Introduzir Via Indireta é uma nova reformulação que permite redirecionar todos os responsáveis pela chamada de um método para um novo método. O novo método chama o original. Você pode substituir a implementação padrão do novo método por qualquer outra, se desejar.

A via indireta é útil quando um novo comportamento precisa ser introduzido em um método mas:

  • O método não pode ser alterado porque é de uma biblioteca.
  • O método não deve ser alterado porque é de um método de API.

Utilize a via indireta para correções de erro no método original ou como uma forma rápida de incluir código antes ou após chamadas a um método.

Para executar a reformulação Introduzir Via Indireta, selecione um método, chame Reformular > Introduzir Via Indireta..., forneça um nome e a classe de declaração para o novo método.

Diálogo Introduzir Via Indireta

O método é incluído na classe de declaração selecionada.

Visualização de Introduzir Via Indireta com referência atualizada

E todas as referências são atualizadas para chamar o novo método.

Resultado após Introduzir Via Indireta

Extrair reformulação de superclasse

Uma nova reformulação chamada Extrair Superclasse extrai uma superclasse comum de um conjunto de tipos irmãos. Os tipos irmãos selecionados tornam-se subclasses diretas da superclasse extraída após a aplicação da reformulação. Além disso, Extrair Superclasse permite utilizar a superclasse extraída sempre que possível no código.

JavaEditorTests e PropertiesEditorTests são os tipos irmãos no exemplo a seguir. A primeira figura mostra a hierarquia de tipo antes da reformulação.

Hierarquia antes de extrair EditorTests

A próxima figura mostra a hierarquia de tipo depois de extrair EditorTests com a reformulação Extrair Superclasse.

Hierarquia depois de extrair EditorTests

Para chamar essa reformulação, utilize Reformular > Extrair Superclasse....

Assistente de limpeza

Limpar pode ser chamado em qualquer número de arquivos de origem Java, pacotes ou em um projeto Java inteiro. Ele ajuda a:

  • corrigir vários problemas imediatamente
  • transportar código para utilizar um estilo de código preferido

Aqui estão alguns exemplos do que pode ser feito:

  • forçar a utilização de chaves (blocos) para todo corpo 'if', 'while' ou 'for'
  • qualificar todos os acessos de campo com 'this'
  • utilizar 'final' onde possível

Para transportar código compatível com Java 1.4 para 5.0, utilize Limpar para:

  • converter todos os loops for para loops for aperfeiçoados, onde possível
  • marcar todos os métodos de substituição com anotações @Override

Assistente de limpeza

Selecione um projeto, pacote ou arquivo e utilize Origem > Limpar... para iniciar esse assistente.

Histórico de reformulação

A maioria das reformulações oferecidas pelo JDT são agora acompanhadas em um Histórico de Reformulações. A infra-estrutura de reformulação armazena informações detalhadas sobre reformulações que foram desempenhadas em seu espaço de trabalho.

O histórico de reformulações pode ser procurado e editando utilizando Reformular > Histórico...

Diálogo do histórico de reformulações

Criar e aplicar scripts de reformulação

As reformulações desempenhadas em seu espaço de trabalho local podem ser exportadas agora para um Script de Reformulação e reproduzidas no espaço de trabalho arbitrário.

Tais scripts de reformulação podem ser utilizados em diferentes cenários, como na correção automática de interrupção de alterações da API entre camadas de software ou do fornecimento de correções com sofisticada semântica.

Crie um script de reformulação a partir do histórico de reformulações utilizando Reformular > Criar Script...

Ação Criar Script

Para aplicar o script de reformulação gerado em um espaço de trabalho arbitrário, utilize Reformular > Aplicar Script...

Um novo ponto de extensão permite que os escritores de plug-in contribuam com o suporte de script de reformulação para reformulações novas ou já existentes. Consulte o ponto de extensão org.eclipse.ltk.core.refactoring.refactoringContributions para obter detalhes.

Exportação de arquivo JAR com reformulações

Ao exportar um arquivo JAR do espaço de trabalho, o Assistente de Exportação de JAR oferece a opção para incluir informações de reformulação no arquivo JAR.

Utilize Arquivo > Exportar... e selecione Arquivo JAR. Na primeira página do Assistente de Exportação de JAR, selecione Exportar reformulações para projetos marcados. Clique no link para selecionar as reformulações a serem incluídas.

Seleção de reformulação de exportação de JAR

Os clientes podem, então, migrar uma versão antiga do arquivo JAR para uma nova utilizando a reformulação Reformular > Migrar Arquivo JAR.... Alternativamente, você também pode utilizar Caminho de Construção > Migrar Arquivo JAR... se um arquivo JAR estiver atualmente selecionado.

Ação Migrar Arquivo JAR

Essa reformulação atualizará automaticamente todo o código dependente da versão antiga do arquivo JAR para utilizar a nova versão do arquivo JAR.

Reformulações de reconhecimento da API

Existem várias reformulações que foram estendidas para suportar a compatibilidade da API, mantendo o membro original como um delegado para o membro reformulado:

  • Renomear Método
  • Renomear Campo (apenas para constantes)
  • Mover Método
  • Introduzir Parâmetro
  • Alterar Assinatura

Caixa de opções para 'Manter membro original como delegado para membro reformulado'

A geração de um membro delegado para preservar a compatibilidade da API pode ser ativada marcando Manter método original como delegado para método renomeado no diálogo de reformulação.

Renomear Tipo atualiza de modo semelhante a elementos nomeados

A reformulação Renomear Tipo pode agora renomear variáveis e métodos com nomes semelhantes ao tipo renomeado. Esse recurso ajuda a manter os nomes de métodos e de variáveis sincronizados com os nomes de tipos.

Atualizar UI de Declarações Similares

Para chamar essa reformulação, selecione um tipo e utilize Reformular > Renomear...

A reformulação Renomear Pacote renomeia subpacotes

Agora a reformulação Renomear Pacote também renomeia subpacotes, a pedido.

Diálogo Renomear Pacote com nova caixa de opções

Neste exemplo, junit.samples.money é renomeado para junit.examples.money.

Para chamar essa reformulação, selecione um pacote e utilize Reformular > Renomear...

Filtrar a visualização de reformulação

A página de visualização de reformulação suporta agora a filtragem de alterações. Isso é útil principalmente quando a atualização de correspondências textuais em comentários e cadeias é solicitada ao renomear elementos Java.

Página de visualização da reformulação filtrada

A captura de tela mostra o diálogo de renomeação filtrado para correspondências textuais ao renomear a classe TestCase para TestCasee.

As alterações relacionadas à visibilidade de elementos Java agora também podem ser filtradas.

Editor Java

Assistente de conteúdo customizável

Chamar repetidamente o assistente de conteúdo (Ctrl+Espaço na maioria das plataformas) agora repete o ciclo em diferentes categorias de sugestões.

Você pode designar atalhos de teclas separados a suas categorias de sugestões favoritas e utilizar a página de preferências Abre a página de preferências Assistente de Conteúdo Avançado Java > Editor > Assistente de Conteúdo > Avançado para configurar quais categorias são mostradas no grupo padrão de assistentes de conteúdo.

Pop-up do assistente de conteúdo com sugestões Java; a chamada repetida torna visível as sugestões de modelo

O novo ponto de extensão org.eclipse.jdt.ui.javaCompletionProposalComputer permite que os escritores de plug-ins contribuam com sugestões e categorias de conclusão para o processo do assistente de conteúdo do editor Java.

Suporte de caixa alternante em conclusão de código

A conclusão de código suporta agora padrões de caixa alternante. Por exemplo, a conclusão de NPE sugerirá NullPointerException. Esse suporte pode ser desativado utilizando a página de preferências Mostrar correspondências de caixa alternante na página de preferências Abre a página de preferências Assistente de Conteúdo Java > Editor > Assistente de Conteúdo.

Conclusão de NPE no Editor Java

Menu rápido para demarcar código

O novo menu rápido Demarcar com permite demarcar uma seleção de linhas com código. O menu é extensível com modelos customizados. Os modelos reconhecem agora as variáveis que precisam ser retiradas ou se tornar definitivas.

Demarcar com transformação de código executável

Utilize Origem > Demarcar com ou pressione Alt+Shift+Z para ver diretamente o menu.

Você pode incluir seus modelos customizados na página de preferências Java > Editor > Modelos. O modelo precisa apenas de uma variável ${line_selection}.

Novas correções rápidas

Várias novas correções rápidas foram incluídas, por exemplo:

  • corrigir acessos de tipo bruto

    Sugestão de correção de acesso bruto

    A correção junta informações de uso no mesmo arquivo. Para uma análise mais sofisticada, utilize a reformulação Inferir Argumentos de Tipo Genérico.

  • incluir atributo de anotação ausente

    Correção rápida para atributo de anotação ausente

  • incluir um novo membro de anotação

    Correção rápida para novo membro de anotação

Suporte de categorias

As categorias podem ser definidas em comentários Javadoc para tipos, métodos e campos que utilizam a tag @category.

Código utilizando categorias

As categorias são mostradas nas visualizações Esboço e Membros e no Esboço Rápido. O menu de visualização permite selecionar as categorias visíveis.

Esboço mostrando categorias e filtros de categorias

Todos os membros podem ser compactados

Quando a compactação é ativada, os campos, inicializadores e seus comentários podem ser compactados agora da mesma maneira que os métodos.

Inicializadores de campos compactados

Existem novos comandos de compactação de texto para reduzir todos os comentários, reduzir todos os membros e reconfigurar a estrutura de compactação. Esses comandos estão localizados no menu de contexto Compactação do editor Java na régua vertical.

Suporte de régua e esboço para arquivos Java fora do espaço de trabalho

O editor Java mostra agora réguas verticais e a página Esboço e o Esboço Rápido estão aptos a mostrar o esboço para arquivos Java externos e arquivos Java de repositórios.

Suporte de régua

Compilador Java

Conformidade do Java SE 6.0

A conformidade com o Java SE 6.0 é agora totalmente suportada. Em particular, os atributos StackMapTable (consulte JSR 202) são agora gerados em arquivos .class com um destino 1.6.

Configurando a conformidade com 6.0

Análise de referência nula

O compilador Java é agora capaz de desempenhar uma análise básica de referência nula para variáveis locais.

Esse diagnóstico opcional pode ser ativado na página de preferências Abre a página de preferências Erros/Avisos Java > Compilador > Erros/Avisos utilizando a preferência Potenciais Problemas de Programação > Referência Nula.

Editor Java com aviso de ref nula

Observe que a análise é um pouco conservadora, disposta sobre regras de designação definitiva. Ela considera apenas os casos em que existe algo suspeito (por exemplo, se posteriormente uma verificação nula for desempenhada), em vez de reivindicar todos os casos possíveis.

No modo de conformidade com 5.0, os avisos de referência nula podem ser silenciados utilizando @SuppressWarnings("null").

Recuperação de sintaxe aprimorada

O analisador Java interno é agora muito mais resiliente a erros de sintaxe. No Eclipse 3.1, um erro de sintaxe impediria a exibição de erros subseqüentes. Agora, o analisador pode recuperar de instruções com erros e continuar a desempenhar análises adicionais.

No exemplo a seguir, a referência inválida ao método bar() é detectada apesar do ponto-e-vírgula ausente na instrução anterior.

Editor Java com recuperação de sintaxe

Isso permite, por exemplo, que reformulações que afetam apenas um único arquivo tolerem erros de sintaxe. Por exemplo, é possível agora renomear ou extrair uma variável local por cima de um método que ainda não tenha sido gravado completamente.

Extrair variável local em método incompleto

Tratar erros configuráveis como não fatais

A opção Tratar erros configuráveis como erros fatais na página de preferências Abre a página de preferências Construção Java > Compilador > Construção controla se um erro configurável deve ser fatal ou não. Essa opção é ativada por padrão.

Se essa opção for desativada, o código compilado poderá ser executado apesar da existência de erros no código.

Detecção de tags $NON-NLS$ desnecessárias

Tags $NON-NLS$ desnecessárias são agora detectadas. Um problema será relatado se um comentário de linha iniciar com //$NON-NLS-x$ e não existir nenhuma cadeia correspondente na mesma linha.

A geração de relatório pode ser ativada e desativada utilizando a mesma preferência que para a detecção de Cadeias não externalizadas. Isso pode ser configurado na página de preferências Abre a página de preferências Erros/Avisos Java > Compilador > Erros/Avisos utilizando a preferência Estilo de Código > Cadeias não externalizadas (tags $NON-NLS ausentes/não utilizadas).

Editor Java com tag NLS desnecessária

Para remover as tags desnecessárias, utilize Correção Rápida (Ctrl+1) ou Ctrl+1, Ctrl+Enter para remover todas as tags desnecessárias em uma unidade de compilação.

Detecção de uso de tipo bruto

Os usos de tipos brutos são agora detectados. Um tipo bruto é uma referência a algum tipo genérico sem qualquer argumento de tipo (por exemplo, List no lugar de List<Element>).

Esse diagnóstico opcional pode ser ativado independentemente das operações de tipos desmarcados na página de preferências Abre a página de preferências de Erros/Avisos Java > Compilador > Erros/Avisos utilizando a preferência Tipos Genéricos > Uso de um Tipo Bruto.

Editor Java com uso de um tipo bruto

Esse aviso pode ser silenciado incluindo @SuppressWarnings("unchecked").

Além disso, uma Correção Rápida foi implementada para ajudar a resolver o problema de uso de tipo bruto.

Detecção de designações de parâmetro do método

A designação a parâmetros do método é considerada uma prática inadequada.

Para detectar e relatar essas designações, abra a página de preferências Abre a página de preferências de Erros/Avisos Java > Compilador > Erros/Avisos e ative a preferência Estilo de Código > Designação de Parâmetro.

Editor Java com aviso de designação de parâmetro

Detecção de rótulos não utilizados

O compilador Java detecta agora rótulos de instrução não utilizados

Esse diagnóstico opcional pode ser ativado na página de preferências Abre a página de preferências Erros/Avisos Java > Compilador > Erros/Avisos utilizando a preferência Código Desnecessário > Rótulo de Interrupção/Continuação Não Utilizado.

Editor Java com uso de um tipo bruto

Detecção de fall through de caso de comutador

O compilador Java pode agora detectar se um caso pode ser digitado efetuando fall through de um caso anterior. Os casos vazios são permitidos.

Esse diagnóstico opcional pode ser ativado na página de preferências Abre a página de preferências Erros/Avisos Java > Compilador > Erros/Avisos utilizando a preferência Potenciais Problemas de Programação > Fall Through de Caso de Comutador.

Editor Java com aviso de fall through

Uma correção rápida para incluir uma instrução break no caso anterior foi implementada.

Desempenho aprimorado para arquivos .jar grandes

O limite de tamanho do cache de modelo Java interno é agora uma função do tamanho máximo de heap (argumento VM -Xmx na maioria das JVMs) fornecida para a Java Virtual Machine que estiver executando o IDE Eclipse.

O aumento do tamanho de heap tem um notável aprimoramento de desempenho quando existem arquivos .jar grandes no caminho de classe de construção.

Recriando arquivos .class modificados

O construtor Java pode agora recriar arquivos .class modificados ou removidos na pasta de saída utilizando a origem inicial.

Isso pode ser controlado na página de preferências Abre a página de preferências Construção Java > Compilador > Construção utilizando a preferência Pasta de Saída > Reconstruir arquivos de classe modificados por outros.

Visualização Javadoc e dicas de ferramentas do Javadoc anexado

A visualização Javadoc e os focos Javadoc extraem agora as informações do Javadoc anexado para bibliotecas que não possuem origem anexada.

Ferramentas JUnit

Suporte de JUnit 4

O suporte de JUnit foi atualizado para executar e gravar testes JUnit 4. Consulte www.junit.org para obter informações adicionais sobre o JUnit 4.

  • utilize o assistente de Novas Etapas de Teste JUnit para gerar uma classe de teste JUnit 4:
    Suporte do JUnit 4 no assistente de Novas Etapas de Teste
  • utilize a biblioteca JUnit fornecida para incluir no caminho de construção
    Incluir biblioteca JUnit 4 com correção rápida
  • ative testes JUnit 4 no modo habitual com Executar como JUnit
  • ignore testes sinalizando-os com @Ignore

Histórico da visualização JUnit

A visualização JUnit pode agora manipular várias execuções de testes simultâneos. Você pode comutar entre as execuções de testes ativos e recentes utilizando o novo histórico. Os testes podem ser executados novamente a partir do histórico sem parar os testes já em execução.

Histórico do JUnit

Isso funciona com o JUnit 3, assim como com o JUnit 4.

Depurador Java
Ambientes de execução

Um ambiente de execução descreve os recursos de um tempo de execução - por exemplo, J2SE-1.4. Você pode especificar JREs utilizados para execução, depuração e construção com base na referência de um ambiente de execução. A nova página de preferências Abre a página de preferências Ambiente de Execução Java > JREs Instalados > Ambientes de Execução exibe os JREs instalados em seu espaço de trabalho compatíveis com cada ambiente de execução. Os JREs que atendem aos requisitos exatos de um ambiente de execução são exibidos em negrito e os JREs que excedem os requisitos de um ambiente são exibidos na fonte padrão. Quando mais de um JRE é compatível com um ambiente de execução, você pode selecionar um JRE padrão, marcando-o, para ser utilizado nesse ambiente.

Página de preferências Ambiente de Execução

Um caminho de construção ou configuração de ativação que referencia um ambiente de execução é mais transportável do que aquele que referencia um JRE explícito, uma vez que um ambiente de execução do JRE pode ser revolvido independentemente de seu nome. Utilize a guia JRE ou o assistente de Editar Biblioteca para especificar um ambiente de execução para execução e construção.

Guia JRE no diálogo de configuração de ativação

Variável de ativação da propriedade de sistema

Uma nova variável de ativação permite especificar dinamicamente as propriedades de sistema como argumentos do programa Java e da VM a partir do tempo de execução do Eclipse. A variável aceita um único argumento, que é o nome da propriedade de sistema a ser resolvido no tempo de ativação.

Por exemplo, a propriedade de sistema java.home seria referenciada com ${system_property:java.home}.

Guia Argumentos no diálogo de configuração de ativação

Suporte de avaliação para matrizes

A avaliação e o assistente de conteúdo são suportados agora para matrizes Java. Utilize this para se referir à matriz selecionada.

Assistente de código na visualização de variáveis

Grupos de encadeamento Java

Agora é possível exibir grupos de encadeamento na Visualização de Depuração comutando Mostrar Grupos de Encadeamento no menu de visualização.

Ativando grupos de encadeamento na visualização de depuração

Entradas exportadas do caminho de classe de tempo de execução

Um caminho de classe do tempo de execução pode ser configurado para incluir apenas entradas exportadas do caminho de construção. Por padrão um caminho de classe do tempo de execução inclui todas as entradas (exportadas e não exportadas).

Na guia Caminho de Classe, selecione a entrada padrão e utilize o botão Editar... para configurar a opção.

Guia Caminho de Classe no diálogo de configuração de ativação

Diálogo Editar Caminho de Classe do Tempo de Execução

Suspender Encadeamento versus Suspender VM

Uma opção foi incluída na página de preferências Abre a página de preferências Depuração Java > Depuração para controlar se os pontos de interrupção recém-criados suspenderão um único encadeamento ou a VM inteira.

Página de preferências Depuração

Diversos

Indicador de tipo Java

Ative o Indicador de Tipo Java na página de preferências Abre a página de preferências Decoradores Geral > Aparência > Decoração de Rótulo para descobrir qual é o primeiro tipo em uma unidade de compilação ou arquivo de classe. Um adorno é mostrado para interfaces, anotações e enums, enquanto uma classe comum permanece não decorada.

Decorador de rótulo do indicador de tipo Java

Localizar cadeias externalizadas interrompidas

Uma nova ação pode procurar cadeias externalizadas interrompidas. A procura relata chaves ausentes, não utilizadas e duplicadas.

Ação Localizar Cadeias Externalizadas Interrompidas

Para iniciar a procura, selecione um arquivo de propriedades, um pacote ou um projeto inteiro e utilize Origem > Localizar Cadeias Externalizadas Interrompidas

Suporte aprimorado para o mecanismo de externalização de cadeia do Eclipse

O mecanismo de externalização de cadeia do Eclipse possui agora o mesmo tipo de suporte que a externalização de cadeia tradicional. O valor externalizado associado é mostrado em um foco quando você se demora sobre uma chave de uma cadeia externalizada no editor Java.

Foco NLS

Ctrl+Clique na tecla para navegar diretamente para a entrada no arquivo de propriedades correspondente. No editor do arquivo de propriedades, você pode utilizar Ctrl+Clique para descobrir onde a chave é utilizada no código.

Criar um tipo a partir de um trecho de exemplo

Você pode colar um trecho de código contendo um tipo Java diretamente em um pacote ou pasta de origem para criar uma nova unidade de compilação. Por exemplo, selecione e copie este código-fonte
package pack;
   public class HelloWorld {
public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
em seguida, selecione uma pasta de origem no Explorador de Pacotes e utilize Ctrl+V (Editar > Colar). Isso cria automaticamente um novo pacote 'pack' e um arquivo 'HelloWorld.java' com o conteúdo copiado.

Gerar hashCode() e equals()

Uma nova ação pode ser utilizada para gerar os métodos hashCode() e equals(). Você pode selecionar os campos nos quais a implementação deve se basear.

Assistente de Gerar hash e equals

Para chamar essa ação, selecione um tipo e utilize Origem > Gerar hashCode() e equals()...

Formatador de código da linha de comandos

Agora é possível formatar o código-fonte sem iniciar a UI do Eclipse utilizando o novo aplicativo de formatador sem face. O formatador da linha de comandos funciona como um aplicativo padrão do Eclipse.

O seguinte comando formatará os arquivos de origem na pasta src com as opções especificadas no arquivo config.prefs:

eclipse -application org.eclipse.jdt.core.JavaCodeFormatter -config d:/config.prefs c:/src

Consulte Utilizando o Aplicativo de Formatador para obter detalhes.

Suporte para extensões equivalentes a Java

Arquivos com uma extensão que não seja .java e contendo código Java puro são agora suportados. Uma extensão equivalente a Java pode ser incluída utilizando a página de preferências Abre a página de preferências Tipo de Conteúdo Geral > Tipos de Conteúdo (tipo Texto > Arquivo de Origem Java).

Explorador de pacotes com 'Y.abc' como unidade de compilação